1*f7a9bfc3Ss.makeev_local #include <MTScheduler.h> 2*f7a9bfc3Ss.makeev_local #include "Profiler.h" 3*f7a9bfc3Ss.makeev_local 4*f7a9bfc3Ss.makeev_local 5*f7a9bfc3Ss.makeev_local #ifdef MT_INSTRUMENTED_BUILD 6*f7a9bfc3Ss.makeev_local 7*f7a9bfc3Ss.makeev_local 8*f7a9bfc3Ss.makeev_local void PushPerfMarker(const char* name, MT::Color::Type color) 9*f7a9bfc3Ss.makeev_local { 10*f7a9bfc3Ss.makeev_local MT_UNUSED(name); 11*f7a9bfc3Ss.makeev_local MT_UNUSED(color); 12*f7a9bfc3Ss.makeev_local } 13*f7a9bfc3Ss.makeev_local 14*f7a9bfc3Ss.makeev_local void PopPerfMarker(const char* name) 15*f7a9bfc3Ss.makeev_local { 16*f7a9bfc3Ss.makeev_local MT_UNUSED(name); 17*f7a9bfc3Ss.makeev_local } 18*f7a9bfc3Ss.makeev_local 19*f7a9bfc3Ss.makeev_local 20*f7a9bfc3Ss.makeev_local 21*f7a9bfc3Ss.makeev_local void PushPerfEvent(const char* name) 22*f7a9bfc3Ss.makeev_local { 23*f7a9bfc3Ss.makeev_local PushPerfMarker(name, MT::Color::Red); 24*f7a9bfc3Ss.makeev_local } 25*f7a9bfc3Ss.makeev_local 26*f7a9bfc3Ss.makeev_local void PopPerfEvent(const char* name) 27*f7a9bfc3Ss.makeev_local { 28*f7a9bfc3Ss.makeev_local PopPerfMarker(name); 29*f7a9bfc3Ss.makeev_local } 30*f7a9bfc3Ss.makeev_local 31*f7a9bfc3Ss.makeev_local 32*f7a9bfc3Ss.makeev_local class Microprofile : public MT::IProfilerEventListener 33*f7a9bfc3Ss.makeev_local { 34*f7a9bfc3Ss.makeev_local public: 35*f7a9bfc3Ss.makeev_local 36*f7a9bfc3Ss.makeev_local Microprofile() 37*f7a9bfc3Ss.makeev_local { 38*f7a9bfc3Ss.makeev_local } 39*f7a9bfc3Ss.makeev_local 40*f7a9bfc3Ss.makeev_local ~Microprofile() 41*f7a9bfc3Ss.makeev_local { 42*f7a9bfc3Ss.makeev_local } 43*f7a9bfc3Ss.makeev_local 44*f7a9bfc3Ss.makeev_local virtual void OnThreadCreated(uint32 workerIndex) override 45*f7a9bfc3Ss.makeev_local { 46*f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 47*f7a9bfc3Ss.makeev_local } 48*f7a9bfc3Ss.makeev_local 49*f7a9bfc3Ss.makeev_local virtual void OnThreadStarted(uint32 workerIndex) override 50*f7a9bfc3Ss.makeev_local { 51*f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 52*f7a9bfc3Ss.makeev_local } 53*f7a9bfc3Ss.makeev_local 54*f7a9bfc3Ss.makeev_local virtual void OnThreadStoped(uint32 workerIndex) override 55*f7a9bfc3Ss.makeev_local { 56*f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 57*f7a9bfc3Ss.makeev_local } 58*f7a9bfc3Ss.makeev_local 59*f7a9bfc3Ss.makeev_local virtual void OnThreadIdleStarted(uint32 workerIndex) override 60*f7a9bfc3Ss.makeev_local { 61*f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 62*f7a9bfc3Ss.makeev_local PushPerfMarker("ThreadIdle", MT::Color::Red); 63*f7a9bfc3Ss.makeev_local } 64*f7a9bfc3Ss.makeev_local 65*f7a9bfc3Ss.makeev_local virtual void OnThreadIdleFinished(uint32 workerIndex) override 66*f7a9bfc3Ss.makeev_local { 67*f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 68*f7a9bfc3Ss.makeev_local PopPerfMarker("ThreadIdle"); 69*f7a9bfc3Ss.makeev_local } 70*f7a9bfc3Ss.makeev_local 71*f7a9bfc3Ss.makeev_local virtual void OnThreadWaitStarted() override 72*f7a9bfc3Ss.makeev_local { 73*f7a9bfc3Ss.makeev_local PushPerfMarker("ThreadWait", MT::Color::Red); 74*f7a9bfc3Ss.makeev_local } 75*f7a9bfc3Ss.makeev_local 76*f7a9bfc3Ss.makeev_local virtual void OnThreadWaitFinished() override 77*f7a9bfc3Ss.makeev_local { 78*f7a9bfc3Ss.makeev_local PopPerfMarker("ThreadWait"); 79*f7a9bfc3Ss.makeev_local } 80*f7a9bfc3Ss.makeev_local 81*f7a9bfc3Ss.makeev_local virtual void NotifyTaskExecuteStateChanged(MT::Color::Type debugColor, const mt_char* debugID, MT::TaskExecuteState::Type type) override 82*f7a9bfc3Ss.makeev_local { 83*f7a9bfc3Ss.makeev_local switch(type) 84*f7a9bfc3Ss.makeev_local { 85*f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::START: 86*f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::RESUME: 87*f7a9bfc3Ss.makeev_local PushPerfMarker(debugID, debugColor); 88*f7a9bfc3Ss.makeev_local break; 89*f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::STOP: 90*f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::SUSPEND: 91*f7a9bfc3Ss.makeev_local PopPerfMarker(debugID); 92*f7a9bfc3Ss.makeev_local break; 93*f7a9bfc3Ss.makeev_local } 94*f7a9bfc3Ss.makeev_local } 95*f7a9bfc3Ss.makeev_local }; 96*f7a9bfc3Ss.makeev_local 97*f7a9bfc3Ss.makeev_local 98*f7a9bfc3Ss.makeev_local #endif 99*f7a9bfc3Ss.makeev_local 100*f7a9bfc3Ss.makeev_local 101*f7a9bfc3Ss.makeev_local MT::IProfilerEventListener* GetProfiler() 102*f7a9bfc3Ss.makeev_local { 103*f7a9bfc3Ss.makeev_local #ifdef MT_INSTRUMENTED_BUILD 104*f7a9bfc3Ss.makeev_local static Microprofile profile; 105*f7a9bfc3Ss.makeev_local return &profile; 106*f7a9bfc3Ss.makeev_local #else 107*f7a9bfc3Ss.makeev_local return nullptr; 108*f7a9bfc3Ss.makeev_local #endif 109*f7a9bfc3Ss.makeev_local 110*f7a9bfc3Ss.makeev_local 111*f7a9bfc3Ss.makeev_local } 112