| 
							- /*
 - Copyright (C) 2008 Grame & RTL
 - 
 - This program is free software; you can redistribute it and/or modify
 - it under the terms of the GNU Lesser General Public License as published by
 - the Free Software Foundation; either version 2.1 of the License, or
 - (at your option) any later version.
 - 
 - This program is distributed in the hope that it will be useful,
 - but WITHOUT ANY WARRANTY; without even the implied warranty of
 - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 - GNU Lesser General Public License for more details.
 - 
 - You should have received a copy of the GNU Lesser General Public License
 - along with this program; if not, write to the Free Software 
 - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 - 
 - */
 - 
 - #ifndef __JackEngineProfiling__
 - #define __JackEngineProfiling__
 - 
 - #include "types.h"
 - #include "JackTypes.h"
 - #include "JackConstants.h"
 - #include "JackShmMem.h"
 - 
 - namespace Jack
 - {
 - 
 - #define TIME_POINTS 100000
 - #define FAILURE_TIME_POINTS 10000
 - #define FAILURE_WINDOW 10
 - #define MEASURED_CLIENTS 32
 - 
 - /*!
 - \brief Timing structure for a client.
 - */
 - 
 - PRE_PACKED_STRUCTURE
 - struct JackTimingMeasureClient
 - {
 -     int fRefNum;
 -     jack_time_t	fSignaledAt;
 -     jack_time_t	fAwakeAt;
 -     jack_time_t	fFinishedAt;
 -     jack_client_state_t fStatus;
 - 
 -     JackTimingMeasureClient() 
 -         :fRefNum(-1),
 -         fSignaledAt(0),
 -         fAwakeAt(0),
 -         fFinishedAt(0),
 -         fStatus((jack_client_state_t)0)
 -     {}
 - 
 - } POST_PACKED_STRUCTURE;
 - 
 - /*!
 - \brief Timing interval in the global table for a given client
 - */
 - 
 - PRE_PACKED_STRUCTURE
 - struct JackTimingClientInterval
 - {
 -     int fRefNum;
 -     char fName[JACK_CLIENT_NAME_SIZE + 1];
 -     int fBeginInterval;
 -     int fEndInterval;
 - 
 -     JackTimingClientInterval()
 -          :fRefNum(-1),
 -          fBeginInterval(-1),
 -          fEndInterval(-1)
 -     {}
 - 
 - } POST_PACKED_STRUCTURE;
 - 
 - /*!
 - \brief Timing structure for a table of clients.
 - */
 - 
 - PRE_PACKED_STRUCTURE
 - struct JackTimingMeasure
 - {
 -     unsigned int fAudioCycle;
 -     jack_time_t fPeriodUsecs;
 -     jack_time_t fCurCycleBegin;
 -     jack_time_t fPrevCycleEnd;
 -     JackTimingMeasureClient fClientTable[CLIENT_NUM];
 - 
 -     JackTimingMeasure()
 -         :fAudioCycle(0), 
 -         fPeriodUsecs(0),
 -         fCurCycleBegin(0),
 -         fPrevCycleEnd(0)
 -     {}
 - 
 - } POST_PACKED_STRUCTURE;
 - 
 - /*!
 - \brief Client timing monitoring.
 - */
 - 
 - class JackClientInterface;
 - class JackGraphManager;
 - 
 - PRE_PACKED_STRUCTURE
 - class SERVER_EXPORT JackEngineProfiling
 - {
 - 
 -     private:
 - 
 -         JackTimingMeasure fProfileTable[TIME_POINTS];
 -         JackTimingClientInterval fIntervalTable[MEASURED_CLIENTS];
 - 
 -         unsigned int fAudioCycle;
 -         unsigned int fMeasuredClient;
 - 
 -         bool CheckClient(const char* name, int cur_point);
 - 
 -     public:
 - 
 -         JackEngineProfiling();
 -         ~JackEngineProfiling();
 - 
 -         void Profile(JackClientInterface** table, 
 -                     JackGraphManager* manager, 
 -                     jack_time_t period_usecs,
 -                     jack_time_t cur_cycle_begin, 
 -                     jack_time_t prev_cycle_end);
 -                     
 -         JackTimingMeasure* GetCurMeasure();
 - 
 - } POST_PACKED_STRUCTURE;
 - 
 - } // end of namespace
 - 
 - #endif
 
 
  |