From 597911e5a813f7f6e58592da9f833f1a668e6e3d Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sat, 22 Feb 2020 17:13:53 +0100 Subject: [PATCH] Save/load callstack samples. --- server/TracyVersion.hpp | 2 +- server/TracyWorker.cpp | 33 +++++++++++++++++++++++++++++++++ server/TracyWorker.hpp | 1 + 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/server/TracyVersion.hpp b/server/TracyVersion.hpp index bb0d918b..cd787b2c 100644 --- a/server/TracyVersion.hpp +++ b/server/TracyVersion.hpp @@ -7,7 +7,7 @@ namespace Version { enum { Major = 0 }; enum { Minor = 6 }; -enum { Patch = 3 }; +enum { Patch = 4 }; } } diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 564e09c4..f45a9a3f 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -984,6 +984,31 @@ Worker::Worker( FileRead& f, EventType::Type eventMask, bool bgTasks ) { f.Skip( msz * sizeof( uint64_t ) ); } + if( fileVer >= FileVersion( 0, 6, 4 ) ) + { + uint64_t ssz; + f.Read( ssz ); + if( ssz != 0 ) + { + if( eventMask & EventType::Samples ) + { + m_data.samplesCnt += ssz; + int64_t refTime = 0; + td->samples.reserve_exact( ssz, m_slab ); + auto ptr = td->samples.data(); + for( uint64_t j=0; jtime.SetVal( ReadTimeOffset( f, refTime ) ); + f.Read( &ptr->callstack, sizeof( ptr->callstack ) ); + ptr++; + } + } + else + { + f.Skip( ssz * ( 8 + 3 ) ); + } + } + } m_data.threads[i] = td; m_threadMap.emplace( tid, td ); } @@ -5672,6 +5697,14 @@ void Worker::Write( FileWrite& f ) auto ptr = uint64_t( (MessageData*)v ); f.Write( &ptr, sizeof( ptr ) ); } + sz = thread->samples.size(); + f.Write( &sz, sizeof( sz ) ); + refTime = 0; + for( auto& v : thread->samples ) + { + WriteTimeOffset( f, refTime, v.time.Val() ); + f.Write( &v.callstack, sizeof( v.callstack ) ); + } } sz = 0; diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index b2814ffa..f2f6f74a 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -44,6 +44,7 @@ namespace EventType Memory = 1 << 3, FrameImages = 1 << 4, ContextSwitches = 1 << 5, + Samples = 1 << 6, None = 0, All = std::numeric_limits::max()