00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackEngineProfiling__
00021 #define __JackEngineProfiling__
00022
00023 #include "types.h"
00024 #include "JackTypes.h"
00025 #include "JackConstants.h"
00026 #include "JackShmMem.h"
00027
00028 namespace Jack
00029 {
00030
00031 #define TIME_POINTS 100000
00032 #define FAILURE_TIME_POINTS 10000
00033 #define FAILURE_WINDOW 10
00034 #define MEASURED_CLIENTS 32
00035
00040 PRE_PACKED_STRUCTURE
00041 struct JackTimingMeasureClient
00042 {
00043 int fRefNum;
00044 jack_time_t fSignaledAt;
00045 jack_time_t fAwakeAt;
00046 jack_time_t fFinishedAt;
00047 jack_client_state_t fStatus;
00048
00049 JackTimingMeasureClient()
00050 :fRefNum(-1),
00051 fSignaledAt(0),
00052 fAwakeAt(0),
00053 fFinishedAt(0),
00054 fStatus((jack_client_state_t)0)
00055 {}
00056
00057 } POST_PACKED_STRUCTURE;
00058
00063 PRE_PACKED_STRUCTURE
00064 struct JackTimingClientInterval
00065 {
00066 int fRefNum;
00067 char fName[JACK_CLIENT_NAME_SIZE + 1];
00068 int fBeginInterval;
00069 int fEndInterval;
00070
00071 JackTimingClientInterval()
00072 :fRefNum(-1),
00073 fBeginInterval(-1),
00074 fEndInterval(-1)
00075 {}
00076
00077 } POST_PACKED_STRUCTURE;
00078
00083 PRE_PACKED_STRUCTURE
00084 struct JackTimingMeasure
00085 {
00086 unsigned int fAudioCycle;
00087 jack_time_t fPeriodUsecs;
00088 jack_time_t fCurCycleBegin;
00089 jack_time_t fPrevCycleEnd;
00090 JackTimingMeasureClient fClientTable[CLIENT_NUM];
00091
00092 JackTimingMeasure()
00093 :fAudioCycle(0),
00094 fPeriodUsecs(0),
00095 fCurCycleBegin(0),
00096 fPrevCycleEnd(0)
00097 {}
00098
00099 } POST_PACKED_STRUCTURE;
00100
00105 class JackClientInterface;
00106 class JackGraphManager;
00107
00108 PRE_PACKED_STRUCTURE
00109 class SERVER_EXPORT JackEngineProfiling
00110 {
00111
00112 private:
00113
00114 JackTimingMeasure fProfileTable[TIME_POINTS];
00115 JackTimingClientInterval fIntervalTable[MEASURED_CLIENTS];
00116
00117 unsigned int fAudioCycle;
00118 unsigned int fMeasuredClient;
00119
00120 bool CheckClient(const char* name, int cur_point);
00121
00122 public:
00123
00124 JackEngineProfiling();
00125 ~JackEngineProfiling();
00126
00127 void Profile(JackClientInterface** table,
00128 JackGraphManager* manager,
00129 jack_time_t period_usecs,
00130 jack_time_t cur_cycle_begin,
00131 jack_time_t prev_cycle_end);
00132
00133 JackTimingMeasure* GetCurMeasure();
00134
00135 } POST_PACKED_STRUCTURE;
00136
00137 }
00138
00139 #endif