From 9830fa297ec51662f98a4c7694bdab6b28e00db1 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 18 Mar 2018 02:05:33 +0100 Subject: [PATCH] Store per-source-location zone lists. --- server/TracyWorker.cpp | 22 ++++++++++++++++++++++ server/TracyWorker.hpp | 1 + 2 files changed, 23 insertions(+) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 6e8c1662..f29e36fd 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -108,6 +108,7 @@ Worker::Worker( FileRead& f ) f.Read( &sz, sizeof( sz ) ); m_data.sourceLocationExpand.reserve_and_use( sz ); f.Read( m_data.sourceLocationExpand.data(), sizeof( uint64_t ) * sz ); + const auto sle = sz; f.Read( &sz, sizeof( sz ) ); m_data.sourceLocationPayload.reserve( sz ); @@ -119,6 +120,16 @@ Worker::Worker( FileRead& f ) m_data.sourceLocationPayloadMap.emplace( srcloc, uint32_t( i ) ); } + m_data.sourceLocationZones.reserve( sle + sz ); + for( uint64_t i=1; i() ); + } + for( uint64_t i=0; i() ); + } + f.Read( &sz, sizeof( sz ) ); for( uint64_t i=0; i() ); m_sourceLocationShrink.emplace( srcloc, sz ); return sz; } @@ -662,6 +674,11 @@ ThreadData* Worker::NewThread( uint64_t thread ) void Worker::NewZone( ZoneEvent* zone, uint64_t thread ) { m_data.zonesCnt++; + + auto it = m_data.sourceLocationZones.find( zone->srcloc ); + assert( it != m_data.sourceLocationZones.end() ); + it->second.push_back( zone ); + auto td = NoticeThread( thread ); td->count++; if( td->stack.empty() ) @@ -926,6 +943,7 @@ void Worker::AddSourceLocationPayload( uint64_t ptr, char* data, size_t sz ) m_data.sourceLocationPayloadMap.emplace( slptr, idx ); m_pendingSourceLocationPayload.emplace( ptr, -int32_t( idx + 1 ) ); m_data.sourceLocationPayload.push_back( slptr ); + m_data.sourceLocationZones.emplace( -int32_t( idx + 1 ), Vector() ); } else { @@ -1578,6 +1596,10 @@ void Worker::ReadTimeline( FileRead& f, Vector& vec, uint64_t size ) vec.push_back_no_space_check( zone ); f.Read( zone, sizeof( ZoneEvent ) - sizeof( ZoneEvent::child ) ); + auto it = m_data.sourceLocationZones.find( zone->srcloc ); + assert( it != m_data.sourceLocationZones.end() ); + it->second.push_back( zone ); + ReadTimeline( f, zone->child ); } } diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 44dcfb0e..72ad355a 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -54,6 +54,7 @@ class Worker Vector sourceLocationPayload; flat_hash_map sourceLocationPayloadMap; Vector sourceLocationExpand; + flat_hash_map> sourceLocationZones; std::map lockMap; };