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 struct JackTimingMeasureClient
00041 {
00042 int fRefNum;
00043 jack_time_t fSignaledAt;
00044 jack_time_t fAwakeAt;
00045 jack_time_t fFinishedAt;
00046 jack_client_state_t fStatus;
00047
00048 JackTimingMeasureClient()
00049 :fRefNum(-1),
00050 fSignaledAt(0),
00051 fAwakeAt(0),
00052 fFinishedAt(0),
00053 fStatus((jack_client_state_t)0)
00054 {}
00055 };
00056
00061 struct JackTimingClientInterval
00062 {
00063 int fRefNum;
00064 char fName[JACK_CLIENT_NAME_SIZE + 1];
00065 int fBeginInterval;
00066 int fEndInterval;
00067
00068 JackTimingClientInterval()
00069 :fRefNum(-1),
00070 fBeginInterval(-1),
00071 fEndInterval(-1)
00072 {}
00073 };
00074
00079 struct JackTimingMeasure
00080 {
00081 unsigned int fAudioCycle;
00082 jack_time_t fPeriodUsecs;
00083 jack_time_t fCurCycleBegin;
00084 jack_time_t fPrevCycleEnd;
00085 JackTimingMeasureClient fClientTable[CLIENT_NUM];
00086
00087 JackTimingMeasure()
00088 :fAudioCycle(0),
00089 fPeriodUsecs(0),
00090 fCurCycleBegin(0),
00091 fPrevCycleEnd(0)
00092 {}
00093 };
00094
00099 class JackClientInterface;
00100 class JackGraphManager;
00101
00102 class SERVER_EXPORT JackEngineProfiling
00103 {
00104
00105 private:
00106
00107 JackTimingMeasure fProfileTable[TIME_POINTS];
00108 JackTimingClientInterval fIntervalTable[MEASURED_CLIENTS];
00109
00110 unsigned int fAudioCycle;
00111 unsigned int fMeasuredClient;
00112
00113 bool CheckClient(const char* name, int cur_point);
00114
00115 public:
00116
00117 JackEngineProfiling();
00118 ~JackEngineProfiling();
00119
00120 void Profile(JackClientInterface** table,
00121 JackGraphManager* manager,
00122 jack_time_t period_usecs,
00123 jack_time_t cur_cycle_begin,
00124 jack_time_t prev_cycle_end);
00125
00126 JackTimingMeasure* GetCurMeasure();
00127
00128 };
00129
00130 }
00131
00132 #endif