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 449c716f68Ss.makeev_local virtual void OnFibersCreated(uint32 fibersCount) override 459c716f68Ss.makeev_local { 469c716f68Ss.makeev_local MT_UNUSED(fibersCount); 479c716f68Ss.makeev_local } 489c716f68Ss.makeev_local 499c716f68Ss.makeev_local virtual void OnThreadsCreated(uint32 threadsCount) override 509c716f68Ss.makeev_local { 519c716f68Ss.makeev_local MT_UNUSED(threadsCount); 529c716f68Ss.makeev_local } 539c716f68Ss.makeev_local 54f7a9bfc3Ss.makeev_local virtual void OnThreadCreated(uint32 workerIndex) override 55f7a9bfc3Ss.makeev_local { 56f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 57f7a9bfc3Ss.makeev_local } 58f7a9bfc3Ss.makeev_local 59f7a9bfc3Ss.makeev_local virtual void OnThreadStarted(uint32 workerIndex) override 60f7a9bfc3Ss.makeev_local { 61f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 62f7a9bfc3Ss.makeev_local } 63f7a9bfc3Ss.makeev_local 64f7a9bfc3Ss.makeev_local virtual void OnThreadStoped(uint32 workerIndex) override 65f7a9bfc3Ss.makeev_local { 66f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 67f7a9bfc3Ss.makeev_local } 68f7a9bfc3Ss.makeev_local 69f7a9bfc3Ss.makeev_local virtual void OnThreadIdleStarted(uint32 workerIndex) override 70f7a9bfc3Ss.makeev_local { 71f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 72f7a9bfc3Ss.makeev_local PushPerfMarker("ThreadIdle", MT::Color::Red); 73f7a9bfc3Ss.makeev_local } 74f7a9bfc3Ss.makeev_local 75f7a9bfc3Ss.makeev_local virtual void OnThreadIdleFinished(uint32 workerIndex) override 76f7a9bfc3Ss.makeev_local { 77f7a9bfc3Ss.makeev_local MT_UNUSED(workerIndex); 78f7a9bfc3Ss.makeev_local PopPerfMarker("ThreadIdle"); 79f7a9bfc3Ss.makeev_local } 80f7a9bfc3Ss.makeev_local 81f7a9bfc3Ss.makeev_local virtual void OnThreadWaitStarted() override 82f7a9bfc3Ss.makeev_local { 83f7a9bfc3Ss.makeev_local PushPerfMarker("ThreadWait", MT::Color::Red); 84f7a9bfc3Ss.makeev_local } 85f7a9bfc3Ss.makeev_local 86f7a9bfc3Ss.makeev_local virtual void OnThreadWaitFinished() override 87f7a9bfc3Ss.makeev_local { 88f7a9bfc3Ss.makeev_local PopPerfMarker("ThreadWait"); 89f7a9bfc3Ss.makeev_local } 90f7a9bfc3Ss.makeev_local 91*47ecee31Ss.makeev_local virtual void OnTemporaryWorkerThreadJoin() override 92f7a9bfc3Ss.makeev_local { 93*47ecee31Ss.makeev_local } 94*47ecee31Ss.makeev_local 95*47ecee31Ss.makeev_local virtual void OnTemporaryWorkerThreadLeave() override 96*47ecee31Ss.makeev_local { 97*47ecee31Ss.makeev_local } 98*47ecee31Ss.makeev_local 99*47ecee31Ss.makeev_local virtual void OnTaskExecuteStateChanged(MT::Color::Type debugColor, const mt_char* debugID, MT::TaskExecuteState::Type type, int32 fiberIndex) override 100*47ecee31Ss.makeev_local { 101*47ecee31Ss.makeev_local MT_UNUSED(fiberIndex); 102*47ecee31Ss.makeev_local 103f7a9bfc3Ss.makeev_local switch(type) 104f7a9bfc3Ss.makeev_local { 105f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::START: 106f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::RESUME: 107f7a9bfc3Ss.makeev_local PushPerfMarker(debugID, debugColor); 108f7a9bfc3Ss.makeev_local break; 109f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::STOP: 110f7a9bfc3Ss.makeev_local case MT::TaskExecuteState::SUSPEND: 111f7a9bfc3Ss.makeev_local PopPerfMarker(debugID); 112f7a9bfc3Ss.makeev_local break; 113f7a9bfc3Ss.makeev_local } 114f7a9bfc3Ss.makeev_local } 115f7a9bfc3Ss.makeev_local }; 116f7a9bfc3Ss.makeev_local 117f7a9bfc3Ss.makeev_local 118f7a9bfc3Ss.makeev_local #endif 119f7a9bfc3Ss.makeev_local 120f7a9bfc3Ss.makeev_local 121f7a9bfc3Ss.makeev_local MT::IProfilerEventListener* GetProfiler() 122f7a9bfc3Ss.makeev_local { 123f7a9bfc3Ss.makeev_local #ifdef MT_INSTRUMENTED_BUILD 124f7a9bfc3Ss.makeev_local static Microprofile profile; 125f7a9bfc3Ss.makeev_local return &profile; 126f7a9bfc3Ss.makeev_local #else 127f7a9bfc3Ss.makeev_local return nullptr; 128f7a9bfc3Ss.makeev_local #endif 129f7a9bfc3Ss.makeev_local 130f7a9bfc3Ss.makeev_local 131f7a9bfc3Ss.makeev_local } 132