From 082255f940d8a0ad33f08342301e420563f380d2 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 10 Oct 2021 15:54:21 +0200 Subject: [PATCH] Messages may now use serialized queue. --- client/TracyProfiler.cpp | 32 ++++++++++++++++++++++++++++++++ client/TracyProfiler.hpp | 18 ++++++++++-------- common/TracyQueue.hpp | 24 ++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 8 deletions(-) diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index b3a15dd9..0c22f4e8 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -2428,6 +2428,26 @@ Profiler::DequeueStatus Profiler::DequeueSerial() tracy_free_fast( (void*)ptr ); break; } + case QueueType::Message: + case QueueType::MessageCallstack: + { + ThreadCtxCheckSerial( messageFatThread ); + ptr = MemRead( &item->messageFat.text ); + uint16_t size = MemRead( &item->messageFat.size ); + SendSingleString( (const char*)ptr, size ); + tracy_free_fast( (void*)ptr ); + break; + } + case QueueType::MessageColor: + case QueueType::MessageColorCallstack: + { + ThreadCtxCheckSerial( messageColorFatThread ); + ptr = MemRead( &item->messageColorFat.text ); + uint16_t size = MemRead( &item->messageColorFat.size ); + SendSingleString( (const char*)ptr, size ); + tracy_free_fast( (void*)ptr ); + break; + } #endif default: assert( false ); @@ -2454,6 +2474,18 @@ Profiler::DequeueStatus Profiler::DequeueSerial() ThreadCtxCheckSerial( zoneValidationThread ); break; } + case QueueType::MessageLiteral: + case QueueType::MessageLiteralCallstack: + { + ThreadCtxCheckSerial( messageLiteralThread ); + break; + } + case QueueType::MessageLiteralColor: + case QueueType::MessageLiteralColorCallstack: + { + ThreadCtxCheckSerial( messageColorLiteralThread ); + break; + } default: break; } diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index a8d77ad5..26f146b3 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -318,13 +318,14 @@ public: tracy::GetProfiler().SendCallstack( callstack ); } - TracyLfqPrepare( callstack == 0 ? QueueType::Message : QueueType::MessageCallstack ); auto ptr = (char*)tracy_malloc( size ); memcpy( ptr, txt, size ); + + TracyQueuePrepare( callstack == 0 ? QueueType::Message : QueueType::MessageCallstack ); MemWrite( &item->messageFat.time, GetTime() ); MemWrite( &item->messageFat.text, (uint64_t)ptr ); MemWrite( &item->messageFat.size, (uint16_t)size ); - TracyLfqCommit; + TracyQueueCommit( messageFatThread ); } static tracy_force_inline void Message( const char* txt, int callstack ) @@ -337,10 +338,10 @@ public: tracy::GetProfiler().SendCallstack( callstack ); } - TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack ); + TracyQueuePrepare( callstack == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack ); MemWrite( &item->messageLiteral.time, GetTime() ); MemWrite( &item->messageLiteral.text, (uint64_t)txt ); - TracyLfqCommit; + TracyQueueCommit( messageLiteralThread ); } static tracy_force_inline void MessageColor( const char* txt, size_t size, uint32_t color, int callstack ) @@ -354,16 +355,17 @@ public: tracy::GetProfiler().SendCallstack( callstack ); } - TracyLfqPrepare( callstack == 0 ? QueueType::MessageColor : QueueType::MessageColorCallstack ); auto ptr = (char*)tracy_malloc( size ); memcpy( ptr, txt, size ); + + TracyQueuePrepare( callstack == 0 ? QueueType::MessageColor : QueueType::MessageColorCallstack ); MemWrite( &item->messageColorFat.time, GetTime() ); MemWrite( &item->messageColorFat.text, (uint64_t)ptr ); MemWrite( &item->messageColorFat.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColorFat.g, uint8_t( ( color >> 8 ) & 0xFF ) ); MemWrite( &item->messageColorFat.b, uint8_t( ( color >> 16 ) & 0xFF ) ); MemWrite( &item->messageColorFat.size, (uint16_t)size ); - TracyLfqCommit; + TracyQueueCommit( messageColorFatThread ); } static tracy_force_inline void MessageColor( const char* txt, uint32_t color, int callstack ) @@ -376,13 +378,13 @@ public: tracy::GetProfiler().SendCallstack( callstack ); } - TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack ); + TracyQueuePrepare( callstack == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack ); MemWrite( &item->messageColorLiteral.time, GetTime() ); MemWrite( &item->messageColorLiteral.text, (uint64_t)txt ); MemWrite( &item->messageColorLiteral.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColorLiteral.g, uint8_t( ( color >> 8 ) & 0xFF ) ); MemWrite( &item->messageColorLiteral.b, uint8_t( ( color >> 16 ) & 0xFF ) ); - TracyLfqCommit; + TracyQueueCommit( messageColorLiteralThread ); } static tracy_force_inline void MessageAppInfo( const char* txt, size_t size ) diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index 0150264c..06b62c15 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -317,23 +317,43 @@ struct QueueMessageLiteral : public QueueMessage uint64_t text; // ptr }; +struct QueueMessageLiteralThread : public QueueMessageLiteral +{ + uint32_t thread; +}; + struct QueueMessageColorLiteral : public QueueMessageColor { uint64_t text; // ptr }; +struct QueueMessageColorLiteralThread : public QueueMessageColorLiteral +{ + uint32_t thread; +}; + struct QueueMessageFat : public QueueMessage { uint64_t text; // ptr uint16_t size; }; +struct QueueMessageFatThread : public QueueMessageFat +{ + uint32_t thread; +}; + struct QueueMessageColorFat : public QueueMessageColor { uint64_t text; // ptr uint16_t size; }; +struct QueueMessageColorFatThread : public QueueMessageColorFat +{ + uint32_t thread; +}; + // Don't change order, only add new entries at the end, this is also used on trace dumps! enum class GpuContextType : uint8_t { @@ -589,9 +609,13 @@ struct QueueItem QueueMessage message; QueueMessageColor messageColor; QueueMessageLiteral messageLiteral; + QueueMessageLiteralThread messageLiteralThread; QueueMessageColorLiteral messageColorLiteral; + QueueMessageColorLiteralThread messageColorLiteralThread; QueueMessageFat messageFat; + QueueMessageFatThread messageFatThread; QueueMessageColorFat messageColorFat; + QueueMessageColorFatThread messageColorFatThread; QueueGpuNewContext gpuNewContext; QueueGpuZoneBegin gpuZoneBegin; QueueGpuZoneBeginLean gpuZoneBeginLean;