diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 5e3b57b0..37687134 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -294,6 +294,7 @@ void Profiler::Worker() } #ifdef TRACY_ON_DEMAND + ClearQueues( token ); m_isConnected.store( true, std::memory_order_relaxed ); #endif @@ -398,6 +399,17 @@ void Profiler::Worker() } } +void Profiler::ClearQueues( moodycamel::ConsumerToken& token ) +{ + // TODO analyse dropped items and free associated memory + + while( s_queue.try_dequeue_bulk( token, m_itemBuf, BulkSize ) > 0 ) {} + + std::lock_guard lock( m_serialLock ); + m_serialDequeue.clear(); + m_serialQueue.clear(); +} + Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) { const auto sz = s_queue.try_dequeue_bulk( token, m_itemBuf, BulkSize ); diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index ce2c5f1d..9ad722b1 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -300,6 +300,7 @@ private: static void LaunchWorker( void* ptr ) { ((Profiler*)ptr)->Worker(); } void Worker(); + void ClearQueues( moodycamel::ConsumerToken& token ); DequeueStatus Dequeue( moodycamel::ConsumerToken& token ); DequeueStatus DequeueSerial(); bool AppendData( const void* data, size_t len );