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

Make it possible to store multiple frames at single frame address.

This commit is contained in:
Bartosz Taudul
2019-01-20 19:11:48 +01:00
parent b9dc9f043c
commit ddad475c19
10 changed files with 216 additions and 100 deletions
+32 -16
View File
@@ -1487,22 +1487,35 @@ void Profiler::SendCallstackPayload( uint64_t _ptr )
void Profiler::SendCallstackFrame( uint64_t ptr )
{
#ifdef TRACY_HAS_CALLSTACK
auto frame = DecodeCallstackPtr( ptr );
const auto frameData = DecodeCallstackPtr( ptr );
SendString( uint64_t( frame.name ), frame.name, QueueType::CustomStringData );
SendString( uint64_t( frame.file ), frame.file, QueueType::CustomStringData );
{
QueueItem item;
MemWrite( &item.hdr.type, QueueType::CallstackFrameSize );
MemWrite( &item.callstackFrameSize.ptr, ptr );
MemWrite( &item.callstackFrameSize.size, frameData.size );
QueueItem item;
MemWrite( &item.hdr.type, QueueType::CallstackFrame );
MemWrite( &item.callstackFrame.ptr, ptr );
MemWrite( &item.callstackFrame.name, (uint64_t)frame.name );
MemWrite( &item.callstackFrame.file, (uint64_t)frame.file );
MemWrite( &item.callstackFrame.line, frame.line );
AppendData( &item, QueueDataSize[(int)QueueType::CallstackFrameSize] );
}
AppendData( &item, QueueDataSize[(int)QueueType::CallstackFrame] );
for( uint8_t i=0; i<frameData.size; i++ )
{
const auto& frame = frameData.data[i];
tracy_free( (void*)frame.name );
tracy_free( (void*)frame.file );
SendString( uint64_t( frame.name ), frame.name, QueueType::CustomStringData );
SendString( uint64_t( frame.file ), frame.file, QueueType::CustomStringData );
QueueItem item;
MemWrite( &item.hdr.type, QueueType::CallstackFrame );
MemWrite( &item.callstackFrame.name, (uint64_t)frame.name );
MemWrite( &item.callstackFrame.file, (uint64_t)frame.file );
MemWrite( &item.callstackFrame.line, frame.line );
AppendData( &item, QueueDataSize[(int)QueueType::CallstackFrame] );
tracy_free( (void*)frame.name );
tracy_free( (void*)frame.file );
}
#endif
}
@@ -1720,10 +1733,13 @@ void Profiler::SendCallstack( int depth, uint64_t thread, const char* skipBefore
uintptr_t i;
for( i=0; i<sz; i++ )
{
auto frame = DecodeCallstackPtr( uint64_t( data[i] ) );
const bool found = strcmp( frame.name, skipBefore ) == 0;
tracy_free( (void*)frame.name );
tracy_free( (void*)frame.file );
auto frameData = DecodeCallstackPtr( uint64_t( data[i] ) );
const bool found = strcmp( frameData.data[0].name, skipBefore ) == 0;
for( uint8_t j=0; j<frameData.size; j++ )
{
tracy_free( (void*)frameData.data[j].name );
tracy_free( (void*)frameData.data[j].file );
}
if( found )
{
i++;