1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 12:23:53 +00:00

Fill in thread id during dequeue, not during enqueue.

This commit is contained in:
Bartosz Taudul 2019-07-30 00:42:31 +02:00
parent 142ef53b42
commit a6a3f45810
8 changed files with 100 additions and 154 deletions

View File

@ -180,14 +180,12 @@ static tracy_force_inline void SendLuaCallstack( lua_State* L, uint32_t depth )
assert( dst - ptr == spaceNeeded + 4 ); assert( dst - ptr == spaceNeeded + 4 );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CallstackAlloc ); MemWrite( &item->hdr.type, QueueType::CallstackAlloc );
MemWrite( &item->callstackAlloc.ptr, (uint64_t)ptr ); MemWrite( &item->callstackAlloc.ptr, (uint64_t)ptr );
MemWrite( &item->callstackAlloc.nativePtr, (uint64_t)Callstack( depth ) ); MemWrite( &item->callstackAlloc.nativePtr, (uint64_t)Callstack( depth ) );
MemWrite( &item->callstackAlloc.thread, thread );
tail.store( magic + 1, std::memory_order_release ); 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 ); memcpy( ptr + 12 + fsz + 1, dbg.source, ssz + 1 );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); 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.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneBegin.cpu, cpu ); MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
MemWrite( &item->zoneBegin.thread, thread );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); 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 ); memcpy( ptr + 12 + fsz + 1 + ssz + 1, name, nsz );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); 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.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneBegin.cpu, cpu ); MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
MemWrite( &item->zoneBegin.thread, thread );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); 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 ); memcpy( ptr + 12 + fsz + 1, dbg.source, ssz + 1 );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); 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.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneBegin.cpu, cpu ); MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
MemWrite( &item->zoneBegin.thread, thread );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
return 0; return 0;
@ -425,7 +417,6 @@ static inline int LuaZoneBeginN( lua_State* L )
memcpy( ptr + 12 + fsz + 1 + ssz + 1, name, nsz ); memcpy( ptr + 12 + fsz + 1 + ssz + 1, name, nsz );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); 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.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneBegin.cpu, cpu ); MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
MemWrite( &item->zoneBegin.thread, thread );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
return 0; return 0;
@ -458,7 +448,6 @@ static inline int LuaZoneEnd( lua_State* L )
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); 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.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneEnd.cpu, cpu ); MemWrite( &item->zoneEnd.cpu, cpu );
#endif #endif
MemWrite( &item->zoneEnd.thread, thread );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
return 0; return 0;
} }
@ -490,7 +478,6 @@ static inline int LuaZoneText( lua_State* L )
const auto size = strlen( txt ); const auto size = strlen( txt );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -498,7 +485,6 @@ static inline int LuaZoneText( lua_State* L )
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneText ); MemWrite( &item->hdr.type, QueueType::ZoneText );
MemWrite( &item->zoneText.thread, thread );
MemWrite( &item->zoneText.text, (uint64_t)ptr ); MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
return 0; return 0;
@ -519,7 +505,6 @@ static inline int LuaZoneName( lua_State* L )
const auto size = strlen( txt ); const auto size = strlen( txt );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -527,7 +512,6 @@ static inline int LuaZoneName( lua_State* L )
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneName ); MemWrite( &item->hdr.type, QueueType::ZoneName );
MemWrite( &item->zoneText.thread, thread );
MemWrite( &item->zoneText.text, (uint64_t)ptr ); MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
return 0; return 0;
@ -543,7 +527,6 @@ static inline int LuaMessage( lua_State* L )
const auto size = strlen( txt ); const auto size = strlen( txt );
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -552,7 +535,6 @@ static inline int LuaMessage( lua_State* L )
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Message ); MemWrite( &item->hdr.type, QueueType::Message );
MemWrite( &item->message.time, Profiler::GetTime() ); MemWrite( &item->message.time, Profiler::GetTime() );
MemWrite( &item->message.thread, thread );
MemWrite( &item->message.text, (uint64_t)ptr ); MemWrite( &item->message.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
return 0; return 0;

View File

@ -236,7 +236,7 @@ public:
MemWrite( &item->gpuZoneBegin.context, GetGpuCtx().ptr->GetId() ); MemWrite( &item->gpuZoneBegin.context, GetGpuCtx().ptr->GetId() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
GetProfiler().SendCallstack( depth, thread ); GetProfiler().SendCallstack( depth );
} }
tracy_force_inline ~GpuCtxScope() tracy_force_inline ~GpuCtxScope()

