From a6a3f458105a1a10199545eb4ed0f739e46e66af Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Tue, 30 Jul 2019 00:42:31 +0200 Subject: [PATCH] Fill in thread id during dequeue, not during enqueue. --- TracyLua.hpp | 18 ---- TracyOpenGL.hpp | 2 +- TracyVulkan.hpp | 2 +- client/TracyLock.hpp | 25 ------ client/TracyProfiler.cpp | 174 +++++++++++++++++++++------------------ client/TracyProfiler.hpp | 15 +--- client/TracyScoped.hpp | 12 +-- common/TracyQueue.hpp | 6 +- 8 files changed, 100 insertions(+), 154 deletions(-) diff --git a/TracyLua.hpp b/TracyLua.hpp index e91eeaef..dc2dcbe6 100644 --- a/TracyLua.hpp +++ b/TracyLua.hpp @@ -180,14 +180,12 @@ static tracy_force_inline void SendLuaCallstack( lua_State* L, uint32_t depth ) assert( dst - ptr == spaceNeeded + 4 ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::CallstackAlloc ); MemWrite( &item->callstackAlloc.ptr, (uint64_t)ptr ); MemWrite( &item->callstackAlloc.nativePtr, (uint64_t)Callstack( depth ) ); - MemWrite( &item->callstackAlloc.thread, thread ); tail.store( magic + 1, std::memory_order_release ); } @@ -228,7 +226,6 @@ static inline int LuaZoneBeginS( lua_State* L ) memcpy( ptr + 12 + fsz + 1, dbg.source, ssz + 1 ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -240,7 +237,6 @@ static inline int LuaZoneBeginS( lua_State* L ) MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.cpu, cpu ); #endif - MemWrite( &item->zoneBegin.thread, thread ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); @@ -295,7 +291,6 @@ static inline int LuaZoneBeginNS( lua_State* L ) memcpy( ptr + 12 + fsz + 1 + ssz + 1, name, nsz ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -307,7 +302,6 @@ static inline int LuaZoneBeginNS( lua_State* L ) MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.cpu, cpu ); #endif - MemWrite( &item->zoneBegin.thread, thread ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); @@ -362,7 +356,6 @@ static inline int LuaZoneBegin( lua_State* L ) memcpy( ptr + 12 + fsz + 1, dbg.source, ssz + 1 ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -374,7 +367,6 @@ static inline int LuaZoneBegin( lua_State* L ) MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.cpu, cpu ); #endif - MemWrite( &item->zoneBegin.thread, thread ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); return 0; @@ -425,7 +417,6 @@ static inline int LuaZoneBeginN( lua_State* L ) memcpy( ptr + 12 + fsz + 1 + ssz + 1, name, nsz ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -437,7 +428,6 @@ static inline int LuaZoneBeginN( lua_State* L ) MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.cpu, cpu ); #endif - MemWrite( &item->zoneBegin.thread, thread ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); return 0; @@ -458,7 +448,6 @@ static inline int LuaZoneEnd( lua_State* L ) #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -470,7 +459,6 @@ static inline int LuaZoneEnd( lua_State* L ) MemWrite( &item->zoneEnd.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneEnd.cpu, cpu ); #endif - MemWrite( &item->zoneEnd.thread, thread ); tail.store( magic + 1, std::memory_order_release ); return 0; } @@ -490,7 +478,6 @@ static inline int LuaZoneText( lua_State* L ) const auto size = strlen( txt ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -498,7 +485,6 @@ static inline int LuaZoneText( lua_State* L ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneText ); - MemWrite( &item->zoneText.thread, thread ); MemWrite( &item->zoneText.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); return 0; @@ -519,7 +505,6 @@ static inline int LuaZoneName( lua_State* L ) const auto size = strlen( txt ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -527,7 +512,6 @@ static inline int LuaZoneName( lua_State* L ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneName ); - MemWrite( &item->zoneText.thread, thread ); MemWrite( &item->zoneText.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); return 0; @@ -543,7 +527,6 @@ static inline int LuaMessage( lua_State* L ) const auto size = strlen( txt ); Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -552,7 +535,6 @@ static inline int LuaMessage( lua_State* L ) auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::Message ); MemWrite( &item->message.time, Profiler::GetTime() ); - MemWrite( &item->message.thread, thread ); MemWrite( &item->message.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); return 0; diff --git a/TracyOpenGL.hpp b/TracyOpenGL.hpp index a687690f..8a69cb93 100644 --- a/TracyOpenGL.hpp +++ b/TracyOpenGL.hpp @@ -236,7 +236,7 @@ public: MemWrite( &item->gpuZoneBegin.context, GetGpuCtx().ptr->GetId() ); tail.store( magic + 1, std::memory_order_release ); - GetProfiler().SendCallstack( depth, thread ); + GetProfiler().SendCallstack( depth ); } tracy_force_inline ~GpuCtxScope() diff --git a/TracyVulkan.hpp b/TracyVulkan.hpp index 452f997b..34111880 100644 --- a/TracyVulkan.hpp +++ b/TracyVulkan.hpp @@ -259,7 +259,7 @@ public: MemWrite( &item->gpuZoneBegin.context, ctx->GetId() ); tail.store( magic + 1, std::memory_order_release ); - GetProfiler().SendCallstack( depth, thread ); + GetProfiler().SendCallstack( depth ); } tracy_force_inline ~VkCtxScope() diff --git a/client/TracyLock.hpp b/client/TracyLock.hpp index ae16719b..eef7d23f 100644 --- a/client/TracyLock.hpp +++ b/client/TracyLock.hpp @@ -80,7 +80,6 @@ public: return; } #endif - const auto thread = GetThreadHandle(); { Magic magic; auto token = GetToken(); @@ -88,7 +87,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockWait ); MemWrite( &item->lockWait.id, m_id ); - MemWrite( &item->lockWait.thread, thread ); MemWrite( &item->lockWait.time, Profiler::GetTime() ); MemWrite( &item->lockWait.type, LockType::Lockable ); tail.store( magic + 1, std::memory_order_release ); @@ -103,7 +101,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->lockObtain.id, m_id ); - MemWrite( &item->lockObtain.thread, thread ); MemWrite( &item->lockObtain.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -124,13 +121,11 @@ public: #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockRelease ); MemWrite( &item->lockRelease.id, m_id ); - MemWrite( &item->lockRelease.thread, thread ); MemWrite( &item->lockRelease.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -157,13 +152,11 @@ public: if( ret ) { Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->lockObtain.id, m_id ); - MemWrite( &item->lockObtain.thread, thread ); MemWrite( &item->lockObtain.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -185,13 +178,11 @@ public: #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockMark ); MemWrite( &item->lockMark.id, m_id ); - MemWrite( &item->lockMark.thread, thread ); MemWrite( &item->lockMark.srcloc, (uint64_t)srcloc ); tail.store( magic + 1, std::memory_order_release ); } @@ -276,7 +267,6 @@ public: return; } #endif - const auto thread = GetThreadHandle(); { Magic magic; auto token = GetToken(); @@ -284,7 +274,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockWait ); MemWrite( &item->lockWait.id, m_id ); - MemWrite( &item->lockWait.thread, thread ); MemWrite( &item->lockWait.time, Profiler::GetTime() ); MemWrite( &item->lockWait.type, LockType::SharedLockable ); tail.store( magic + 1, std::memory_order_release ); @@ -299,7 +288,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->lockObtain.id, m_id ); - MemWrite( &item->lockObtain.thread, thread ); MemWrite( &item->lockObtain.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -320,13 +308,11 @@ public: #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockRelease ); MemWrite( &item->lockRelease.id, m_id ); - MemWrite( &item->lockRelease.thread, thread ); MemWrite( &item->lockRelease.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -353,13 +339,11 @@ public: if( ret ) { Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->lockObtain.id, m_id ); - MemWrite( &item->lockObtain.thread, thread ); MemWrite( &item->lockObtain.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -385,7 +369,6 @@ public: return; } #endif - const auto thread = GetThreadHandle(); { Magic magic; auto token = GetToken(); @@ -393,7 +376,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockSharedWait ); MemWrite( &item->lockWait.id, m_id ); - MemWrite( &item->lockWait.thread, thread ); MemWrite( &item->lockWait.time, Profiler::GetTime() ); MemWrite( &item->lockWait.type, LockType::SharedLockable ); tail.store( magic + 1, std::memory_order_release ); @@ -408,7 +390,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockSharedObtain ); MemWrite( &item->lockObtain.id, m_id ); - MemWrite( &item->lockObtain.thread, thread ); MemWrite( &item->lockObtain.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -429,13 +410,11 @@ public: #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockSharedRelease ); MemWrite( &item->lockRelease.id, m_id ); - MemWrite( &item->lockRelease.thread, thread ); MemWrite( &item->lockRelease.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -462,13 +441,11 @@ public: if( ret ) { Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockSharedObtain ); MemWrite( &item->lockObtain.id, m_id ); - MemWrite( &item->lockObtain.thread, thread ); MemWrite( &item->lockObtain.time, Profiler::GetTime() ); tail.store( magic + 1, std::memory_order_release ); } @@ -490,13 +467,11 @@ public: #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::LockMark ); MemWrite( &item->lockMark.id, m_id ); - MemWrite( &item->lockMark.thread, thread ); MemWrite( &item->lockMark.srcloc, (uint64_t)srcloc ); tail.store( magic + 1, std::memory_order_release ); } diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 2ddee411..59f24c54 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -625,17 +625,15 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp ) { Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::CrashReport ); item->crashReport.time = Profiler::GetTime(); - item->crashReport.thread = thread; item->crashReport.text = (uint64_t)s_crashText; tail.store( magic + 1, std::memory_order_release ); - GetProfiler().SendCallstack( 60, thread, "KiUserExceptionDispatcher" ); + GetProfiler().SendCallstack( 60, "KiUserExceptionDispatcher" ); } HANDLE h = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); @@ -863,17 +861,15 @@ static void CrashHandler( int signal, siginfo_t* info, void* /*ucontext*/ ) { Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::CrashReport ); item->crashReport.time = Profiler::GetTime(); - item->crashReport.thread = thread; item->crashReport.text = (uint64_t)s_crashText; tail.store( magic + 1, std::memory_order_release ); - GetProfiler().SendCallstack( 60, thread, "__kernel_rt_sigreturn" ); + GetProfiler().SendCallstack( 60, "__kernel_rt_sigreturn" ); } DIR* dp = opendir( "/proc/self/task" ); @@ -1700,63 +1696,97 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) { uint64_t ptr; const auto idx = MemRead( &item->hdr.idx ); - if( idx < (int)QueueType::Terminate ) + switch( (QueueType)idx ) { - switch( (QueueType)idx ) - { - case QueueType::ZoneText: - case QueueType::ZoneName: - ptr = MemRead( &item->zoneText.text ); - SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); - tracy_free( (void*)ptr ); - break; - case QueueType::Message: - case QueueType::MessageColor: - ptr = MemRead( &item->message.text ); - SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); - tracy_free( (void*)ptr ); - break; - case QueueType::MessageAppInfo: - ptr = MemRead( &item->message.text ); - SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); + case QueueType::ZoneText: + case QueueType::ZoneName: + MemWrite( &item->zoneText.thread, threadId ); + ptr = MemRead( &item->zoneText.text ); + SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); + tracy_free( (void*)ptr ); + break; + case QueueType::Message: + case QueueType::MessageColor: + MemWrite( &item->message.thread, threadId ); + ptr = MemRead( &item->message.text ); + SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); + tracy_free( (void*)ptr ); + break; + case QueueType::MessageAppInfo: + MemWrite( &item->message.thread, threadId ); + ptr = MemRead( &item->message.text ); + SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); #ifndef TRACY_ON_DEMAND - tracy_free( (void*)ptr ); + tracy_free( (void*)ptr ); #endif - break; - case QueueType::ZoneBeginAllocSrcLoc: - case QueueType::ZoneBeginAllocSrcLocCallstack: - ptr = MemRead( &item->zoneBegin.srcloc ); - SendSourceLocationPayload( ptr ); - tracy_free( (void*)ptr ); - break; - case QueueType::Callstack: - ptr = MemRead( &item->callstack.ptr ); - SendCallstackPayload( ptr ); - tracy_free( (void*)ptr ); - break; - case QueueType::CallstackAlloc: - ptr = MemRead( &item->callstackAlloc.nativePtr ); - CutCallstack( (void*)ptr, "lua_pcall" ); - SendCallstackPayload( ptr ); - tracy_free( (void*)ptr ); - ptr = MemRead( &item->callstackAlloc.ptr ); - SendCallstackAlloc( ptr ); - tracy_free( (void*)ptr ); - break; - case QueueType::FrameImage: - { - ptr = MemRead( &item->frameImage.image ); - const auto w = MemRead( &item->frameImage.w ); - const auto h = MemRead( &item->frameImage.h ); - const auto csz = size_t( w * h / 2 ); - SendLongString( ptr, (const char*)ptr, csz, QueueType::FrameImageData ); - tracy_free( (void*)ptr ); - break; - } - default: - assert( false ); - break; - } + break; + case QueueType::ZoneBeginAllocSrcLoc: + case QueueType::ZoneBeginAllocSrcLocCallstack: + MemWrite( &item->zoneBegin.thread, threadId ); + ptr = MemRead( &item->zoneBegin.srcloc ); + SendSourceLocationPayload( ptr ); + tracy_free( (void*)ptr ); + break; + case QueueType::Callstack: + MemWrite( &item->callstack.thread, threadId ); + ptr = MemRead( &item->callstack.ptr ); + SendCallstackPayload( ptr ); + tracy_free( (void*)ptr ); + break; + case QueueType::CallstackAlloc: + MemWrite( &item->callstackAlloc.thread, threadId ); + ptr = MemRead( &item->callstackAlloc.nativePtr ); + CutCallstack( (void*)ptr, "lua_pcall" ); + SendCallstackPayload( ptr ); + tracy_free( (void*)ptr ); + ptr = MemRead( &item->callstackAlloc.ptr ); + SendCallstackAlloc( ptr ); + tracy_free( (void*)ptr ); + break; + case QueueType::FrameImage: + { + ptr = MemRead( &item->frameImage.image ); + const auto w = MemRead( &item->frameImage.w ); + const auto h = MemRead( &item->frameImage.h ); + const auto csz = size_t( w * h / 2 ); + SendLongString( ptr, (const char*)ptr, csz, QueueType::FrameImageData ); + tracy_free( (void*)ptr ); + break; + } + case QueueType::CrashReport: + MemWrite( &item->crashReport.thread, threadId ); + break; + case QueueType::ZoneBegin: + case QueueType::ZoneBeginCallstack: + MemWrite( &item->zoneBegin.thread, threadId ); + break; + case QueueType::ZoneEnd: + MemWrite( &item->zoneEnd.thread, threadId ); + break; + case QueueType::ZoneValidation: + MemWrite( &item->zoneValidation.thread, threadId ); + break; + case QueueType::LockWait: + case QueueType::LockSharedWait: + MemWrite( &item->lockWait.thread, threadId ); + break; + case QueueType::LockObtain: + case QueueType::LockSharedObtain: + MemWrite( &item->lockObtain.thread, threadId ); + break; + case QueueType::LockRelease: + case QueueType::LockSharedRelease: + MemWrite( &item->lockRelease.thread, threadId ); + break; + case QueueType::LockMark: + MemWrite( &item->lockMark.thread, threadId ); + break; + case QueueType::MessageLiteral: + case QueueType::MessageLiteralColor: + MemWrite( &item->message.thread, threadId ); + break; + default: + break; } if( !AppendData( item, QueueDataSize[idx] ) ) return DequeueStatus::ConnectionLost; item++; @@ -2117,7 +2147,6 @@ void Profiler::CalibrateDelay() auto& tail = ptoken->get_tail_index(); auto item = ptoken->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneBegin ); - MemWrite( &item->zoneBegin.thread, GetThreadHandle() ); #ifdef TRACY_RDTSCP_OPT MemWrite( &item->zoneBegin.time, Profiler::GetTime( item->zoneBegin.cpu ) ); #else @@ -2133,7 +2162,6 @@ void Profiler::CalibrateDelay() auto& tail = ptoken->get_tail_index(); auto item = ptoken->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneEnd ); - MemWrite( &item->zoneEnd.thread, uint64_t( 0 ) ); #ifdef TRACY_RDTSCP_OPT MemWrite( &item->zoneEnd.time, GetTime( item->zoneEnd.cpu ) ); #else @@ -2159,7 +2187,6 @@ void Profiler::CalibrateDelay() auto& tail = ptoken->get_tail_index(); auto item = ptoken->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneBegin ); - MemWrite( &item->zoneBegin.thread, GetThreadHandle() ); #ifdef TRACY_RDTSCP_OPT MemWrite( &item->zoneBegin.time, Profiler::GetTime( item->zoneBegin.cpu ) ); #else @@ -2175,7 +2202,6 @@ void Profiler::CalibrateDelay() auto& tail = ptoken->get_tail_index(); auto item = ptoken->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneEnd ); - MemWrite( &item->zoneEnd.thread, uint64_t( 0 ) ); #ifdef TRACY_RDTSCP_OPT MemWrite( &item->zoneEnd.time, GetTime( item->zoneEnd.cpu ) ); #else @@ -2214,7 +2240,7 @@ void Profiler::CalibrateDelay() } } -void Profiler::SendCallstack( int depth, uint64_t thread, const char* skipBefore ) +void Profiler::SendCallstack( int depth, const char* skipBefore ) { #ifdef TRACY_HAS_CALLSTACK auto ptr = Callstack( depth ); @@ -2226,7 +2252,6 @@ void Profiler::SendCallstack( int depth, uint64_t thread, const char* skipBefore auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::Callstack ); MemWrite( &item->callstack.ptr, ptr ); - MemWrite( &item->callstack.thread, thread ); tail.store( magic + 1, std::memory_order_release ); #endif } @@ -2298,7 +2323,6 @@ TracyCZoneCtx ___tracy_emit_zone_begin( const struct ___tracy_source_location_da const auto id = tracy::GetProfiler().GetNextZoneId(); ctx.id = id; - const auto thread = tracy::GetThreadHandle(); #ifndef TRACY_NO_VERIFY { tracy::Magic magic; @@ -2306,7 +2330,6 @@ TracyCZoneCtx ___tracy_emit_zone_begin( const struct ___tracy_source_location_da auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); - tracy::MemWrite( &item->zoneValidation.thread, thread ); tracy::MemWrite( &item->zoneValidation.id, id ); tail.store( magic + 1, std::memory_order_release ); } @@ -2324,7 +2347,6 @@ TracyCZoneCtx ___tracy_emit_zone_begin( const struct ___tracy_source_location_da tracy::MemWrite( &item->zoneBegin.time, tracy::Profiler::GetTime( cpu ) ); tracy::MemWrite( &item->zoneBegin.cpu, cpu ); #endif - tracy::MemWrite( &item->zoneBegin.thread, thread ); tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); tail.store( magic + 1, std::memory_order_release ); } @@ -2343,7 +2365,6 @@ TracyCZoneCtx ___tracy_emit_zone_begin_callstack( const struct ___tracy_source_l const auto id = tracy::GetProfiler().GetNextZoneId(); ctx.id = id; - const auto thread = tracy::GetThreadHandle(); #ifndef TRACY_NO_VERIFY { tracy::Magic magic; @@ -2351,7 +2372,6 @@ TracyCZoneCtx ___tracy_emit_zone_begin_callstack( const struct ___tracy_source_l auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); - tracy::MemWrite( &item->zoneValidation.thread, thread ); tracy::MemWrite( &item->zoneValidation.id, id ); tail.store( magic + 1, std::memory_order_release ); } @@ -2369,19 +2389,17 @@ TracyCZoneCtx ___tracy_emit_zone_begin_callstack( const struct ___tracy_source_l tracy::MemWrite( &item->zoneBegin.time, tracy::Profiler::GetTime( cpu ) ); tracy::MemWrite( &item->zoneBegin.cpu, cpu ); #endif - tracy::MemWrite( &item->zoneBegin.thread, thread ); tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); tail.store( magic + 1, std::memory_order_release ); } - tracy::GetProfiler().SendCallstack( depth, thread ); + tracy::GetProfiler().SendCallstack( depth ); return ctx; } void ___tracy_emit_zone_end( TracyCZoneCtx ctx ) { if( !ctx.active ) return; - const auto thread = tracy::GetThreadHandle(); #ifndef TRACY_NO_VERIFY { tracy::Magic magic; @@ -2389,7 +2407,6 @@ void ___tracy_emit_zone_end( TracyCZoneCtx ctx ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); - tracy::MemWrite( &item->zoneValidation.thread, thread ); tracy::MemWrite( &item->zoneValidation.id, ctx.id ); tail.store( magic + 1, std::memory_order_release ); } @@ -2407,7 +2424,6 @@ void ___tracy_emit_zone_end( TracyCZoneCtx ctx ) tracy::MemWrite( &item->zoneEnd.time, tracy::Profiler::GetTime( cpu ) ); tracy::MemWrite( &item->zoneEnd.cpu, cpu ); #endif - tracy::MemWrite( &item->zoneEnd.thread, thread ); tail.store( magic + 1, std::memory_order_release ); } } @@ -2415,7 +2431,6 @@ void ___tracy_emit_zone_end( TracyCZoneCtx ctx ) void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* txt, size_t size ) { if( !ctx.active ) return; - const auto thread = tracy::GetThreadHandle(); auto ptr = (char*)tracy::tracy_malloc( size+1 ); memcpy( ptr, txt, size ); ptr[size] = '\0'; @@ -2426,7 +2441,6 @@ void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* txt, size_t size ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); - tracy::MemWrite( &item->zoneValidation.thread, thread ); tracy::MemWrite( &item->zoneValidation.id, ctx.id ); tail.store( magic + 1, std::memory_order_release ); } @@ -2437,7 +2451,6 @@ void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* txt, size_t size ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneText ); - tracy::MemWrite( &item->zoneText.thread, thread ); tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); } @@ -2446,7 +2459,6 @@ void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* txt, size_t size ) void ___tracy_emit_zone_name( TracyCZoneCtx ctx, const char* txt, size_t size ) { if( !ctx.active ) return; - const auto thread = tracy::GetThreadHandle(); auto ptr = (char*)tracy::tracy_malloc( size+1 ); memcpy( ptr, txt, size ); ptr[size] = '\0'; @@ -2457,7 +2469,6 @@ void ___tracy_emit_zone_name( TracyCZoneCtx ctx, const char* txt, size_t size ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); - tracy::MemWrite( &item->zoneValidation.thread, thread ); tracy::MemWrite( &item->zoneValidation.id, ctx.id ); tail.store( magic + 1, std::memory_order_release ); } @@ -2468,7 +2479,6 @@ void ___tracy_emit_zone_name( TracyCZoneCtx ctx, const char* txt, size_t size ) auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneName ); - tracy::MemWrite( &item->zoneText.thread, thread ); tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); } diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index 0cc7da8a..d61ce7db 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -261,7 +261,6 @@ public: if( !GetProfiler().IsConnected() ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -270,7 +269,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::Message ); MemWrite( &item->message.time, GetTime() ); - MemWrite( &item->message.thread, thread ); MemWrite( &item->message.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); } @@ -281,13 +279,11 @@ public: if( !GetProfiler().IsConnected() ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::MessageLiteral ); MemWrite( &item->message.time, GetTime() ); - MemWrite( &item->message.thread, thread ); MemWrite( &item->message.text, (uint64_t)txt ); tail.store( magic + 1, std::memory_order_release ); } @@ -298,7 +294,6 @@ public: if( !GetProfiler().IsConnected() ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -307,7 +302,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::MessageColor ); MemWrite( &item->messageColor.time, GetTime() ); - MemWrite( &item->messageColor.thread, thread ); MemWrite( &item->messageColor.text, (uint64_t)ptr ); MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColor.g, uint8_t( ( color >> 8 ) & 0xFF ) ); @@ -321,13 +315,11 @@ public: if( !GetProfiler().IsConnected() ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::MessageLiteralColor ); MemWrite( &item->messageColor.time, GetTime() ); - MemWrite( &item->messageColor.thread, thread ); MemWrite( &item->messageColor.text, (uint64_t)txt ); MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColor.g, uint8_t( ( color >> 8 ) & 0xFF ) ); @@ -338,7 +330,6 @@ public: static tracy_force_inline void MessageAppInfo( const char* txt, size_t size ) { Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -347,7 +338,6 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::MessageAppInfo ); MemWrite( &item->message.time, GetTime() ); - MemWrite( &item->message.thread, thread ); MemWrite( &item->message.text, (uint64_t)ptr ); #ifdef TRACY_ON_DEMAND @@ -423,7 +413,7 @@ public: #endif } - static tracy_force_inline void SendCallstack( int depth, uint64_t thread ) + static tracy_force_inline void SendCallstack( int depth ) { #ifdef TRACY_HAS_CALLSTACK auto ptr = Callstack( depth ); @@ -433,12 +423,11 @@ public: auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::Callstack ); MemWrite( &item->callstack.ptr, ptr ); - MemWrite( &item->callstack.thread, thread ); tail.store( magic + 1, std::memory_order_release ); #endif } - void SendCallstack( int depth, uint64_t thread, const char* skipBefore ); + void SendCallstack( int depth, const char* skipBefore ); static void CutCallstack( void* callstack, const char* skipBefore ); static bool ShouldExit(); diff --git a/client/TracyScoped.hpp b/client/TracyScoped.hpp index 12e61c3c..0b3973dd 100644 --- a/client/TracyScoped.hpp +++ b/client/TracyScoped.hpp @@ -25,7 +25,6 @@ public: { if( !m_active ) return; Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -37,7 +36,6 @@ public: MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.cpu, cpu ); #endif - MemWrite( &item->zoneBegin.thread, thread ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); tail.store( magic + 1, std::memory_order_release ); } @@ -51,7 +49,6 @@ public: #endif { if( !m_active ) return; - const auto thread = GetThreadHandle(); Magic magic; auto token = GetToken(); auto& tail = token->get_tail_index(); @@ -64,11 +61,10 @@ public: MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.cpu, cpu ); #endif - MemWrite( &item->zoneBegin.thread, thread ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); tail.store( magic + 1, std::memory_order_release ); - GetProfiler().SendCallstack( depth, thread ); + GetProfiler().SendCallstack( depth ); } tracy_force_inline ~ScopedZone() @@ -78,7 +74,6 @@ public: if( GetProfiler().ConnectionId() != m_connectionId ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); @@ -90,7 +85,6 @@ public: MemWrite( &item->zoneEnd.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneEnd.cpu, cpu ); #endif - MemWrite( &item->zoneEnd.thread, thread ); tail.store( magic + 1, std::memory_order_release ); } @@ -101,7 +95,6 @@ public: if( GetProfiler().ConnectionId() != m_connectionId ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -109,7 +102,6 @@ public: auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneText ); - MemWrite( &item->zoneText.thread, thread ); MemWrite( &item->zoneText.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); } @@ -121,7 +113,6 @@ public: if( GetProfiler().ConnectionId() != m_connectionId ) return; #endif Magic magic; - const auto thread = GetThreadHandle(); auto token = GetToken(); auto ptr = (char*)tracy_malloc( size+1 ); memcpy( ptr, txt, size ); @@ -129,7 +120,6 @@ public: auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); MemWrite( &item->hdr.type, QueueType::ZoneName ); - MemWrite( &item->zoneText.thread, thread ); MemWrite( &item->zoneText.text, (uint64_t)ptr ); tail.store( magic + 1, std::memory_order_release ); } diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index e51a1ff9..08299c22 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -384,9 +384,9 @@ static const size_t QueueDataSize[] = { sizeof( QueueHeader ) + sizeof( QueueLockWait ), sizeof( QueueHeader ) + sizeof( QueueLockObtain ), sizeof( QueueHeader ) + sizeof( QueueLockRelease ), - sizeof( QueueHeader ) + sizeof( QueueLockWait ), - sizeof( QueueHeader ) + sizeof( QueueLockObtain ), - sizeof( QueueHeader ) + sizeof( QueueLockRelease ), + sizeof( QueueHeader ) + sizeof( QueueLockWait ), // shared + sizeof( QueueHeader ) + sizeof( QueueLockObtain ), // shared + sizeof( QueueHeader ) + sizeof( QueueLockRelease ), // shared sizeof( QueueHeader ) + sizeof( QueueLockMark ), sizeof( QueueHeader ) + sizeof( QueuePlotData ), sizeof( QueueHeader ) + sizeof( QueueMessage ), // literal