diff options
author | Bartosz Taudul <wolf@nereid.pl> | 2022-10-12 01:27:12 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf@nereid.pl> | 2022-10-12 01:27:12 +0300 |
commit | c041b962c07a10fe1576a1e45e01716e03ae61a7 (patch) | |
tree | 1a55a20b90b6a3997fd44b06aaa7dad7b6ae4199 /server | |
parent | ed455339b3591ae5dc8a490162d0fd0c11ab91e5 (diff) |
Construct fake callstack frames for code location data.
Diffstat (limited to 'server')
-rw-r--r-- | server/TracyWorker.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 8c8bc274..9a222b7a 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -1775,7 +1775,26 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) uint64_t packed; uint16_t lsz; f.Read2( packed, lsz ); - f.Skip( lsz * sizeof( uint64_t ) ); + uint32_t line; + const auto fidx = UnpackFileLine( packed, line ); + uint64_t ref = 0; + for( uint16_t j=0; j<lsz; j++ ) + { + uint64_t diff; + f.Read( diff ); + ref += diff; + auto frameId = PackPointer( ref ); + if( m_data.callstackFrameMap.find( frameId ) == m_data.callstackFrameMap.end() ) + { + auto cs = m_slab.AllocInit<CallstackFrameData>(); + cs->size = 1; + cs->data = m_slab.AllocInit<CallstackFrame>( 1 ); + cs->data->file = StringIdx( fidx ); + cs->data->line = line; + cs->data->symAddr = 0; + m_data.callstackFrameMap.emplace( frameId, cs ); + } + } } } |