View File

@ -259,7 +259,7 @@ public:
MemWrite( &item->gpuZoneBegin.context, ctx->GetId() ); MemWrite( &item->gpuZoneBegin.context, ctx->GetId() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
GetProfiler().SendCallstack( depth, thread ); GetProfiler().SendCallstack( depth );
} }
tracy_force_inline ~VkCtxScope() tracy_force_inline ~VkCtxScope()

View File

@ -80,7 +80,6 @@ public:
return; return;
} }
#endif #endif
const auto thread = GetThreadHandle();
{ {
Magic magic; Magic magic;
auto token = GetToken(); auto token = GetToken();
@ -88,7 +87,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockWait ); MemWrite( &item->hdr.type, QueueType::LockWait );
MemWrite( &item->lockWait.id, m_id ); MemWrite( &item->lockWait.id, m_id );
MemWrite( &item->lockWait.thread, thread );
MemWrite( &item->lockWait.time, Profiler::GetTime() ); MemWrite( &item->lockWait.time, Profiler::GetTime() );
MemWrite( &item->lockWait.type, LockType::Lockable ); MemWrite( &item->lockWait.type, LockType::Lockable );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
@ -103,7 +101,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->hdr.type, QueueType::LockObtain );
MemWrite( &item->lockObtain.id, m_id ); MemWrite( &item->lockObtain.id, m_id );
MemWrite( &item->lockObtain.thread, thread );
MemWrite( &item->lockObtain.time, Profiler::GetTime() ); MemWrite( &item->lockObtain.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -124,13 +121,11 @@ public:
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockRelease ); MemWrite( &item->hdr.type, QueueType::LockRelease );
MemWrite( &item->lockRelease.id, m_id ); MemWrite( &item->lockRelease.id, m_id );
MemWrite( &item->lockRelease.thread, thread );
MemWrite( &item->lockRelease.time, Profiler::GetTime() ); MemWrite( &item->lockRelease.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -157,13 +152,11 @@ public:
if( ret ) if( ret )
{ {
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->hdr.type, QueueType::LockObtain );
MemWrite( &item->lockObtain.id, m_id ); MemWrite( &item->lockObtain.id, m_id );
MemWrite( &item->lockObtain.thread, thread );
MemWrite( &item->lockObtain.time, Profiler::GetTime() ); MemWrite( &item->lockObtain.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -185,13 +178,11 @@ public:
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockMark ); MemWrite( &item->hdr.type, QueueType::LockMark );
MemWrite( &item->lockMark.id, m_id ); MemWrite( &item->lockMark.id, m_id );
MemWrite( &item->lockMark.thread, thread );
MemWrite( &item->lockMark.srcloc, (uint64_t)srcloc ); MemWrite( &item->lockMark.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -276,7 +267,6 @@ public:
return; return;
} }
#endif #endif
const auto thread = GetThreadHandle();
{ {
Magic magic; Magic magic;
auto token = GetToken(); auto token = GetToken();
@ -284,7 +274,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockWait ); MemWrite( &item->hdr.type, QueueType::LockWait );
MemWrite( &item->lockWait.id, m_id ); MemWrite( &item->lockWait.id, m_id );
MemWrite( &item->lockWait.thread, thread );
MemWrite( &item->lockWait.time, Profiler::GetTime() ); MemWrite( &item->lockWait.time, Profiler::GetTime() );
MemWrite( &item->lockWait.type, LockType::SharedLockable ); MemWrite( &item->lockWait.type, LockType::SharedLockable );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
@ -299,7 +288,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->hdr.type, QueueType::LockObtain );
MemWrite( &item->lockObtain.id, m_id ); MemWrite( &item->lockObtain.id, m_id );
MemWrite( &item->lockObtain.thread, thread );
MemWrite( &item->lockObtain.time, Profiler::GetTime() ); MemWrite( &item->lockObtain.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -320,13 +308,11 @@ public:
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockRelease ); MemWrite( &item->hdr.type, QueueType::LockRelease );
MemWrite( &item->lockRelease.id, m_id ); MemWrite( &item->lockRelease.id, m_id );
MemWrite( &item->lockRelease.thread, thread );
MemWrite( &item->lockRelease.time, Profiler::GetTime() ); MemWrite( &item->lockRelease.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -353,13 +339,11 @@ public:
if( ret ) if( ret )
{ {
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockObtain ); MemWrite( &item->hdr.type, QueueType::LockObtain );
MemWrite( &item->lockObtain.id, m_id ); MemWrite( &item->lockObtain.id, m_id );
MemWrite( &item->lockObtain.thread, thread );
MemWrite( &item->lockObtain.time, Profiler::GetTime() ); MemWrite( &item->lockObtain.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -385,7 +369,6 @@ public:
return; return;
} }
#endif #endif
const auto thread = GetThreadHandle();
{ {
Magic magic; Magic magic;
auto token = GetToken(); auto token = GetToken();
@ -393,7 +376,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockSharedWait ); MemWrite( &item->hdr.type, QueueType::LockSharedWait );
MemWrite( &item->lockWait.id, m_id ); MemWrite( &item->lockWait.id, m_id );
MemWrite( &item->lockWait.thread, thread );
MemWrite( &item->lockWait.time, Profiler::GetTime() ); MemWrite( &item->lockWait.time, Profiler::GetTime() );
MemWrite( &item->lockWait.type, LockType::SharedLockable ); MemWrite( &item->lockWait.type, LockType::SharedLockable );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
@ -408,7 +390,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockSharedObtain ); MemWrite( &item->hdr.type, QueueType::LockSharedObtain );
MemWrite( &item->lockObtain.id, m_id ); MemWrite( &item->lockObtain.id, m_id );
MemWrite( &item->lockObtain.thread, thread );
MemWrite( &item->lockObtain.time, Profiler::GetTime() ); MemWrite( &item->lockObtain.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -429,13 +410,11 @@ public:
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockSharedRelease ); MemWrite( &item->hdr.type, QueueType::LockSharedRelease );
MemWrite( &item->lockRelease.id, m_id ); MemWrite( &item->lockRelease.id, m_id );
MemWrite( &item->lockRelease.thread, thread );
MemWrite( &item->lockRelease.time, Profiler::GetTime() ); MemWrite( &item->lockRelease.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -462,13 +441,11 @@ public:
if( ret ) if( ret )
{ {
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockSharedObtain ); MemWrite( &item->hdr.type, QueueType::LockSharedObtain );
MemWrite( &item->lockObtain.id, m_id ); MemWrite( &item->lockObtain.id, m_id );
MemWrite( &item->lockObtain.thread, thread );
MemWrite( &item->lockObtain.time, Profiler::GetTime() ); MemWrite( &item->lockObtain.time, Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -490,13 +467,11 @@ public:
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::LockMark ); MemWrite( &item->hdr.type, QueueType::LockMark );
MemWrite( &item->lockMark.id, m_id ); MemWrite( &item->lockMark.id, m_id );
MemWrite( &item->lockMark.thread, thread );
MemWrite( &item->lockMark.srcloc, (uint64_t)srcloc ); MemWrite( &item->lockMark.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }

View File

@ -625,17 +625,15 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp )
{ {
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CrashReport ); MemWrite( &item->hdr.type, QueueType::CrashReport );
item->crashReport.time = Profiler::GetTime(); item->crashReport.time = Profiler::GetTime();
item->crashReport.thread = thread;
item->crashReport.text = (uint64_t)s_crashText; item->crashReport.text = (uint64_t)s_crashText;
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
GetProfiler().SendCallstack( 60, thread, "KiUserExceptionDispatcher" ); GetProfiler().SendCallstack( 60, "KiUserExceptionDispatcher" );
} }
HANDLE h = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 ); HANDLE h = CreateToolhelp32Snapshot( TH32CS_SNAPTHREAD, 0 );
@ -863,17 +861,15 @@ static void CrashHandler( int signal, siginfo_t* info, void* /*ucontext*/ )
{ {
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CrashReport ); MemWrite( &item->hdr.type, QueueType::CrashReport );
item->crashReport.time = Profiler::GetTime(); item->crashReport.time = Profiler::GetTime();
item->crashReport.thread = thread;
item->crashReport.text = (uint64_t)s_crashText; item->crashReport.text = (uint64_t)s_crashText;
tail.store( magic + 1, std::memory_order_release ); 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" ); DIR* dp = opendir( "/proc/self/task" );
@ -1700,23 +1696,24 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
{ {
uint64_t ptr; uint64_t ptr;
const auto idx = MemRead<uint8_t>( &item->hdr.idx ); const auto idx = MemRead<uint8_t>( &item->hdr.idx );
if( idx < (int)QueueType::Terminate )
{
switch( (QueueType)idx ) switch( (QueueType)idx )
{ {
case QueueType::ZoneText: case QueueType::ZoneText:
case QueueType::ZoneName: case QueueType::ZoneName:
MemWrite( &item->zoneText.thread, threadId );
ptr = MemRead<uint64_t>( &item->zoneText.text ); ptr = MemRead<uint64_t>( &item->zoneText.text );
SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); SendString( ptr, (const char*)ptr, QueueType::CustomStringData );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::Message: case QueueType::Message:
case QueueType::MessageColor: case QueueType::MessageColor:
MemWrite( &item->message.thread, threadId );
ptr = MemRead<uint64_t>( &item->message.text ); ptr = MemRead<uint64_t>( &item->message.text );
SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); SendString( ptr, (const char*)ptr, QueueType::CustomStringData );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::MessageAppInfo: case QueueType::MessageAppInfo:
MemWrite( &item->message.thread, threadId );
ptr = MemRead<uint64_t>( &item->message.text ); ptr = MemRead<uint64_t>( &item->message.text );
SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); SendString( ptr, (const char*)ptr, QueueType::CustomStringData );
#ifndef TRACY_ON_DEMAND #ifndef TRACY_ON_DEMAND
@ -1725,16 +1722,19 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
break; break;
case QueueType::ZoneBeginAllocSrcLoc: case QueueType::ZoneBeginAllocSrcLoc:
case QueueType::ZoneBeginAllocSrcLocCallstack: case QueueType::ZoneBeginAllocSrcLocCallstack:
MemWrite( &item->zoneBegin.thread, threadId );
ptr = MemRead<uint64_t>( &item->zoneBegin.srcloc ); ptr = MemRead<uint64_t>( &item->zoneBegin.srcloc );
SendSourceLocationPayload( ptr ); SendSourceLocationPayload( ptr );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::Callstack: case QueueType::Callstack:
MemWrite( &item->callstack.thread, threadId );
ptr = MemRead<uint64_t>( &item->callstack.ptr ); ptr = MemRead<uint64_t>( &item->callstack.ptr );
SendCallstackPayload( ptr ); SendCallstackPayload( ptr );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::CallstackAlloc: case QueueType::CallstackAlloc:
MemWrite( &item->callstackAlloc.thread, threadId );
ptr = MemRead<uint64_t>( &item->callstackAlloc.nativePtr ); ptr = MemRead<uint64_t>( &item->callstackAlloc.nativePtr );
CutCallstack( (void*)ptr, "lua_pcall" ); CutCallstack( (void*)ptr, "lua_pcall" );
SendCallstackPayload( ptr ); SendCallstackPayload( ptr );
@ -1753,10 +1753,40 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
} }
default: case QueueType::CrashReport:
assert( false ); 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; break;
}
} }
if( !AppendData( item, QueueDataSize[idx] ) ) return DequeueStatus::ConnectionLost; if( !AppendData( item, QueueDataSize[idx] ) ) return DequeueStatus::ConnectionLost;
item++; item++;
@ -2117,7 +2147,6 @@ void Profiler::CalibrateDelay()
auto& tail = ptoken->get_tail_index(); auto& tail = ptoken->get_tail_index();
auto item = ptoken->enqueue_begin( magic ); auto item = ptoken->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneBegin ); MemWrite( &item->hdr.type, QueueType::ZoneBegin );
MemWrite( &item->zoneBegin.thread, GetThreadHandle() );
#ifdef TRACY_RDTSCP_OPT #ifdef TRACY_RDTSCP_OPT
MemWrite( &item->zoneBegin.time, Profiler::GetTime( item->zoneBegin.cpu ) ); MemWrite( &item->zoneBegin.time, Profiler::GetTime( item->zoneBegin.cpu ) );
#else #else
@ -2133,7 +2162,6 @@ void Profiler::CalibrateDelay()
auto& tail = ptoken->get_tail_index(); auto& tail = ptoken->get_tail_index();
auto item = ptoken->enqueue_begin( magic ); auto item = ptoken->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneEnd ); MemWrite( &item->hdr.type, QueueType::ZoneEnd );
MemWrite( &item->zoneEnd.thread, uint64_t( 0 ) );
#ifdef TRACY_RDTSCP_OPT #ifdef TRACY_RDTSCP_OPT
MemWrite( &item->zoneEnd.time, GetTime( item->zoneEnd.cpu ) ); MemWrite( &item->zoneEnd.time, GetTime( item->zoneEnd.cpu ) );
#else #else
@ -2159,7 +2187,6 @@ void Profiler::CalibrateDelay()
auto& tail = ptoken->get_tail_index(); auto& tail = ptoken->get_tail_index();
auto item = ptoken->enqueue_begin( magic ); auto item = ptoken->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneBegin ); MemWrite( &item->hdr.type, QueueType::ZoneBegin );
MemWrite( &item->zoneBegin.thread, GetThreadHandle() );
#ifdef TRACY_RDTSCP_OPT #ifdef TRACY_RDTSCP_OPT
MemWrite( &item->zoneBegin.time, Profiler::GetTime( item->zoneBegin.cpu ) ); MemWrite( &item->zoneBegin.time, Profiler::GetTime( item->zoneBegin.cpu ) );
#else #else
@ -2175,7 +2202,6 @@ void Profiler::CalibrateDelay()
auto& tail = ptoken->get_tail_index(); auto& tail = ptoken->get_tail_index();
auto item = ptoken->enqueue_begin( magic ); auto item = ptoken->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneEnd ); MemWrite( &item->hdr.type, QueueType::ZoneEnd );
MemWrite( &item->zoneEnd.thread, uint64_t( 0 ) );
#ifdef TRACY_RDTSCP_OPT #ifdef TRACY_RDTSCP_OPT
MemWrite( &item->zoneEnd.time, GetTime( item->zoneEnd.cpu ) ); MemWrite( &item->zoneEnd.time, GetTime( item->zoneEnd.cpu ) );
#else #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 #ifdef TRACY_HAS_CALLSTACK
auto ptr = Callstack( depth ); 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 ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Callstack ); MemWrite( &item->hdr.type, QueueType::Callstack );
MemWrite( &item->callstack.ptr, ptr ); MemWrite( &item->callstack.ptr, ptr );
MemWrite( &item->callstack.thread, thread );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
#endif #endif
} }
@ -2298,7 +2323,6 @@ TracyCZoneCtx ___tracy_emit_zone_begin( const struct ___tracy_source_location_da
const auto id = tracy::GetProfiler().GetNextZoneId(); const auto id = tracy::GetProfiler().GetNextZoneId();
ctx.id = id; ctx.id = id;
const auto thread = tracy::GetThreadHandle();
#ifndef TRACY_NO_VERIFY #ifndef TRACY_NO_VERIFY
{ {
tracy::Magic magic; 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& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.thread, thread );
tracy::MemWrite( &item->zoneValidation.id, id ); tracy::MemWrite( &item->zoneValidation.id, id );
tail.store( magic + 1, std::memory_order_release ); 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.time, tracy::Profiler::GetTime( cpu ) );
tracy::MemWrite( &item->zoneBegin.cpu, cpu ); tracy::MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
tracy::MemWrite( &item->zoneBegin.thread, thread );
tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release ); 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(); const auto id = tracy::GetProfiler().GetNextZoneId();
ctx.id = id; ctx.id = id;
const auto thread = tracy::GetThreadHandle();
#ifndef TRACY_NO_VERIFY #ifndef TRACY_NO_VERIFY
{ {
tracy::Magic magic; 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& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.thread, thread );
tracy::MemWrite( &item->zoneValidation.id, id ); tracy::MemWrite( &item->zoneValidation.id, id );
tail.store( magic + 1, std::memory_order_release ); 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.time, tracy::Profiler::GetTime( cpu ) );
tracy::MemWrite( &item->zoneBegin.cpu, cpu ); tracy::MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
tracy::MemWrite( &item->zoneBegin.thread, thread );
tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
tracy::GetProfiler().SendCallstack( depth, thread ); tracy::GetProfiler().SendCallstack( depth );
return ctx; return ctx;
} }
void ___tracy_emit_zone_end( TracyCZoneCtx ctx ) void ___tracy_emit_zone_end( TracyCZoneCtx ctx )
{ {
if( !ctx.active ) return; if( !ctx.active ) return;
const auto thread = tracy::GetThreadHandle();
#ifndef TRACY_NO_VERIFY #ifndef TRACY_NO_VERIFY
{ {
tracy::Magic magic; tracy::Magic magic;
@ -2389,7 +2407,6 @@ void ___tracy_emit_zone_end( TracyCZoneCtx ctx )
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.thread, thread );
tracy::MemWrite( &item->zoneValidation.id, ctx.id ); tracy::MemWrite( &item->zoneValidation.id, ctx.id );
tail.store( magic + 1, std::memory_order_release ); 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.time, tracy::Profiler::GetTime( cpu ) );
tracy::MemWrite( &item->zoneEnd.cpu, cpu ); tracy::MemWrite( &item->zoneEnd.cpu, cpu );
#endif #endif
tracy::MemWrite( &item->zoneEnd.thread, thread );
tail.store( magic + 1, std::memory_order_release ); 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 ) void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* txt, size_t size )
{ {
if( !ctx.active ) return; if( !ctx.active ) return;
const auto thread = tracy::GetThreadHandle();
auto ptr = (char*)tracy::tracy_malloc( size+1 ); auto ptr = (char*)tracy::tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
ptr[size] = '\0'; 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& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.thread, thread );
tracy::MemWrite( &item->zoneValidation.id, ctx.id ); tracy::MemWrite( &item->zoneValidation.id, ctx.id );
tail.store( magic + 1, std::memory_order_release ); 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& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneText ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneText );
tracy::MemWrite( &item->zoneText.thread, thread );
tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr ); tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); 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 ) void ___tracy_emit_zone_name( TracyCZoneCtx ctx, const char* txt, size_t size )
{ {
if( !ctx.active ) return; if( !ctx.active ) return;
const auto thread = tracy::GetThreadHandle();
auto ptr = (char*)tracy::tracy_malloc( size+1 ); auto ptr = (char*)tracy::tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
ptr[size] = '\0'; 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& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.thread, thread );
tracy::MemWrite( &item->zoneValidation.id, ctx.id ); tracy::MemWrite( &item->zoneValidation.id, ctx.id );
tail.store( magic + 1, std::memory_order_release ); 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& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneName ); tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneName );
tracy::MemWrite( &item->zoneText.thread, thread );
tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr ); tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }

