From a313ed4720817321e630a584a00c6bebd32ee546 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 3 Jan 2019 20:09:45 +0100 Subject: [PATCH] Track separate time offset for GPU times. This is second version of 0.4.2 dump file format. Previous 0.4.2 format cannot be read anymore. 041/aa.tracy (0.4.1) {18987 KB} -> 042/aa.tracy (0.4.2) {10051 KB} 52.94% size change 041/android.tracy (0.4.1) {696753 KB} -> 042/android.tracy (0.4.2) {542738 KB} 77.90% size change 041/asset-new.tracy (0.4.1) {97163 KB} -> 042/asset-new.tracy (0.4.2) {78402 KB} 80.69% size change 041/asset-new-id.tracy (0.4.1) {105683 KB} -> 042/asset-new-id.tracy (0.4.2) {84341 KB} 79.81% size change 041/asset-old.tracy (0.4.1) {100205 KB} -> 042/asset-old.tracy (0.4.2) {80688 KB} 80.52% size change 041/big.tracy (0.4.1) {2246014 KB} -> 042/big.tracy (0.4.2) {939578 KB} 41.83% size change 041/crash.tracy (0.4.1) {143 KB} -> 042/crash.tracy (0.4.2) {131 KB} 91.37% size change 041/crash2.tracy (0.4.1) {3411 KB} -> 042/crash2.tracy (0.4.2) {1420 KB} 41.63% size change 041/darkrl.tracy (0.4.1) {31818 KB} -> 042/darkrl.tracy (0.4.2) {15762 KB} 49.54% size change 041/darkrl2.tracy (0.4.1) {18778 KB} -> 042/darkrl2.tracy (0.4.2) {7945 KB} 42.31% size change 041/darkrl-old.tracy (0.4.1) {151346 KB} -> 042/darkrl-old.tracy (0.4.2) {67449 KB} 44.57% size change 041/deadlock.tracy (0.4.1) {53 KB} -> 042/deadlock.tracy (0.4.2) {52 KB} 98.55% size change 041/gn-opengl.tracy (0.4.1) {45860 KB} -> 042/gn-opengl.tracy (0.4.2) {29005 KB} 63.25% size change 041/gn-vulkan.tracy (0.4.1) {45618 KB} -> 042/gn-vulkan.tracy (0.4.2) {29352 KB} 64.34% size change 041/long.tracy (0.4.1) {1583550 KB} -> 042/long.tracy (0.4.2) {1182800 KB} 74.69% size change 041/mem.tracy (0.4.1) {1243058 KB} -> 042/mem.tracy (0.4.2) {1369067 KB} 110.14% size change 041/multi.tracy (0.4.1) {14519 KB} -> 042/multi.tracy (0.4.2) {8000 KB} 55.10% size change 041/new.tracy (0.4.1) {1439 KB} -> 042/new.tracy (0.4.2) {1105 KB} 76.75% size change 041/q3bsp-mt.tracy (0.4.1) {1414323 KB} -> 042/q3bsp-mt.tracy (0.4.2) {949855 KB} 67.16% size change 041/q3bsp-st.tracy (0.4.1) {301334 KB} -> 042/q3bsp-st.tracy (0.4.2) {240347 KB} 79.76% size change 041/selfprofile.tracy (0.4.1) {399648 KB} -> 042/selfprofile.tracy (0.4.2) {197704 KB} 49.47% size change 041/tbrowser.tracy (0.4.1) {13052 KB} -> 042/tbrowser.tracy (0.4.2) {9503 KB} 72.81% size change 041/test.tracy (0.4.1) {60309 KB} -> 042/test.tracy (0.4.2) {40700 KB} 67.49% size change 041/virtualfile_hc.tracy (0.4.1) {108967 KB} -> 042/virtualfile_hc.tracy (0.4.2) {72424 KB} 66.46% size change 041/zfile_hc.tracy (0.4.1) {58814 KB} -> 042/zfile_hc.tracy (0.4.2) {39418 KB} 67.02% size change --- server/TracyWorker.cpp | 28 ++++++++++++++-------------- server/TracyWorker.hpp | 6 +++--- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index f0ffca58..f3da91cf 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -822,7 +822,8 @@ Worker::Worker( FileRead& f, EventType::Type eventMask ) else { int64_t refTime = 0; - ReadTimeline( f, ctx->timeline, tsz, refTime ); + int64_t refGpuTime = 0; + ReadTimeline( f, ctx->timeline, tsz, refTime, refGpuTime ); } } } @@ -3097,7 +3098,7 @@ void Worker::ReadTimelinePre042( FileRead& f, ZoneEvent* zone, uint16_t thread, } } -void Worker::ReadTimeline( FileRead& f, GpuEvent* zone, int64_t& refTime ) +void Worker::ReadTimeline( FileRead& f, GpuEvent* zone, int64_t& refTime, int64_t& refGpuTime ) { uint64_t sz; f.Read( sz ); @@ -3110,7 +3111,7 @@ void Worker::ReadTimeline( FileRead& f, GpuEvent* zone, int64_t& refTime ) zone->child = m_data.m_gpuChildren.size(); m_data.m_gpuChildren.push_back( Vector() ); Vector tmp; - ReadTimeline( f, tmp, sz, refTime ); + ReadTimeline( f, tmp, sz, refTime, refGpuTime ); m_data.m_gpuChildren[zone->child] = std::move( tmp ); } } @@ -3224,7 +3225,7 @@ void Worker::ReadTimelinePre042( FileRead& f, Vector& vec, uint16_t } } -void Worker::ReadTimeline( FileRead& f, Vector& vec, uint64_t size, int64_t& refTime ) +void Worker::ReadTimeline( FileRead& f, Vector& vec, uint64_t size, int64_t& refTime, int64_t& refGpuTime ) { assert( size != 0 ); vec.reserve_exact( size ); @@ -3236,9 +3237,7 @@ void Worker::ReadTimeline( FileRead& f, Vector& vec, uint64_t size, i vec[i] = zone; zone->cpuStart = ReadTimeOffset( f, refTime ); - int64_t gpuOffset; - f.Read2( zone->gpuStart, gpuOffset ); - zone->gpuEnd = zone->gpuStart + gpuOffset; + zone->gpuStart = ReadTimeOffset( f, refGpuTime ); f.Read2( zone->srcloc, zone->callstack ); uint64_t thread; @@ -3251,9 +3250,10 @@ void Worker::ReadTimeline( FileRead& f, Vector& vec, uint64_t size, i { zone->thread = CompressThread( thread ); } - ReadTimeline( f, zone, refTime ); + ReadTimeline( f, zone, refTime, refGpuTime ); zone->cpuEnd = ReadTimeOffset( f, refTime ); + zone->gpuEnd = ReadTimeOffset( f, refGpuTime ); } } @@ -3484,11 +3484,12 @@ void Worker::Write( FileWrite& f ) for( auto& ctx : m_data.gpuData ) { int64_t refTime = 0; + int64_t refGpuTime = 0; f.Write( &ctx->thread, sizeof( ctx->thread ) ); f.Write( &ctx->accuracyBits, sizeof( ctx->accuracyBits ) ); f.Write( &ctx->count, sizeof( ctx->count ) ); f.Write( &ctx->period, sizeof( ctx->period ) ); - WriteTimeline( f, ctx->timeline, refTime ); + WriteTimeline( f, ctx->timeline, refTime, refGpuTime ); } sz = m_data.plots.Data().size(); @@ -3585,7 +3586,7 @@ void Worker::WriteTimeline( FileWrite& f, const Vector& vec, int64_t } } -void Worker::WriteTimeline( FileWrite& f, const Vector& vec, int64_t& refTime ) +void Worker::WriteTimeline( FileWrite& f, const Vector& vec, int64_t& refTime, int64_t& refGpuTime ) { uint64_t sz = vec.size(); f.Write( &sz, sizeof( sz ) ); @@ -3593,9 +3594,7 @@ void Worker::WriteTimeline( FileWrite& f, const Vector& vec, int64_t& for( auto& v : vec ) { WriteTimeOffset( f, refTime, v->cpuStart ); - f.Write( &v->gpuStart, sizeof( v->gpuStart ) ); - int64_t gpuOffset = v->gpuEnd - v->gpuStart; - f.Write( &gpuOffset, sizeof( gpuOffset ) ); + WriteTimeOffset( f, refGpuTime, v->gpuStart ); f.Write( &v->srcloc, sizeof( v->srcloc ) ); f.Write( &v->callstack, sizeof( v->callstack ) ); @@ -3608,10 +3607,11 @@ void Worker::WriteTimeline( FileWrite& f, const Vector& vec, int64_t& } else { - WriteTimeline( f, GetGpuChildren( v->child ), refTime ); + WriteTimeline( f, GetGpuChildren( v->child ), refTime, refGpuTime ); } WriteTimeOffset( f, refTime, v->cpuEnd ); + WriteTimeOffset( f, refGpuTime, v->gpuEnd ); } } diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 5efa4d33..498a9a9f 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -354,18 +354,18 @@ private: tracy_force_inline void ReadTimeline( FileRead& f, ZoneEvent* zone, uint16_t thread, int64_t& refTime ); tracy_force_inline void ReadTimelinePre042( FileRead& f, ZoneEvent* zone, uint16_t thread, int fileVer ); - tracy_force_inline void ReadTimeline( FileRead& f, GpuEvent* zone, int64_t& refTime ); + tracy_force_inline void ReadTimeline( FileRead& f, GpuEvent* zone, int64_t& refTime, int64_t& refGpuTime ); tracy_force_inline void ReadTimelinePre042( FileRead& f, GpuEvent* zone, int fileVer ); tracy_force_inline void ReadTimelineUpdateStatistics( ZoneEvent* zone, uint16_t thread ); void ReadTimeline( FileRead& f, Vector& vec, uint16_t thread, uint64_t size, int64_t& refTime ); void ReadTimelinePre042( FileRead& f, Vector& vec, uint16_t thread, uint64_t size, int fileVer ); - void ReadTimeline( FileRead& f, Vector& vec, uint64_t size, int64_t& refTime ); + void ReadTimeline( FileRead& f, Vector& vec, uint64_t size, int64_t& refTime, int64_t& refGpuTime ); void ReadTimelinePre042( FileRead& f, Vector& vec, uint64_t size, int fileVer ); void WriteTimeline( FileWrite& f, const Vector& vec, int64_t& refTime ); - void WriteTimeline( FileWrite& f, const Vector& vec, int64_t& refTime ); + void WriteTimeline( FileWrite& f, const Vector& 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 ); }