From eb7e8162ff51f1822c45178e8895c7726aa6b200 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Wed, 26 Feb 2020 00:55:43 +0100 Subject: [PATCH] Handle module names on server side. --- server/TracyEvent.hpp | 1 + server/TracyWorker.cpp | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/server/TracyEvent.hpp b/server/TracyEvent.hpp index 2268aae2..fa01a199 100644 --- a/server/TracyEvent.hpp +++ b/server/TracyEvent.hpp @@ -332,6 +332,7 @@ struct CallstackFrameData { short_ptr data; uint8_t size; + StringIdx imageName; }; enum { CallstackFrameDataSize = sizeof( CallstackFrameData ) }; diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 71ac3756..d6c138ab 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -1348,7 +1348,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) { CallstackFrameId id; auto frameData = m_slab.Alloc(); - f.Read2( id, frameData->size ); + f.Read3( id, frameData->size, frameData->imageName ); frameData->data = m_slab.Alloc( frameData->size ); f.Read( frameData->data, sizeof( CallstackFrame ) * frameData->size ); @@ -1363,7 +1363,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) for( uint64_t i=0; i(); + auto frameData = m_slab.AllocInit(); f.Read2( id, frameData->size ); frameData->data = m_slab.Alloc( frameData->size ); @@ -1384,7 +1384,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) { __StringIdxOld str; CallstackFrameId id; - auto frameData = m_slab.Alloc(); + auto frameData = m_slab.AllocInit(); f.Read2( id, frameData->size ); frameData->data = m_slab.AllocInit( frameData->size ); @@ -3133,7 +3133,7 @@ void Worker::AddCallstackAllocPayload( uint64_t ptr, const char* data, size_t _s { auto frame = m_slab.Alloc(); memcpy( frame, &cf, sizeof( CallstackFrame ) ); - auto frameData = m_slab.Alloc(); + auto frameData = m_slab.AllocInit(); frameData->data = frame; frameData->size = 1; id.idx = m_callstackAllocNextIdx++; @@ -4687,6 +4687,9 @@ void Worker::ProcessCallstackFrameSize( const QueueCallstackFrameSize& ev ) m_pendingCallstackFrames--; m_pendingCallstackSubframes = ev.size; + auto iit = m_pendingCustomStrings.find( ev.imageName ); + assert( iit != m_pendingCustomStrings.end() ); + // Frames may be duplicated due to recursion auto fmit = m_data.callstackFrameMap.find( PackPointer( ev.ptr ) ); if( fmit == m_data.callstackFrameMap.end() ) @@ -4694,9 +4697,12 @@ void Worker::ProcessCallstackFrameSize( const QueueCallstackFrameSize& ev ) m_callstackFrameStaging = m_slab.Alloc(); m_callstackFrameStaging->size = ev.size; m_callstackFrameStaging->data = m_slab.Alloc( ev.size ); + m_callstackFrameStaging->imageName = StringIdx( iit->second.idx ); m_callstackFrameStagingPtr = ev.ptr; } + + m_pendingCustomStrings.erase( iit ); } void Worker::ProcessCallstackFrame( const QueueCallstackFrame& ev ) @@ -5850,6 +5856,7 @@ void Worker::Write( FileWrite& f ) { f.Write( &frame.first, sizeof( CallstackFrameId ) ); f.Write( &frame.second->size, sizeof( frame.second->size ) ); + f.Write( &frame.second->imageName, sizeof( frame.second->imageName ) ); f.Write( frame.second->data, sizeof( CallstackFrame ) * frame.second->size ); }