diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 54407ebd..c1478ad4 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -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 diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index 6f378d25..98c3579e 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -763,6 +763,7 @@ private: void AckServerQuery(); void AckSourceCodeNotAvailable(); + void AckSymbolCodeNotAvailable(); void CalibrateTimer(); void CalibrateDelay(); diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index d12301b7..27cb5501 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -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 diff --git a/server/TracyEventDebug.cpp b/server/TracyEventDebug.cpp index bb83232a..1a027b05 100644 --- a/server/TracyEventDebug.cpp +++ b/server/TracyEventDebug.cpp @@ -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 ); diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index d0057862..b61e9e2e 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -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;