diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index b24436cb..b782b75b 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -38,7 +38,7 @@ Worker::Worker( const char* addr ) SetThreadName( m_thread, "Tracy Worker" ); } -Worker::Worker( FileRead& f ) +Worker::Worker( FileRead& f, EventType::Type eventMask ) : m_connected( false ) , m_hasData( true ) , m_shutdown( false ) @@ -136,57 +136,82 @@ Worker::Worker( FileRead& f ) #endif f.Read( &sz, sizeof( sz ) ); - for( uint64_t i=0; i(); - f.Read( lev, sizeof( LockEvent ) ); - lockmap.timeline.push_back_no_space_check( lev ); + uint64_t t; + f.Read( &t, sizeof( t ) ); + lockmap.threadMap.emplace( t, lockmap.threadList.size() ); + lockmap.threadList.emplace_back( t ); } - } - else - { - for( uint64_t i=0; i(); - f.Read( lev, sizeof( LockEventShared ) ); - lockmap.timeline.push_back_no_space_check( lev ); + for( uint64_t i=0; i(); + f.Read( lev, sizeof( LockEvent ) ); + lockmap.timeline.push_back_no_space_check( lev ); + } } + else + { + for( uint64_t i=0; i(); + f.Read( lev, sizeof( LockEventShared ) ); + lockmap.timeline.push_back_no_space_check( lev ); + } + } + m_data.lockMap.emplace( id, std::move( lockmap ) ); + } + } + else + { + for( uint64_t i=0; i> msgMap; f.Read( &sz, sizeof( sz ) ); - m_data.messages.reserve( sz ); - for( uint64_t i=0; i(); - f.Read( msgdata, sizeof( *msgdata ) ); - m_data.messages.push_back_no_space_check( msgdata ); - msgMap.emplace( ptr, msgdata ); + m_data.messages.reserve( sz ); + for( uint64_t i=0; i(); + f.Read( msgdata, sizeof( *msgdata ) ); + m_data.messages.push_back_no_space_check( msgdata ); + msgMap.emplace( ptr, msgdata ); + } + } + else + { + f.Skip( sz * ( sizeof( uint64_t ) + sizeof( MessageData ) ) ); } f.Read( &sz, sizeof( sz ) ); @@ -199,12 +224,19 @@ Worker::Worker( FileRead& f ) ReadTimeline( f, td->timeline, CompressThread( td->id ) ); uint64_t msz; f.Read( &msz, sizeof( msz ) ); - td->messages.reserve( msz ); - for( uint64_t j=0; jmessages.push_back_no_space_check( msgMap[ptr] ); + td->messages.reserve( msz ); + for( uint64_t j=0; jmessages.push_back_no_space_check( msgMap[ptr] ); + } + } + else + { + f.Skip( msz * sizeof( uint64_t ) ); } m_data.threads.push_back_no_space_check( td ); } @@ -230,48 +262,75 @@ Worker::Worker( FileRead& f ) } f.Read( &sz, sizeof( sz ) ); - m_data.plots.reserve( sz ); - for( uint64_t i=0; i(); - f.Read( &pd->name, sizeof( pd->name ) ); - f.Read( &pd->min, sizeof( pd->min ) ); - f.Read( &pd->max, sizeof( pd->max ) ); - uint64_t psz; - f.Read( &psz, sizeof( psz ) ); - pd->data.reserve_and_use( psz ); - f.Read( pd->data.data(), psz * sizeof( PlotItem ) ); - m_data.plots.push_back_no_space_check( pd ); + m_data.plots.reserve( sz ); + for( uint64_t i=0; i(); + f.Read( &pd->name, sizeof( pd->name ) ); + f.Read( &pd->min, sizeof( pd->min ) ); + f.Read( &pd->max, sizeof( pd->max ) ); + uint64_t psz; + f.Read( &psz, sizeof( psz ) ); + pd->data.reserve_and_use( psz ); + f.Read( pd->data.data(), psz * sizeof( PlotItem ) ); + m_data.plots.push_back_no_space_check( pd ); + } + } + else + { + for( uint64_t i=0; iptr, sizeof( mem->ptr ) ); - f.Read( &mem->size, sizeof( mem->size ) ); - f.Read( &mem->timeAlloc, sizeof( mem->timeAlloc ) ); - f.Read( &mem->timeFree, sizeof( mem->timeFree ) ); - uint64_t t; - f.Read( &t, sizeof( t ) ); - mem->threadAlloc = CompressThread( t ); - f.Read( &t, sizeof( t ) ); - mem->threadFree = CompressThread( t ); - - if( mem->timeFree < 0 ) + m_data.memory.data.reserve_and_use( sz ); + auto mem = m_data.memory.data.data(); + for( uint64_t i=0; iptr, i ); - } + f.Read( &mem->ptr, sizeof( mem->ptr ) ); + f.Read( &mem->size, sizeof( mem->size ) ); + f.Read( &mem->timeAlloc, sizeof( mem->timeAlloc ) ); + f.Read( &mem->timeFree, sizeof( mem->timeFree ) ); + uint64_t t; + f.Read( &t, sizeof( t ) ); + mem->threadAlloc = CompressThread( t ); + f.Read( &t, sizeof( t ) ); + mem->threadFree = CompressThread( t ); - mem++; + if( mem->timeFree < 0 ) + { + m_data.memory.active.emplace( mem->ptr, i ); + } + + mem++; + } + f.Read( &m_data.memory.high, sizeof( m_data.memory.high ) ); + f.Read( &m_data.memory.low, sizeof( m_data.memory.low ) ); + f.Read( &m_data.memory.usage, sizeof( m_data.memory.usage ) ); + } + else + { + f.Skip( sz * ( + sizeof( MemEvent::ptr ) + + sizeof( MemEvent::size ) + + sizeof( MemEvent::timeAlloc ) + + sizeof( MemEvent::timeFree ) + + sizeof( uint64_t ) + + sizeof( uint64_t ) ) ); + f.Skip( sizeof( MemData::high ) + sizeof( MemData::low ) + sizeof( MemData::usage ) ); } - f.Read( &m_data.memory.high, sizeof( m_data.memory.high ) ); - f.Read( &m_data.memory.low, sizeof( m_data.memory.low ) ); - f.Read( &m_data.memory.usage, sizeof( m_data.memory.usage ) ); } Worker::~Worker() diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 64b26a1e..9f49e23e 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -23,6 +23,20 @@ namespace tracy class FileRead; class FileWrite; +namespace EventType +{ + enum Type : uint32_t + { + Locks = 1 << 0, + Messages = 1 << 1, + Plots = 1 << 2, + Memory = 1 << 3, + + None = 0, + All = std::numeric_limits::max() + }; +} + class Worker { #pragma pack( 1 ) @@ -91,7 +105,7 @@ class Worker public: Worker( const char* addr ); - Worker( FileRead& f ); + Worker( FileRead& f, EventType::Type eventMask = EventType::All ); ~Worker(); const std::string& GetAddr() const { return m_addr; }