1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Hide async queue setup/commit behind macros.

This commit is contained in:
Bartosz Taudul
2020-01-19 15:06:11 +01:00
parent 77a6039e54
commit 55d03cb03e
7 changed files with 154 additions and 402 deletions
+52 -154
View File
@@ -587,14 +587,10 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp )
}
{
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CrashReport );
TracyLfqPrepare( QueueType::CrashReport );
item->crashReport.time = Profiler::GetTime();
item->crashReport.text = (uint64_t)s_crashText;
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
GetProfiler().SendCallstack( 60, "KiUserExceptionDispatcher" );
}
@@ -628,12 +624,8 @@ LONG WINAPI CrashFilter( PEXCEPTION_POINTERS pExp )
CloseHandle( h );
{
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Crash );
tail.store( magic + 1, std::memory_order_release );
TracyLfqPrepare( QueueType::Crash );
TracyLfqCommit;
}
std::this_thread::sleep_for( std::chrono::milliseconds( 500 ) );
@@ -823,14 +815,10 @@ static void CrashHandler( int signal, siginfo_t* info, void* /*ucontext*/ )
}
{
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CrashReport );
TracyLfqPrepare( QueueType::CrashReport );
item->crashReport.time = Profiler::GetTime();
item->crashReport.text = (uint64_t)s_crashText;
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
GetProfiler().SendCallstack( 60, "__kernel_rt_sigreturn" );
}
@@ -853,12 +841,8 @@ static void CrashHandler( int signal, siginfo_t* info, void* /*ucontext*/ )
closedir( dp );
{
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Crash );
tail.store( magic + 1, std::memory_order_release );
TracyLfqPrepare( QueueType::Crash );
TracyLfqCommit;
}
std::this_thread::sleep_for( std::chrono::milliseconds( 500 ) );
@@ -1565,18 +1549,14 @@ void Profiler::CompressWorker()
CompressImageDxt1( (const char*)fi->image, etc1buf, w, h );
tracy_free( fi->image );
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::FrameImage );
TracyLfqPrepare( QueueType::FrameImage );
MemWrite( &item->frameImage.image, (uint64_t)etc1buf );
MemWrite( &item->frameImage.frame, fi->frame );
MemWrite( &item->frameImage.w, w );
MemWrite( &item->frameImage.h, h );
uint8_t flip = fi->flip;
MemWrite( &item->frameImage.flip, flip );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
fi++;
}
@@ -2413,21 +2393,15 @@ void Profiler::CalibrateDelay()
for( int i=0; i<Iterations; i++ )
{
{
Magic magic;
auto& tail = ptoken->get_tail_index();
auto item = ptoken->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneBegin );
TracyLfqPrepare( QueueType::ZoneBegin );
MemWrite( &item->zoneBegin.time, Profiler::GetTime() );
MemWrite( &item->zoneBegin.srcloc, (uint64_t)&__tracy_source_location );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
}
{
Magic magic;
auto& tail = ptoken->get_tail_index();
auto item = ptoken->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::ZoneEnd );
TracyLfqPrepare( QueueType::ZoneEnd );
MemWrite( &item->zoneEnd.time, GetTime() );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
}
}
const auto t1 = GetTime();
@@ -2522,15 +2496,11 @@ void Profiler::ReportTopology()
idx++;
}
Magic magic;
auto token = GetToken();
for( uint32_t i=0; i<numcpus; i++ )
{
auto& data = cpuData[i];
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CpuTopology );
TracyLfqPrepare( QueueType::CpuTopology );
MemWrite( &item->cpuTopology.package, data.package );
MemWrite( &item->cpuTopology.core, data.core );
MemWrite( &item->cpuTopology.thread, data.thread );
@@ -2539,7 +2509,7 @@ void Profiler::ReportTopology()
DeferItem( *item );
#endif
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
}
tracy_free( cpuData );
@@ -2571,15 +2541,11 @@ void Profiler::ReportTopology()
cpuData[i].core = uint32_t( atoi( buf ) );
}
Magic magic;
auto token = GetToken();
for( uint32_t i=0; i<numcpus; i++ )
{
auto& data = cpuData[i];
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::CpuTopology );
TracyLfqPrepare( QueueType::CpuTopology );
MemWrite( &item->cpuTopology.package, data.package );
MemWrite( &item->cpuTopology.core, data.core );
MemWrite( &item->cpuTopology.thread, data.thread );
@@ -2588,7 +2554,7 @@ void Profiler::ReportTopology()
DeferItem( *item );
#endif
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
}
tracy_free( cpuData );
@@ -2602,13 +2568,9 @@ void Profiler::SendCallstack( int depth, const char* skipBefore )
auto ptr = Callstack( depth );
CutCallstack( ptr, skipBefore );
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::Callstack );
TracyLfqPrepare( QueueType::Callstack );
MemWrite( &item->callstack.ptr, ptr );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
#endif
}
@@ -2649,14 +2611,10 @@ void Profiler::ProcessSysTime()
{
m_sysTimeLast = t;
Magic magic;
auto token = GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
MemWrite( &item->hdr.type, QueueType::SysTimeReport );
TracyLfqPrepare( QueueType::SysTimeReport );
MemWrite( &item->sysTime.time, GetTime() );
MemWrite( &item->sysTime.sysTime, sysTime );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
}
}
}
@@ -2664,11 +2622,7 @@ void Profiler::ProcessSysTime()
void Profiler::ParameterSetup( uint32_t idx, const char* name, bool isBool, int32_t val )
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ParamSetup );
TracyLfqPrepare( QueueType::ParamSetup );
tracy::MemWrite( &item->paramSetup.idx, idx );
tracy::MemWrite( &item->paramSetup.name, (uint64_t)name );
tracy::MemWrite( &item->paramSetup.isBool, (uint8_t)isBool );
@@ -2678,7 +2632,7 @@ void Profiler::ParameterSetup( uint32_t idx, const char* name, bool isBool, int3
GetProfiler().DeferItem( *item );
#endif
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommit;
}
void Profiler::HandleParameter( uint64_t payload )
@@ -2709,24 +2663,16 @@ TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin( const struct ___tracy_source_l
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneBegin );
TracyLfqPrepareC( tracy::QueueType::ZoneBegin );
tracy::MemWrite( &item->zoneBegin.time, tracy::Profiler::GetTime() );
tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
return ctx;
}
@@ -2745,24 +2691,16 @@ TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin_callstack( const struct ___trac
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneBeginCallstack );
TracyLfqPrepareC( tracy::QueueType::ZoneBeginCallstack );
tracy::MemWrite( &item->zoneBegin.time, tracy::Profiler::GetTime() );
tracy::MemWrite( &item->zoneBegin.srcloc, (uint64_t)srcloc );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
tracy::GetProfiler().SendCallstack( depth );
@@ -2787,24 +2725,16 @@ TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin_alloc( uint64_t srcloc, int act
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneBeginAllocSrcLoc );
TracyLfqPrepareC( tracy::QueueType::ZoneBeginAllocSrcLoc );
tracy::MemWrite( &item->zoneBegin.time, tracy::Profiler::GetTime() );
tracy::MemWrite( &item->zoneBegin.srcloc, srcloc );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
return ctx;
}
@@ -2827,24 +2757,16 @@ TRACY_API TracyCZoneCtx ___tracy_emit_zone_begin_alloc_callstack( uint64_t srclo
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneBeginAllocSrcLocCallstack );
TracyLfqPrepareC( tracy::QueueType::ZoneBeginAllocSrcLocCallstack );
tracy::MemWrite( &item->zoneBegin.time, tracy::Profiler::GetTime() );
tracy::MemWrite( &item->zoneBegin.srcloc, srcloc );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
tracy::GetProfiler().SendCallstack( depth );
@@ -2856,23 +2778,15 @@ TRACY_API void ___tracy_emit_zone_end( TracyCZoneCtx ctx )
if( !ctx.active ) return;
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, ctx.id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneEnd );
TracyLfqPrepareC( tracy::QueueType::ZoneEnd );
tracy::MemWrite( &item->zoneEnd.time, tracy::Profiler::GetTime() );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
}
@@ -2884,23 +2798,15 @@ TRACY_API void ___tracy_emit_zone_text( TracyCZoneCtx ctx, const char* txt, size
ptr[size] = '\0';
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, ctx.id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneText );
TracyLfqPrepareC( tracy::QueueType::ZoneText );
tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
}
@@ -2912,23 +2818,15 @@ TRACY_API void ___tracy_emit_zone_name( TracyCZoneCtx ctx, const char* txt, size
ptr[size] = '\0';
#ifndef TRACY_NO_VERIFY
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneValidation );
TracyLfqPrepareC( tracy::QueueType::ZoneValidation );
tracy::MemWrite( &item->zoneValidation.id, ctx.id );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
#endif
{
tracy::Magic magic;
auto token = tracy::GetToken();
auto& tail = token->get_tail_index();
auto item = token->enqueue_begin( magic );
tracy::MemWrite( &item->hdr.type, tracy::QueueType::ZoneName );
TracyLfqPrepareC( tracy::QueueType::ZoneName );
tracy::MemWrite( &item->zoneText.text, (uint64_t)ptr );
tail.store( magic + 1, std::memory_order_release );
TracyLfqCommitC;
}
}