View File

@ -261,7 +261,6 @@ public:
if( !GetProfiler().IsConnected() ) return; if( !GetProfiler().IsConnected() ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -270,7 +269,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Message ); MemWrite( &item->hdr.type, QueueType::Message );
MemWrite( &item->message.time, GetTime() ); MemWrite( &item->message.time, GetTime() );
MemWrite( &item->message.thread, thread );
MemWrite( &item->message.text, (uint64_t)ptr ); MemWrite( &item->message.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -281,13 +279,11 @@ public:
if( !GetProfiler().IsConnected() ) return; if( !GetProfiler().IsConnected() ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::MessageLiteral ); MemWrite( &item->hdr.type, QueueType::MessageLiteral );
MemWrite( &item->message.time, GetTime() ); MemWrite( &item->message.time, GetTime() );
MemWrite( &item->message.thread, thread );
MemWrite( &item->message.text, (uint64_t)txt ); MemWrite( &item->message.text, (uint64_t)txt );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -298,7 +294,6 @@ public:
if( !GetProfiler().IsConnected() ) return; if( !GetProfiler().IsConnected() ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -307,7 +302,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::MessageColor ); MemWrite( &item->hdr.type, QueueType::MessageColor );
MemWrite( &item->messageColor.time, GetTime() ); MemWrite( &item->messageColor.time, GetTime() );
MemWrite( &item->messageColor.thread, thread );
MemWrite( &item->messageColor.text, (uint64_t)ptr ); MemWrite( &item->messageColor.text, (uint64_t)ptr );
MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) );
MemWrite( &item->messageColor.g, uint8_t( ( color >> 8 ) & 0xFF ) ); MemWrite( &item->messageColor.g, uint8_t( ( color >> 8 ) & 0xFF ) );
@ -321,13 +315,11 @@ public:
if( !GetProfiler().IsConnected() ) return; if( !GetProfiler().IsConnected() ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::MessageLiteralColor ); MemWrite( &item->hdr.type, QueueType::MessageLiteralColor );
MemWrite( &item->messageColor.time, GetTime() ); MemWrite( &item->messageColor.time, GetTime() );
MemWrite( &item->messageColor.thread, thread );
MemWrite( &item->messageColor.text, (uint64_t)txt ); MemWrite( &item->messageColor.text, (uint64_t)txt );
MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) );
MemWrite( &item->messageColor.g, uint8_t( ( color >> 8 ) & 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 ) static tracy_force_inline void MessageAppInfo( const char* txt, size_t size )
{ {
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -347,7 +338,6 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::MessageAppInfo ); MemWrite( &item->hdr.type, QueueType::MessageAppInfo );
MemWrite( &item->message.time, GetTime() ); MemWrite( &item->message.time, GetTime() );
MemWrite( &item->message.thread, thread );
MemWrite( &item->message.text, (uint64_t)ptr ); MemWrite( &item->message.text, (uint64_t)ptr );
#ifdef TRACY_ON_DEMAND #ifdef TRACY_ON_DEMAND
@ -423,7 +413,7 @@ public:
#endif #endif
} }
static tracy_force_inline void SendCallstack( int depth, uint64_t thread ) static tracy_force_inline void SendCallstack( int depth )
{ {
#ifdef TRACY_HAS_CALLSTACK #ifdef TRACY_HAS_CALLSTACK
auto ptr = Callstack( depth ); auto ptr = Callstack( depth );
@ -433,12 +423,11 @@ public:
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Callstack ); MemWrite( &item->hdr.type, QueueType::Callstack );
MemWrite( &item->callstack.ptr, ptr ); MemWrite( &item->callstack.ptr, ptr );
MemWrite( &item->callstack.thread, thread );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
#endif #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 void CutCallstack( void* callstack, const char* skipBefore );
static bool ShouldExit(); static bool ShouldExit();

View File

@ -25,7 +25,6 @@ public:
{ {
if( !m_active ) return; if( !m_active ) return;
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
@ -37,7 +36,6 @@ public:
MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneBegin.cpu, cpu ); MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
MemWrite( &item->zoneBegin.thread, thread );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -51,7 +49,6 @@ public:
#endif #endif
{ {
if( !m_active ) return; if( !m_active ) return;
const auto thread = GetThreadHandle();
Magic magic; Magic magic;
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
@ -64,11 +61,10 @@ public:
MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneBegin.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneBegin.cpu, cpu ); MemWrite( &item->zoneBegin.cpu, cpu );
#endif #endif
MemWrite( &item->zoneBegin.thread, thread );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc ); MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
GetProfiler().SendCallstack( depth, thread ); GetProfiler().SendCallstack( depth );
} }
tracy_force_inline ~ScopedZone() tracy_force_inline ~ScopedZone()
@ -78,7 +74,6 @@ public:
if( GetProfiler().ConnectionId() != m_connectionId ) return; if( GetProfiler().ConnectionId() != m_connectionId ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
@ -90,7 +85,6 @@ public:
MemWrite( &item->zoneEnd.time, Profiler::GetTime( cpu ) ); MemWrite( &item->zoneEnd.time, Profiler::GetTime( cpu ) );
MemWrite( &item->zoneEnd.cpu, cpu ); MemWrite( &item->zoneEnd.cpu, cpu );
#endif #endif
MemWrite( &item->zoneEnd.thread, thread );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -101,7 +95,6 @@ public:
if( GetProfiler().ConnectionId() != m_connectionId ) return; if( GetProfiler().ConnectionId() != m_connectionId ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -109,7 +102,6 @@ public:
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneText ); MemWrite( &item->hdr.type, QueueType::ZoneText );
MemWrite( &item->zoneText.thread, thread );
MemWrite( &item->zoneText.text, (uint64_t)ptr ); MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }
@ -121,7 +113,6 @@ public:
if( GetProfiler().ConnectionId() != m_connectionId ) return; if( GetProfiler().ConnectionId() != m_connectionId ) return;
#endif #endif
Magic magic; Magic magic;
const auto thread = GetThreadHandle();
auto token = GetToken(); auto token = GetToken();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size+1 );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
@ -129,7 +120,6 @@ public:
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic ); auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneName ); MemWrite( &item->hdr.type, QueueType::ZoneName );
MemWrite( &item->zoneText.thread, thread );
MemWrite( &item->zoneText.text, (uint64_t)ptr ); MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release ); tail.store( magic + 1, std::memory_order_release );
} }

