mirror of
https://github.com/wolfpld/tracy
synced 2025-05-11 21:53:55 +00:00
Free memory associated with cleared queue items.
This commit is contained in:
parent
ef73979fb9
commit
c2659473fd
@ -407,14 +407,55 @@ void Profiler::Worker()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void FreeAssociatedMemory( const QueueItem& item )
|
||||||
|
{
|
||||||
|
if( item.hdr.idx >= (int)QueueType::Terminate ) return;
|
||||||
|
|
||||||
|
uint64_t ptr;
|
||||||
|
switch( item.hdr.type )
|
||||||
|
{
|
||||||
|
case QueueType::ZoneText:
|
||||||
|
case QueueType::ZoneName:
|
||||||
|
ptr = MemRead<uint64_t>( &item.zoneText.text );
|
||||||
|
tracy_free( (void*)ptr );
|
||||||
|
break;
|
||||||
|
case QueueType::Message:
|
||||||
|
ptr = MemRead<uint64_t>( &item.message.text );
|
||||||
|
tracy_free( (void*)ptr );
|
||||||
|
break;
|
||||||
|
case QueueType::ZoneBeginAllocSrcLoc:
|
||||||
|
ptr = MemRead<uint64_t>( &item.zoneBegin.srcloc );
|
||||||
|
tracy_free( (void*)ptr );
|
||||||
|
break;
|
||||||
|
case QueueType::CallstackMemory:
|
||||||
|
ptr = MemRead<uint64_t>( &item.callstackMemory.ptr );
|
||||||
|
tracy_free( (void*)ptr );
|
||||||
|
break;
|
||||||
|
case QueueType::Callstack:
|
||||||
|
ptr = MemRead<uint64_t>( &item.callstack.ptr );
|
||||||
|
tracy_free( (void*)ptr );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
assert( false );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Profiler::ClearQueues( moodycamel::ConsumerToken& token )
|
void Profiler::ClearQueues( moodycamel::ConsumerToken& token )
|
||||||
{
|
{
|
||||||
// TODO analyse dropped items and free associated memory
|
for(;;)
|
||||||
|
{
|
||||||
while( s_queue.try_dequeue_bulk( token, m_itemBuf, BulkSize ) > 0 ) {}
|
const auto sz = s_queue.try_dequeue_bulk( token, m_itemBuf, BulkSize );
|
||||||
|
if( sz == 0 ) break;
|
||||||
|
for( size_t i=0; i<sz; i++ ) FreeAssociatedMemory( m_itemBuf[i] );
|
||||||
|
}
|
||||||
|
|
||||||
std::lock_guard<NonRecursiveBenaphore> lock( m_serialLock );
|
std::lock_guard<NonRecursiveBenaphore> lock( m_serialLock );
|
||||||
|
|
||||||
|
for( auto& v : m_serialDequeue ) FreeAssociatedMemory( v );
|
||||||
m_serialDequeue.clear();
|
m_serialDequeue.clear();
|
||||||
|
|
||||||
|
for( auto& v : m_serialQueue ) FreeAssociatedMemory( v );
|
||||||
m_serialQueue.clear();
|
m_serialQueue.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user