From 4f962d2fcccc5ac8d3bd6e53bb3618c325af57a3 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 10 Nov 2019 21:26:57 +0100 Subject: [PATCH] Add ZoneEvent re-use pool. --- server/TracyWorker.cpp | 23 +++++++++++++++++++---- server/TracyWorker.hpp | 3 +++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index fac32e51..f542fff4 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -3547,15 +3547,30 @@ void Worker::ProcessZoneBeginImpl( ZoneEvent* zone, const QueueZoneBegin& ev ) NewZone( zone, m_threadCtx ); } +ZoneEvent* Worker::AllocZoneEvent() +{ + ZoneEvent* ret; + if( m_zoneEventPool.empty() ) + { + ret = m_slab.Alloc(); + } + 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 ) { - auto zone = m_slab.AllocInit(); + auto zone = AllocZoneEvent(); ProcessZoneBeginImpl( zone, ev ); } void Worker::ProcessZoneBeginCallstack( const QueueZoneBegin& ev ) { - auto zone = m_slab.AllocInit(); + auto zone = AllocZoneEvent(); ProcessZoneBeginImpl( zone, ev ); auto& next = m_nextCallstack[m_threadCtx]; @@ -3585,13 +3600,13 @@ void Worker::ProcessZoneBeginAllocSrcLocImpl( ZoneEvent* zone, const QueueZoneBe void Worker::ProcessZoneBeginAllocSrcLoc( const QueueZoneBegin& ev ) { - auto zone = m_slab.AllocInit(); + auto zone = AllocZoneEvent(); ProcessZoneBeginAllocSrcLocImpl( zone, ev ); } void Worker::ProcessZoneBeginAllocSrcLocCallstack( const QueueZoneBegin& ev ) { - auto zone = m_slab.AllocInit(); + auto zone = AllocZoneEvent(); ProcessZoneBeginAllocSrcLocImpl( zone, ev ); auto& next = m_nextCallstack[m_threadCtx]; diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index c8d99647..127039f4 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -475,6 +475,7 @@ private: tracy_force_inline void ProcessThreadWakeup( const QueueThreadWakeup& 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 ProcessZoneBeginAllocSrcLocImpl( ZoneEvent* zone, const QueueZoneBegin& ev ); tracy_force_inline void ProcessGpuZoneBeginImpl( GpuEvent* zone, const QueueGpuZoneBegin& ev, bool serial ); @@ -700,6 +701,8 @@ private: int m_netWriteCnt = 0; std::mutex m_netWriteLock; std::condition_variable m_netWriteCv; + + Vector m_zoneEventPool; }; }