1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Add ZoneEvent re-use pool.

This commit is contained in:
Bartosz Taudul 2019-11-10 21:26:57 +01:00
parent 85ae52b725
commit 4f962d2fcc
2 changed files with 22 additions and 4 deletions

View File

@ -3547,15 +3547,30 @@ void Worker::ProcessZoneBeginImpl( ZoneEvent* zone, const QueueZoneBegin& ev )
NewZone( zone, m_threadCtx ); NewZone( zone, m_threadCtx );
} }
ZoneEvent* Worker::AllocZoneEvent()
{
ZoneEvent* ret;
if( m_zoneEventPool.empty() )
{
ret = m_slab.Alloc<ZoneEvent>();
}
else
{
ret = m_zoneEventPool.back_and_pop();
}
memset( &ret->text, 0, sizeof( ZoneEvent::text ) + sizeof( ZoneEvent::callstack ) + sizeof( ZoneEvent::name ) );
return ret;
}
void Worker::ProcessZoneBegin( const QueueZoneBegin& ev ) void Worker::ProcessZoneBegin( const QueueZoneBegin& ev )
{ {
auto zone = m_slab.AllocInit<ZoneEvent>(); auto zone = AllocZoneEvent();
ProcessZoneBeginImpl( zone, ev ); ProcessZoneBeginImpl( zone, ev );
} }
void Worker::ProcessZoneBeginCallstack( const QueueZoneBegin& ev ) void Worker::ProcessZoneBeginCallstack( const QueueZoneBegin& ev )
{ {
auto zone = m_slab.AllocInit<ZoneEvent>(); auto zone = AllocZoneEvent();
ProcessZoneBeginImpl( zone, ev ); ProcessZoneBeginImpl( zone, ev );
auto& next = m_nextCallstack[m_threadCtx]; auto& next = m_nextCallstack[m_threadCtx];
@ -3585,13 +3600,13 @@ void Worker::ProcessZoneBeginAllocSrcLocImpl( ZoneEvent* zone, const QueueZoneBe
void Worker::ProcessZoneBeginAllocSrcLoc( const QueueZoneBegin& ev ) void Worker::ProcessZoneBeginAllocSrcLoc( const QueueZoneBegin& ev )
{ {
auto zone = m_slab.AllocInit<ZoneEvent>(); auto zone = AllocZoneEvent();
ProcessZoneBeginAllocSrcLocImpl( zone, ev ); ProcessZoneBeginAllocSrcLocImpl( zone, ev );
} }
void Worker::ProcessZoneBeginAllocSrcLocCallstack( const QueueZoneBegin& ev ) void Worker::ProcessZoneBeginAllocSrcLocCallstack( const QueueZoneBegin& ev )
{ {
auto zone = m_slab.AllocInit<ZoneEvent>(); auto zone = AllocZoneEvent();
ProcessZoneBeginAllocSrcLocImpl( zone, ev ); ProcessZoneBeginAllocSrcLocImpl( zone, ev );
auto& next = m_nextCallstack[m_threadCtx]; auto& next = m_nextCallstack[m_threadCtx];

View File

@ -475,6 +475,7 @@ private:
tracy_force_inline void ProcessThreadWakeup( const QueueThreadWakeup& ev ); tracy_force_inline void ProcessThreadWakeup( const QueueThreadWakeup& ev );
tracy_force_inline void ProcessTidToPid( const QueueTidToPid& ev ); tracy_force_inline void ProcessTidToPid( const QueueTidToPid& ev );
tracy_force_inline ZoneEvent* AllocZoneEvent();
tracy_force_inline void ProcessZoneBeginImpl( ZoneEvent* zone, const QueueZoneBegin& ev ); tracy_force_inline void ProcessZoneBeginImpl( ZoneEvent* zone, const QueueZoneBegin& ev );
tracy_force_inline void ProcessZoneBeginAllocSrcLocImpl( ZoneEvent* zone, const QueueZoneBegin& ev ); tracy_force_inline void ProcessZoneBeginAllocSrcLocImpl( ZoneEvent* zone, const QueueZoneBegin& ev );
tracy_force_inline void ProcessGpuZoneBeginImpl( GpuEvent* zone, const QueueGpuZoneBegin& ev, bool serial ); tracy_force_inline void ProcessGpuZoneBeginImpl( GpuEvent* zone, const QueueGpuZoneBegin& ev, bool serial );
@ -700,6 +701,8 @@ private:
int m_netWriteCnt = 0; int m_netWriteCnt = 0;
std::mutex m_netWriteLock; std::mutex m_netWriteLock;
std::condition_variable m_netWriteCv; std::condition_variable m_netWriteCv;
Vector<ZoneEvent*> m_zoneEventPool;
}; };
} }