00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "JackEngineTiming.h"
00022 #include "JackGraphManager.h"
00023 #include "JackClientControl.h"
00024 #include "JackClientInterface.h"
00025 #include "JackTime.h"
00026
00027 namespace Jack
00028 {
00029
00030 void JackEngineTiming::GetTimeMeasure(JackClientInterface** table,
00031 JackGraphManager* manager,
00032 jack_time_t cur_cycle_begin,
00033 jack_time_t prev_cycle_end)
00034 {
00035 int pos = (++fAudioCycle) % TIME_POINTS;
00036
00037 fPrevCycleTime = fCurCycleTime;
00038 fCurCycleTime = cur_cycle_begin;
00039
00040 if (fPrevCycleTime > 0) {
00041 fMeasure[pos].fEngineTime = fPrevCycleTime;
00042 fMeasure[pos].fAudioCycle = fAudioCycle;
00043
00044 for (int i = 0; i < CLIENT_NUM; i++) {
00045 JackClientInterface* client = table[i];
00046 JackClientTiming* timing = manager->GetClientTiming(i);
00047 if (client && client->GetClientControl()->fActive) {
00048 fMeasure[pos].fClientTable[i].fRefNum = i;
00049 fMeasure[pos].fClientTable[i].fSignaledAt = timing->fSignaledAt;
00050 fMeasure[pos].fClientTable[i].fAwakeAt = timing->fAwakeAt;
00051 fMeasure[pos].fClientTable[i].fFinishedAt = timing->fFinishedAt;
00052 fMeasure[pos].fClientTable[i].fStatus = timing->fStatus;
00053 }
00054 }
00055 }
00056 }
00057
00058 void JackEngineTiming::ClearTimeMeasures()
00059 {
00060 for (int i = 0; i < TIME_POINTS; i++) {
00061 for (int j = 0; j < CLIENT_NUM; j++) {
00062 fMeasure[i].fClientTable[j].fRefNum = 0;
00063 fMeasure[i].fClientTable[j].fSignaledAt = 0;
00064 fMeasure[i].fClientTable[j].fAwakeAt = 0;
00065 fMeasure[i].fClientTable[j].fFinishedAt = 0;
00066 }
00067 }
00068 fPrevCycleTime = fCurCycleTime = 0;
00069 }
00070
00071 }