From 3e3aa80fa757dbb5644abd7f5ed4c9c5d9b4934b Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 26 Jul 2020 13:45:53 +0200 Subject: [PATCH] Completely serialize lock events. --- client/TracyLock.hpp | 34 ++++++++++++++++++---------------- client/TracyProfiler.cpp | 18 ++++++++++-------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/client/TracyLock.hpp b/client/TracyLock.hpp index 7143e0d3..e53f17eb 100644 --- a/client/TracyLock.hpp +++ b/client/TracyLock.hpp @@ -23,7 +23,8 @@ public: { assert( m_id != std::numeric_limits::max() ); - TracyLfqPrepare( QueueType::LockAnnounce ); + auto item = Profiler::QueueSerial(); + MemWrite( &item->hdr.type, QueueType::LockAnnounce ); MemWrite( &item->lockAnnounce.id, m_id ); MemWrite( &item->lockAnnounce.time, Profiler::GetTime() ); MemWrite( &item->lockAnnounce.lckloc, (uint64_t)srcloc ); @@ -31,7 +32,7 @@ public: #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif - TracyLfqCommit; + Profiler::QueueSerialFinish(); } LockableCtx( const LockableCtx& ) = delete; @@ -39,14 +40,15 @@ public: tracy_force_inline ~LockableCtx() { - TracyLfqPrepare( QueueType::LockTerminate ); + auto item = Profiler::QueueSerial(); + MemWrite( &item->hdr.type, QueueType::LockTerminate ); MemWrite( &item->lockTerminate.id, m_id ); MemWrite( &item->lockTerminate.time, Profiler::GetTime() ); MemWrite( &item->lockTerminate.type, LockType::Lockable ); #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif - TracyLfqCommit; + Profiler::QueueSerialFinish(); } tracy_force_inline bool BeforeLock() @@ -158,14 +160,15 @@ public: assert( size < std::numeric_limits::max() ); auto ptr = (char*)tracy_malloc( size ); memcpy( ptr, name, size ); - TracyLfqPrepare( QueueType::LockName ); + auto item = Profiler::QueueSerial(); + MemWrite( &item->hdr.type, QueueType::LockName ); MemWrite( &item->lockNameFat.id, m_id ); MemWrite( &item->lockNameFat.name, (uint64_t)ptr ); MemWrite( &item->lockNameFat.size, (uint16_t)size ); #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif - TracyLfqCommit; + Profiler::QueueSerialFinish(); } private: @@ -237,17 +240,16 @@ public: { assert( m_id != std::numeric_limits::max() ); - TracyLfqPrepare( QueueType::LockAnnounce ); + auto item = Profiler::QueueSerial(); + MemWrite( &item->hdr.type, QueueType::LockAnnounce ); MemWrite( &item->lockAnnounce.id, m_id ); MemWrite( &item->lockAnnounce.time, Profiler::GetTime() ); MemWrite( &item->lockAnnounce.lckloc, (uint64_t)srcloc ); MemWrite( &item->lockAnnounce.type, LockType::SharedLockable ); - #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif - - TracyLfqCommit; + Profiler::QueueSerialFinish(); } SharedLockableCtx( const SharedLockableCtx& ) = delete; @@ -255,16 +257,15 @@ public: tracy_force_inline ~SharedLockableCtx() { - TracyLfqPrepare( QueueType::LockTerminate ); + auto item = Profiler::QueueSerial(); + MemWrite( &item->hdr.type, QueueType::LockTerminate ); MemWrite( &item->lockTerminate.id, m_id ); MemWrite( &item->lockTerminate.time, Profiler::GetTime() ); MemWrite( &item->lockTerminate.type, LockType::SharedLockable ); - #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif - - TracyLfqCommit; + Profiler::QueueSerialFinish(); } tracy_force_inline bool BeforeLock() @@ -459,14 +460,15 @@ public: assert( size < std::numeric_limits::max() ); auto ptr = (char*)tracy_malloc( size ); memcpy( ptr, name, size ); - TracyLfqPrepare( QueueType::LockName ); + auto item = Profiler::QueueSerial(); + MemWrite( &item->hdr.type, QueueType::LockName ); MemWrite( &item->lockNameFat.id, m_id ); MemWrite( &item->lockNameFat.name, (uint64_t)ptr ); MemWrite( &item->lockNameFat.size, (uint16_t)size ); #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif - TracyLfqCommit; + Profiler::QueueSerialFinish(); } private: diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 5bd1414b..ee3451ff 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -1940,14 +1940,6 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) MemWrite( &item->zoneEnd.time, dt ); break; } - case QueueType::LockName: - ptr = MemRead( &item->lockNameFat.name ); - size = MemRead( &item->lockNameFat.size ); - SendSingleString( (const char*)ptr, size ); -#ifndef TRACY_ON_DEMAND - tracy_free( (void*)ptr ); -#endif - break; case QueueType::GpuZoneBegin: case QueueType::GpuZoneBeginCallstack: { @@ -2148,6 +2140,16 @@ Profiler::DequeueStatus Profiler::DequeueSerial() MemWrite( &item->lockRelease.time, dt ); break; } + case QueueType::LockName: + { + ptr = MemRead( &item->lockNameFat.name ); + uint16_t size = MemRead( &item->lockNameFat.size ); + SendSingleString( (const char*)ptr, size ); +#ifndef TRACY_ON_DEMAND + tracy_free( (void*)ptr ); +#endif + break; + } case QueueType::MemAlloc: case QueueType::MemAllocCallstack: {