From 672093cf0eecd4aac9e2e56491ca7be3dcf0a3d7 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 10 Nov 2019 16:34:38 +0100 Subject: [PATCH] Adapt WriteTimeline() to magic vectors. --- server/TracyWorker.cpp | 78 ++++++++++++++++++++++++++++-------------- server/TracyWorker.hpp | 8 +++-- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index d48f2f4d..0d591e8c 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -5855,28 +5855,42 @@ void Worker::WriteTimeline( FileWrite& f, const Vector>& ve { uint64_t sz = vec.size(); f.Write( &sz, sizeof( sz ) ); - - for( auto& v : vec ) + if( vec.is_magic() ) { - int16_t srcloc = v->SrcLoc(); - f.Write( &srcloc, sizeof( srcloc ) ); - int64_t start = v->Start(); - WriteTimeOffset( f, refTime, start ); - f.Write( &v->text, sizeof( v->text ) ); - f.Write( &v->callstack, sizeof( v->callstack ) ); - f.Write( &v->name, sizeof( v->name ) ); + WriteTimelineImpl>( f, *(Vector*)( &vec ), refTime ); + } + else + { + WriteTimelineImpl>( f, vec, refTime ); + } +} - if( v->Child() < 0 ) +template +void Worker::WriteTimelineImpl( FileWrite& f, const V& vec, int64_t& refTime ) +{ + Adapter a; + for( auto& val : vec ) + { + auto& v = a(val); + int16_t srcloc = v.SrcLoc(); + f.Write( &srcloc, sizeof( srcloc ) ); + int64_t start = v.Start(); + WriteTimeOffset( f, refTime, start ); + f.Write( &v.text, sizeof( v.text ) ); + f.Write( &v.callstack, sizeof( v.callstack ) ); + f.Write( &v.name, sizeof( v.name ) ); + + if( v.Child() < 0 ) { - sz = 0; + const uint64_t sz = 0; f.Write( &sz, sizeof( sz ) ); } else { - WriteTimeline( f, GetZoneChildren( v->Child() ), refTime ); + WriteTimeline( f, GetZoneChildren( v.Child() ), refTime ); } - WriteTimeOffset( f, refTime, v->End() ); + WriteTimeOffset( f, refTime, v.End() ); } } @@ -5884,29 +5898,43 @@ void Worker::WriteTimeline( FileWrite& f, const Vector>& vec { uint64_t sz = vec.size(); f.Write( &sz, sizeof( sz ) ); - - for( auto& v : vec ) + if( vec.is_magic() ) { - WriteTimeOffset( f, refTime, v->CpuStart() ); - WriteTimeOffset( f, refGpuTime, v->GpuStart() ); - const int16_t srcloc = v->SrcLoc(); + WriteTimelineImpl>( f, *(Vector*)( &vec ), refTime, refGpuTime ); + } + else + { + WriteTimelineImpl>( f, vec, refTime, refGpuTime ); + } +} + +template +void Worker::WriteTimelineImpl( FileWrite& f, const V& vec, int64_t& refTime, int64_t& refGpuTime ) +{ + Adapter a; + for( auto& val : vec ) + { + auto& v = a(val); + WriteTimeOffset( f, refTime, v.CpuStart() ); + WriteTimeOffset( f, refGpuTime, v.GpuStart() ); + const int16_t srcloc = v.SrcLoc(); f.Write( &srcloc, sizeof( srcloc ) ); - f.Write( &v->callstack, sizeof( v->callstack ) ); - const uint16_t thread = v->Thread(); + f.Write( &v.callstack, sizeof( v.callstack ) ); + const uint16_t thread = v.Thread(); f.Write( &thread, sizeof( thread ) ); - if( v->Child() < 0 ) + if( v.Child() < 0 ) { - sz = 0; + const uint64_t sz = 0; f.Write( &sz, sizeof( sz ) ); } else { - WriteTimeline( f, GetGpuChildren( v->Child() ), refTime, refGpuTime ); + WriteTimeline( f, GetGpuChildren( v.Child() ), refTime, refGpuTime ); } - WriteTimeOffset( f, refTime, v->CpuEnd() ); - WriteTimeOffset( f, refGpuTime, v->GpuEnd() ); + WriteTimeOffset( f, refTime, v.CpuEnd() ); + WriteTimeOffset( f, refGpuTime, v.GpuEnd() ); } } diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 3c193a7c..e15d07f0 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -589,8 +589,12 @@ private: void ReadTimeline( FileRead& f, Vector>& vec, uint64_t size, int64_t& refTime, int64_t& refGpuTime, int32_t& childIdx ); void ReadTimelinePre0510( FileRead& f, Vector>& vec, uint64_t size, int64_t& refTime, int64_t& refGpuTime, int fileVer ); - void WriteTimeline( FileWrite& f, const Vector>& vec, int64_t& refTime ); - void WriteTimeline( FileWrite& f, const Vector>& vec, int64_t& refTime, int64_t& refGpuTime ); + tracy_force_inline void WriteTimeline( FileWrite& f, const Vector>& vec, int64_t& refTime ); + tracy_force_inline void WriteTimeline( FileWrite& f, const Vector>& vec, int64_t& refTime, int64_t& refGpuTime ); + template + void WriteTimelineImpl( FileWrite& f, const V& vec, int64_t& refTime ); + template + void WriteTimelineImpl( FileWrite& f, const V& vec, int64_t& refTime, int64_t& refGpuTime ); int64_t TscTime( int64_t tsc ) { return int64_t( tsc * m_timerMul ); } int64_t TscTime( uint64_t tsc ) { return int64_t( tsc * m_timerMul ); }