View File

@ -384,9 +384,9 @@ static const size_t QueueDataSize[] = {
sizeof( QueueHeader ) + sizeof( QueueLockWait ), sizeof( QueueHeader ) + sizeof( QueueLockWait ),
sizeof( QueueHeader ) + sizeof( QueueLockObtain ), sizeof( QueueHeader ) + sizeof( QueueLockObtain ),
sizeof( QueueHeader ) + sizeof( QueueLockRelease ), sizeof( QueueHeader ) + sizeof( QueueLockRelease ),
sizeof( QueueHeader ) + sizeof( QueueLockWait ), sizeof( QueueHeader ) + sizeof( QueueLockWait ), // shared
sizeof( QueueHeader ) + sizeof( QueueLockObtain ), sizeof( QueueHeader ) + sizeof( QueueLockObtain ), // shared
sizeof( QueueHeader ) + sizeof( QueueLockRelease ), sizeof( QueueHeader ) + sizeof( QueueLockRelease ), // shared
sizeof( QueueHeader ) + sizeof( QueueLockMark ), sizeof( QueueHeader ) + sizeof( QueueLockMark ),
sizeof( QueueHeader ) + sizeof( QueuePlotData ), sizeof( QueueHeader ) + sizeof( QueuePlotData ),
sizeof( QueueHeader ) + sizeof( QueueMessage ), // literal sizeof( QueueHeader ) + sizeof( QueueMessage ), // literal