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

Properly acknowledge unavailable symbol code.

This commit is contained in:
Bartosz Taudul 2021-11-25 22:44:56 +01:00
parent abdd6020ba
commit 4bde9022e1
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
5 changed files with 21 additions and 2 deletions

View File

@ -684,6 +684,14 @@ void Profiler::AckSourceCodeNotAvailable()
AppendDataUnsafe( &item, QueueDataSize[(int)QueueType::AckSourceCodeNotAvailable] ); AppendDataUnsafe( &item, QueueDataSize[(int)QueueType::AckSourceCodeNotAvailable] );
} }
void Profiler::AckSymbolCodeNotAvailable()
{
QueueItem item;
MemWrite( &item.hdr.type, QueueType::AckSymbolCodeNotAvailable );
NeedDataSize( QueueDataSize[(int)QueueType::AckSymbolCodeNotAvailable] );
AppendDataUnsafe( &item, QueueDataSize[(int)QueueType::AckSymbolCodeNotAvailable] );
}
static BroadcastMessage& GetBroadcastMessage( const char* procname, size_t pnsz, int& len, int port ) static BroadcastMessage& GetBroadcastMessage( const char* procname, size_t pnsz, int& len, int port )
{ {
static BroadcastMessage msg; static BroadcastMessage msg;
@ -3103,7 +3111,7 @@ void Profiler::QueueExternalName( uint64_t ptr )
void Profiler::QueueKernelCode( uint64_t symbol, uint32_t size ) void Profiler::QueueKernelCode( uint64_t symbol, uint32_t size )
{ {
assert( symbol >> 63 != 0 ); assert( symbol >> 63 != 0 );
AckServerQuery(); AckSymbolCodeNotAvailable();
} }
#ifdef TRACY_HAS_CALLSTACK #ifdef TRACY_HAS_CALLSTACK
@ -3677,7 +3685,7 @@ void Profiler::HandleSymbolCodeQuery( uint64_t symbol, uint32_t size )
// but not readable. // but not readable.
if( !EnsureReadable( symbol ) ) if( !EnsureReadable( symbol ) )
{ {
AckServerQuery(); AckSymbolCodeNotAvailable();
return; return;
} }
#endif #endif

View File

@ -763,6 +763,7 @@ private:
void AckServerQuery(); void AckServerQuery();
void AckSourceCodeNotAvailable(); void AckSourceCodeNotAvailable();
void AckSymbolCodeNotAvailable();
void CalibrateTimer(); void CalibrateTimer();
void CalibrateDelay(); void CalibrateDelay();

View File

@ -96,6 +96,7 @@ enum class QueueType : uint8_t
ParamSetup, ParamSetup,
AckServerQueryNoop, AckServerQueryNoop,
AckSourceCodeNotAvailable, AckSourceCodeNotAvailable,
AckSymbolCodeNotAvailable,
CpuTopology, CpuTopology,
SingleStringData, SingleStringData,
SecondStringData, SecondStringData,
@ -816,6 +817,7 @@ static constexpr size_t QueueDataSize[] = {
sizeof( QueueHeader ) + sizeof( QueueParamSetup ), sizeof( QueueHeader ) + sizeof( QueueParamSetup ),
sizeof( QueueHeader ), // server query acknowledgement sizeof( QueueHeader ), // server query acknowledgement
sizeof( QueueHeader ), // source code not available sizeof( QueueHeader ), // source code not available
sizeof( QueueHeader ), // symbol code not available
sizeof( QueueHeader ) + sizeof( QueueCpuTopology ), sizeof( QueueHeader ) + sizeof( QueueCpuTopology ),
sizeof( QueueHeader ), // single string data sizeof( QueueHeader ), // single string data
sizeof( QueueHeader ), // second string data sizeof( QueueHeader ), // second string data

View File

@ -282,6 +282,9 @@ void EventDebug( const QueueItem& ev )
case QueueType::AckSourceCodeNotAvailable: case QueueType::AckSourceCodeNotAvailable:
fprintf( f, "ev %i (AckSourceCodeNotAvailable)\n", ev.hdr.idx ); fprintf( f, "ev %i (AckSourceCodeNotAvailable)\n", ev.hdr.idx );
break; break;
case QueueType::AckSymbolCodeNotAvailable:
fprintf( f, "ev %i (AckSymbolCodeNotAvailable)\n", ev.hdr.idx );
break;
case QueueType::CpuTopology: case QueueType::CpuTopology:
fprintf( f, "ev %i (CpuTopology)\n", ev.hdr.idx ); fprintf( f, "ev %i (CpuTopology)\n", ev.hdr.idx );
fprintf( f, "\tpackage = %" PRIu32 "\n", ev.cpuTopology.package ); fprintf( f, "\tpackage = %" PRIu32 "\n", ev.cpuTopology.package );

View File

@ -3374,6 +3374,7 @@ void Worker::DispatchFailure( const QueueItem& ev, const char*& ptr )
case QueueType::CodeInformation: case QueueType::CodeInformation:
case QueueType::AckServerQueryNoop: case QueueType::AckServerQueryNoop:
case QueueType::AckSourceCodeNotAvailable: case QueueType::AckSourceCodeNotAvailable:
case QueueType::AckSymbolCodeNotAvailable:
m_serverQuerySpaceLeft++; m_serverQuerySpaceLeft++;
break; break;
default: default:
@ -4835,6 +4836,10 @@ bool Worker::Process( const QueueItem& ev )
m_sourceCodeQuery.erase( m_sourceCodeQuery.begin() ); m_sourceCodeQuery.erase( m_sourceCodeQuery.begin() );
m_serverQuerySpaceLeft++; m_serverQuerySpaceLeft++;
break; break;
case QueueType::AckSymbolCodeNotAvailable:
m_pendingSymbolCode--;
m_serverQuerySpaceLeft++;
break;
case QueueType::CpuTopology: case QueueType::CpuTopology:
ProcessCpuTopology( ev.cpuTopology ); ProcessCpuTopology( ev.cpuTopology );
break; break;