1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Make sure source file data is properly tracked.

This commit is contained in:
Bartosz Taudul
2022-10-13 19:00:22 +02:00
parent fc85e46f31
commit b88ef29792
6 changed files with 44 additions and 21 deletions
+11 -6
View File
@@ -2496,7 +2496,8 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
{
auto ptr = (const char*)MemRead<uint64_t>( &item->sourceCodeMetadata.ptr );
auto size = MemRead<uint32_t>( &item->sourceCodeMetadata.size );
SendLongString( (uint64_t)ptr, ptr, size, QueueType::SourceCode );
auto id = MemRead<uint32_t>( &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;
}
+3 -2
View File
@@ -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();
+1 -1
View File
@@ -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;
+8 -1
View File
@@ -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