Send native callstack along with allocated callstack.

This commit is contained in:
Bartosz Taudul 2019-03-05 02:00:31 +01:00
parent e13286936c
commit d229c1bc1b
4 changed files with 23 additions and 6 deletions

View File

@ -182,8 +182,9 @@ static inline void SendLuaCallstack( lua_State* L, uint32_t depth )
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<tracy::moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<tracy::moodycamel::CanAlloc>( magic );
MemWrite( &item->hdr.type, QueueType::CallstackAlloc ); MemWrite( &item->hdr.type, QueueType::CallstackAlloc );
MemWrite( &item->callstack.ptr, (uint64_t)ptr ); MemWrite( &item->callstackAlloc.ptr, (uint64_t)ptr );
MemWrite( &item->callstack.thread, GetThreadHandle() ); MemWrite( &item->callstackAlloc.nativePtr, (uint64_t)Callstack( depth ) );
MemWrite( &item->callstackAlloc.thread, GetThreadHandle() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }

View File

@ -1325,10 +1325,15 @@ static void FreeAssociatedMemory( const QueueItem& item )
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::Callstack: case QueueType::Callstack:
case QueueType::CallstackAlloc:
ptr = MemRead<uint64_t>( &item.callstack.ptr ); ptr = MemRead<uint64_t>( &item.callstack.ptr );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::CallstackAlloc:
ptr = MemRead<uint64_t>( &item.callstackAlloc.ptr );
tracy_free( (void*)ptr );
ptr = MemRead<uint64_t>( &item.callstackAlloc.nativePtr );
tracy_free( (void*)ptr );
break;
default: default:
assert( false ); assert( false );
break; break;
@ -1404,9 +1409,12 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::CallstackAlloc: case QueueType::CallstackAlloc:
ptr = MemRead<uint64_t>( &item->callstack.ptr ); ptr = MemRead<uint64_t>( &item->callstackAlloc.ptr );
SendCallstackAlloc( ptr ); SendCallstackAlloc( ptr );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
ptr = MemRead<uint64_t>( &item->callstackAlloc.nativePtr );
SendCallstackPayload( ptr );
tracy_free( (void*)ptr );
break; break;
default: default:
assert( false ); assert( false );

View File

@ -9,7 +9,7 @@
namespace tracy namespace tracy
{ {
enum : uint32_t { ProtocolVersion = 4 }; enum : uint32_t { ProtocolVersion = 5 };
using lz4sz_t = uint32_t; using lz4sz_t = uint32_t;

View File

@ -249,6 +249,13 @@ struct QueueCallstack
uint64_t thread; uint64_t thread;
}; };
struct QueueCallstackAlloc
{
uint64_t ptr;
uint64_t nativePtr;
uint64_t thread;
};
struct QueueCallstackFrameSize struct QueueCallstackFrameSize
{ {
uint64_t ptr; uint64_t ptr;
@ -312,6 +319,7 @@ struct QueueItem
QueueMemFree memFree; QueueMemFree memFree;
QueueCallstackMemory callstackMemory; QueueCallstackMemory callstackMemory;
QueueCallstack callstack; QueueCallstack callstack;
QueueCallstackAlloc callstackAlloc;
QueueCallstackFrameSize callstackFrameSize; QueueCallstackFrameSize callstackFrameSize;
QueueCallstackFrame callstackFrame; QueueCallstackFrame callstackFrame;
QueueCrashReport crashReport; QueueCrashReport crashReport;
@ -331,7 +339,7 @@ static const size_t QueueDataSize[] = {
sizeof( QueueHeader ) + sizeof( QueueZoneBegin ), // allocated source location, callstack sizeof( QueueHeader ) + sizeof( QueueZoneBegin ), // allocated source location, callstack
sizeof( QueueHeader ) + sizeof( QueueCallstackMemory ), sizeof( QueueHeader ) + sizeof( QueueCallstackMemory ),
sizeof( QueueHeader ) + sizeof( QueueCallstack ), sizeof( QueueHeader ) + sizeof( QueueCallstack ),
sizeof( QueueHeader ) + sizeof( QueueCallstack ), // callstack alloc sizeof( QueueHeader ) + sizeof( QueueCallstackAlloc ),
// above items must be first // above items must be first
sizeof( QueueHeader ), // terminate sizeof( QueueHeader ), // terminate
sizeof( QueueHeader ), // keep alive sizeof( QueueHeader ), // keep alive