From cea7cdd71612901fd80ed8858809b5943d7e1bae Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 2 Nov 2017 12:56:13 +0100 Subject: [PATCH] Don't create big buffers on stack. --- client/TracyProfiler.cpp | 13 +++++++------ client/TracyProfiler.hpp | 2 ++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 681394c3..686672eb 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -107,6 +107,8 @@ std::atomic init_order(104) s_threadNameData( nullptr ); static Profiler init_order(105) s_profiler; +enum { BulkSize = TargetFrameSize / QueueItemSize }; + Profiler::Profiler() : m_timeBegin( 0 ) , m_mainThread( GetThreadHandle() ) @@ -116,6 +118,7 @@ Profiler::Profiler() , m_stream( LZ4_createStream() ) , m_buffer( (char*)tracy_malloc( TargetFrameSize*3 ) ) , m_bufferOffset( 0 ) + , m_itemBuf( (QueueItem*)tracy_malloc( sizeof( QueueItem ) * BulkSize ) ) { assert( !s_instance ); s_instance = this; @@ -142,6 +145,7 @@ Profiler::~Profiler() s_thread->~Thread(); tracy_free( s_thread ); + tracy_free( m_itemBuf ); tracy_free( m_buffer ); LZ4_freeStream( m_stream ); @@ -160,8 +164,6 @@ bool Profiler::ShouldExit() return s_instance->m_shutdown.load( std::memory_order_relaxed ); } -enum { BulkSize = TargetFrameSize / QueueItemSize }; - void Profiler::Worker() { rpmalloc_thread_initialize(); @@ -246,16 +248,15 @@ void Profiler::Worker() Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) { - QueueItem item[BulkSize]; - const auto sz = s_queue.try_dequeue_bulk( token, item, BulkSize ); + const auto sz = s_queue.try_dequeue_bulk( token, m_itemBuf, BulkSize ); if( sz > 0 ) { auto buf = m_buffer + m_bufferOffset; auto ptr = buf; for( size_t i=0; i