diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 5b5a2be4..4fde2a61 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -419,7 +419,22 @@ Profiler::DequeueStatus Profiler::DequeueSerial() auto end = item + sz; while( item != end ) { + uint64_t ptr; const auto idx = MemRead( &item->hdr.idx ); + if( idx < (int)QueueType::Terminate ) + { + switch( (QueueType)idx ) + { + case QueueType::CallstackMemory: + ptr = MemRead( &item->callstackMemory.ptr ); + SendCallstackPayload( ptr ); + tracy_free( (void*)ptr ); + break; + default: + assert( false ); + break; + } + } if( !AppendData( item, QueueDataSize[idx] ) ) return ConnectionLost; item++; } diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index f81f92bb..84a9fe54 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -11,6 +11,7 @@ enum class QueueType : uint8_t ZoneText, Message, ZoneBeginAllocSrcLoc, + CallstackMemory, Terminate, ZoneBegin, ZoneEnd, @@ -35,7 +36,6 @@ enum class QueueType : uint8_t MemFree, MemAllocCallstack, MemFreeCallstack, - CallstackMemory, StringData, ThreadName, CustomStringData, @@ -261,6 +261,7 @@ static const size_t QueueDataSize[] = { sizeof( QueueHeader ) + sizeof( QueueZoneText ), sizeof( QueueHeader ) + sizeof( QueueMessage ), sizeof( QueueHeader ) + sizeof( QueueZoneBegin ), // allocated source location + sizeof( QueueHeader ) + sizeof( QueueCallstackMemory ), // above items must be first sizeof( QueueHeader ), // terminate sizeof( QueueHeader ) + sizeof( QueueZoneBegin ), @@ -286,7 +287,6 @@ static const size_t QueueDataSize[] = { sizeof( QueueHeader ) + sizeof( QueueMemFree ), sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // callstack sizeof( QueueHeader ) + sizeof( QueueMemFree ), // callstack - sizeof( QueueHeader ) + sizeof( QueueCallstackMemory ), // keep all QueueStringTransfer below sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // string data sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // thread name