1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 04:23:51 +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] );
}
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 msg;
@ -3103,7 +3111,7 @@ void Profiler::QueueExternalName( uint64_t ptr )
void Profiler::QueueKernelCode( uint64_t symbol, uint32_t size )
{
assert( symbol >> 63 != 0 );
AckServerQuery();
AckSymbolCodeNotAvailable();
}
#ifdef TRACY_HAS_CALLSTACK
@ -3677,7 +3685,7 @@ void Profiler::HandleSymbolCodeQuery( uint64_t symbol, uint32_t size )
// but not readable.
if( !EnsureReadable( symbol ) )
{
AckServerQuery();
AckSymbolCodeNotAvailable();
return;
}
#endif

View File

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

View File

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

View File

@ -282,6 +282,9 @@ void EventDebug( const QueueItem& ev )
case QueueType::AckSourceCodeNotAvailable:
fprintf( f, "ev %i (AckSourceCodeNotAvailable)\n", ev.hdr.idx );
break;
case QueueType::AckSymbolCodeNotAvailable:
fprintf( f, "ev %i (AckSymbolCodeNotAvailable)\n", ev.hdr.idx );
break;
case QueueType::CpuTopology:
fprintf( f, "ev %i (CpuTopology)\n", ev.hdr.idx );
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::AckServerQueryNoop:
case QueueType::AckSourceCodeNotAvailable:
case QueueType::AckSymbolCodeNotAvailable:
m_serverQuerySpaceLeft++;
break;
default:
@ -4835,6 +4836,10 @@ bool Worker::Process( const QueueItem& ev )
m_sourceCodeQuery.erase( m_sourceCodeQuery.begin() );
m_serverQuerySpaceLeft++;
break;
case QueueType::AckSymbolCodeNotAvailable:
m_pendingSymbolCode--;
m_serverQuerySpaceLeft++;
break;
case QueueType::CpuTopology:
ProcessCpuTopology( ev.cpuTopology );
break;