diff --git a/server/TracyEvent.hpp b/server/TracyEvent.hpp index 8a8f2a52..50ce5adb 100644 --- a/server/TracyEvent.hpp +++ b/server/TracyEvent.hpp @@ -210,6 +210,8 @@ struct ThreadData Vector timeline; Vector stack; Vector messages; + uint32_t nextZoneId; + Vector zoneIdStack; }; struct GpuCtxData diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 47fb1b0b..89c32096 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -1758,6 +1758,7 @@ ThreadData* Worker::NewThread( uint64_t thread ) auto td = m_slab.AllocInit(); td->id = thread; td->count = 0; + td->nextZoneId = 0; m_data.threads.push_back( td ); m_threadMap.emplace( thread, td ); return td; @@ -2102,6 +2103,9 @@ void Worker::Process( const QueueItem& ev ) case QueueType::ZoneEnd: ProcessZoneEnd( ev.zoneEnd ); break; + case QueueType::ZoneValidation: + ProcessZoneValidation( ev.zoneValidation ); + break; case QueueType::FrameMarkMsg: ProcessFrameMark( ev.frameMark ); break; @@ -2303,6 +2307,12 @@ void Worker::ProcessZoneEnd( const QueueZoneEnd& ev ) #endif } +void Worker::ProcessZoneValidation( const QueueZoneValidation& ev ) +{ + auto td = NoticeThread( ev.thread ); + td->nextZoneId = ev.id; +} + void Worker::ProcessFrameMark( const QueueFrameMark& ev ) { auto fd = m_data.frames.Retrieve( ev.name, [this] ( uint64_t name ) { diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index bdd8270a..77c48d2e 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -279,6 +279,7 @@ private: tracy_force_inline void ProcessZoneBeginCallstack( const QueueZoneBegin& ev ); tracy_force_inline void ProcessZoneBeginAllocSrcLoc( const QueueZoneBegin& ev ); tracy_force_inline void ProcessZoneEnd( const QueueZoneEnd& ev ); + tracy_force_inline void ProcessZoneValidation( const QueueZoneValidation& ev ); tracy_force_inline void ProcessFrameMark( const QueueFrameMark& ev ); tracy_force_inline void ProcessFrameMarkStart( const QueueFrameMark& ev ); tracy_force_inline void ProcessFrameMarkEnd( const QueueFrameMark& ev );