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