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 } POST_PACKED_STRUCTURE;
00057
00062 struct JackTimingClientInterval
00063 {
00064 int fRefNum;
00065 char fName[JACK_CLIENT_NAME_SIZE + 1];
00066 int fBeginInterval;
00067 int fEndInterval;
00068
00069 JackTimingClientInterval()
00070 :fRefNum(-1),
00071 fBeginInterval(-1),
00072 fEndInterval(-1)
00073 {}
00074
00075 } POST_PACKED_STRUCTURE;
00076
00081 struct JackTimingMeasure
00082 {
00083 unsigned int fAudioCycle;
00084 jack_time_t fPeriodUsecs;
00085 jack_time_t fCurCycleBegin;
00086 jack_time_t fPrevCycleEnd;
00087 JackTimingMeasureClient fClientTable[CLIENT_NUM];
00088
00089 JackTimingMeasure()
00090 :fAudioCycle(0),
00091 fPeriodUsecs(0),
00092 fCurCycleBegin(0),
00093 fPrevCycleEnd(0)
00094 {}
00095
00096 } POST_PACKED_STRUCTURE;
00097
00102 class JackClientInterface;
00103 class JackGraphManager;
00104
00105 class SERVER_EXPORT JackEngineProfiling
00106 {
00107
00108 private:
00109
00110 JackTimingMeasure fProfileTable[TIME_POINTS];
00111 JackTimingClientInterval fIntervalTable[MEASURED_CLIENTS];
00112
00113 unsigned int fAudioCycle;
00114 unsigned int fMeasuredClient;
00115
00116 bool CheckClient(const char* name, int cur_point);
00117
00118 public:
00119
00120 JackEngineProfiling();
00121 ~JackEngineProfiling();
00122
00123 void Profile(JackClientInterface** table,
00124 JackGraphManager* manager,
00125 jack_time_t period_usecs,
00126 jack_time_t cur_cycle_begin,
00127 jack_time_t prev_cycle_end);
00128
00129 JackTimingMeasure* GetCurMeasure();
00130
00131 } POST_PACKED_STRUCTURE;
00132
00133 }
00134
00135 #endif