From b88ef2979256488aca7f79af9c94d2b744111365 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 13 Oct 2022 19:00:22 +0200 Subject: Make sure source file data is properly tracked. --- public/client/TracyProfiler.cpp | 17 +++++++++++------ public/client/TracyProfiler.hpp | 5 +++-- public/common/TracyProtocol.hpp | 2 +- public/common/TracyQueue.hpp | 9 ++++++++- 4 files changed, 23 insertions(+), 10 deletions(-) (limited to 'public') diff --git a/public/client/TracyProfiler.cpp b/public/client/TracyProfiler.cpp index a381f65b..ea168e4f 100644 --- a/public/client/TracyProfiler.cpp +++ b/public/client/TracyProfiler.cpp @@ -2496,7 +2496,8 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) { auto ptr = (const char*)MemRead( &item->sourceCodeMetadata.ptr ); auto size = MemRead( &item->sourceCodeMetadata.size ); - SendLongString( (uint64_t)ptr, ptr, size, QueueType::SourceCode ); + auto id = MemRead( &item->sourceCodeMetadata.id ); + SendLongString( (uint64_t)id, ptr, size, QueueType::SourceCode ); tracy_free_fast( (void*)ptr ); ++item; continue; @@ -3167,11 +3168,11 @@ void Profiler::QueueKernelCode( uint64_t symbol, uint32_t size ) #endif } -void Profiler::QueueSourceCodeQuery() +void Profiler::QueueSourceCodeQuery( uint32_t id ) { assert( m_exectime != 0 ); assert( m_queryData ); - m_symbolQueue.emplace( SymbolQueueItem { SymbolQueueItemType::SourceCode, uint64_t( m_queryData ), uint64_t( m_queryImage ) } ); + m_symbolQueue.emplace( SymbolQueueItem { SymbolQueueItemType::SourceCode, uint64_t( m_queryData ), uint64_t( m_queryImage ), id } ); m_queryData = nullptr; m_queryImage = nullptr; } @@ -3264,7 +3265,7 @@ void Profiler::HandleSymbolQueueItem( const SymbolQueueItem& si ) break; } case SymbolQueueItemType::SourceCode: - HandleSourceCodeQuery( (char*)si.ptr, (char*)si.extra ); + HandleSourceCodeQuery( (char*)si.ptr, (char*)si.extra, si.id ); break; default: assert( false ); @@ -3382,7 +3383,7 @@ bool Profiler::HandleServerQuery() break; #endif case ServerQuerySourceCode: - QueueSourceCodeQuery(); + QueueSourceCodeQuery( uint32_t( ptr ) ); break; case ServerQueryDataTransfer: if( m_queryData ) @@ -3808,7 +3809,7 @@ void Profiler::HandleSymbolCodeQuery( uint64_t symbol, uint32_t size ) } } -void Profiler::HandleSourceCodeQuery( char* data, char* image ) +void Profiler::HandleSourceCodeQuery( char* data, char* image, uint32_t id ) { bool ok = false; struct stat st; @@ -3827,6 +3828,7 @@ void Profiler::HandleSourceCodeQuery( char* data, char* image ) TracyLfqPrepare( QueueType::SourceCodeMetadata ); MemWrite( &item->sourceCodeMetadata.ptr, (uint64_t)ptr ); MemWrite( &item->sourceCodeMetadata.size, (uint32_t)rd ); + MemWrite( &item->sourceCodeMetadata.id, id ); TracyLfqCommit; ok = true; } @@ -3857,6 +3859,7 @@ void Profiler::HandleSourceCodeQuery( char* data, char* image ) TracyLfqPrepare( QueueType::SourceCodeMetadata ); MemWrite( &item->sourceCodeMetadata.ptr, (uint64_t)ptr ); MemWrite( &item->sourceCodeMetadata.size, (uint32_t)rd ); + MemWrite( &item->sourceCodeMetadata.id, id ); TracyLfqCommit; ok = true; } @@ -3882,6 +3885,7 @@ void Profiler::HandleSourceCodeQuery( char* data, char* image ) TracyLfqPrepare( QueueType::SourceCodeMetadata ); MemWrite( &item->sourceCodeMetadata.ptr, (uint64_t)ptr ); MemWrite( &item->sourceCodeMetadata.size, (uint32_t)sz ); + MemWrite( &item->sourceCodeMetadata.id, id ); TracyLfqCommit; ok = true; } @@ -3891,6 +3895,7 @@ void Profiler::HandleSourceCodeQuery( char* data, char* image ) if( !ok ) { TracyLfqPrepare( QueueType::AckSourceCodeNotAvailable ); + MemWrite( &item->sourceCodeNotAvailable, id ); TracyLfqCommit; } diff --git a/public/client/TracyProfiler.hpp b/public/client/TracyProfiler.hpp index c4f71275..23603535 100644 --- a/public/client/TracyProfiler.hpp +++ b/public/client/TracyProfiler.hpp @@ -177,6 +177,7 @@ class Profiler SymbolQueueItemType type; uint64_t ptr; uint64_t extra; + uint32_t id; }; public: @@ -808,13 +809,13 @@ private: void QueueSymbolQuery( uint64_t symbol ); void QueueExternalName( uint64_t ptr ); void QueueKernelCode( uint64_t symbol, uint32_t size ); - void QueueSourceCodeQuery(); + void QueueSourceCodeQuery( uint32_t id ); bool HandleServerQuery(); void HandleDisconnect(); void HandleParameter( uint64_t payload ); void HandleSymbolCodeQuery( uint64_t symbol, uint32_t size ); - void HandleSourceCodeQuery( char* data, char* image ); + void HandleSourceCodeQuery( char* data, char* image, uint32_t id ); void AckServerQuery(); void AckSymbolCodeNotAvailable(); diff --git a/public/common/TracyProtocol.hpp b/public/common/TracyProtocol.hpp index 207b8786..d73840b2 100644 --- a/public/common/TracyProtocol.hpp +++ b/public/common/TracyProtocol.hpp @@ -9,7 +9,7 @@ namespace tracy constexpr unsigned Lz4CompressBound( unsigned isize ) { return isize + ( isize / 255 ) + 16; } -enum : uint32_t { ProtocolVersion = 62 }; +enum : uint32_t { ProtocolVersion = 63 }; enum : uint16_t { BroadcastVersion = 3 }; using lz4sz_t = uint32_t; diff --git a/public/common/TracyQueue.hpp b/public/common/TracyQueue.hpp index 7c5ae4d9..431fa484 100644 --- a/public/common/TracyQueue.hpp +++ b/public/common/TracyQueue.hpp @@ -615,6 +615,11 @@ struct QueueParamSetup int32_t val; }; +struct QueueSourceCodeNotAvailable +{ + uint32_t id; +}; + struct QueueCpuTopology { uint32_t package; @@ -640,6 +645,7 @@ struct QueueSourceCodeMetadata { uint64_t ptr; uint32_t size; + uint32_t id; }; struct QueueHeader @@ -733,6 +739,7 @@ struct QueueItem QueueExternalNameMetadata externalNameMetadata; QueueSymbolCodeMetadata symbolCodeMetadata; QueueSourceCodeMetadata sourceCodeMetadata; + QueueSourceCodeNotAvailable sourceCodeNotAvailable; QueueFiberEnter fiberEnter; QueueFiberLeave fiberLeave; }; @@ -835,7 +842,7 @@ static constexpr size_t QueueDataSize[] = { sizeof( QueueHeader ) + sizeof( QueuePlotConfig ), sizeof( QueueHeader ) + sizeof( QueueParamSetup ), sizeof( QueueHeader ), // server query acknowledgement - sizeof( QueueHeader ), // source code not available + sizeof( QueueHeader ) + sizeof( QueueSourceCodeNotAvailable ), sizeof( QueueHeader ), // symbol code not available sizeof( QueueHeader ) + sizeof( QueueCpuTopology ), sizeof( QueueHeader ), // single string data -- cgit v1.2.3