mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-23 06:44:35 +00:00
Don't create big buffers on stack.
This commit is contained in:
parent
e31f8c2aed
commit
cea7cdd716
@ -107,6 +107,8 @@ std::atomic<ThreadNameData*> init_order(104) s_threadNameData( nullptr );
|
|||||||
static Profiler init_order(105) s_profiler;
|
static Profiler init_order(105) s_profiler;
|
||||||
|
|
||||||
|
|
||||||
|
enum { BulkSize = TargetFrameSize / QueueItemSize };
|
||||||
|
|
||||||
Profiler::Profiler()
|
Profiler::Profiler()
|
||||||
: m_timeBegin( 0 )
|
: m_timeBegin( 0 )
|
||||||
, m_mainThread( GetThreadHandle() )
|
, m_mainThread( GetThreadHandle() )
|
||||||
@ -116,6 +118,7 @@ Profiler::Profiler()
|
|||||||
, m_stream( LZ4_createStream() )
|
, m_stream( LZ4_createStream() )
|
||||||
, m_buffer( (char*)tracy_malloc( TargetFrameSize*3 ) )
|
, m_buffer( (char*)tracy_malloc( TargetFrameSize*3 ) )
|
||||||
, m_bufferOffset( 0 )
|
, m_bufferOffset( 0 )
|
||||||
|
, m_itemBuf( (QueueItem*)tracy_malloc( sizeof( QueueItem ) * BulkSize ) )
|
||||||
{
|
{
|
||||||
assert( !s_instance );
|
assert( !s_instance );
|
||||||
s_instance = this;
|
s_instance = this;
|
||||||
@ -142,6 +145,7 @@ Profiler::~Profiler()
|
|||||||
s_thread->~Thread();
|
s_thread->~Thread();
|
||||||
tracy_free( s_thread );
|
tracy_free( s_thread );
|
||||||
|
|
||||||
|
tracy_free( m_itemBuf );
|
||||||
tracy_free( m_buffer );
|
tracy_free( m_buffer );
|
||||||
LZ4_freeStream( m_stream );
|
LZ4_freeStream( m_stream );
|
||||||
|
|
||||||
@ -160,8 +164,6 @@ bool Profiler::ShouldExit()
|
|||||||
return s_instance->m_shutdown.load( std::memory_order_relaxed );
|
return s_instance->m_shutdown.load( std::memory_order_relaxed );
|
||||||
}
|
}
|
||||||
|
|
||||||
enum { BulkSize = TargetFrameSize / QueueItemSize };
|
|
||||||
|
|
||||||
void Profiler::Worker()
|
void Profiler::Worker()
|
||||||
{
|
{
|
||||||
rpmalloc_thread_initialize();
|
rpmalloc_thread_initialize();
|
||||||
@ -246,16 +248,15 @@ void Profiler::Worker()
|
|||||||
|
|
||||||
Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
|
Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
|
||||||
{
|
{
|
||||||
QueueItem item[BulkSize];
|
const auto sz = s_queue.try_dequeue_bulk( token, m_itemBuf, BulkSize );
|
||||||
const auto sz = s_queue.try_dequeue_bulk( token, item, BulkSize );
|
|
||||||
if( sz > 0 )
|
if( sz > 0 )
|
||||||
{
|
{
|
||||||
auto buf = m_buffer + m_bufferOffset;
|
auto buf = m_buffer + m_bufferOffset;
|
||||||
auto ptr = buf;
|
auto ptr = buf;
|
||||||
for( size_t i=0; i<sz; i++ )
|
for( size_t i=0; i<sz; i++ )
|
||||||
{
|
{
|
||||||
const auto dsz = QueueDataSize[item[i].hdr.idx];
|
const auto dsz = QueueDataSize[m_itemBuf[i].hdr.idx];
|
||||||
memcpy( ptr, item+i, dsz );
|
memcpy( ptr, m_itemBuf+i, dsz );
|
||||||
ptr += dsz;
|
ptr += dsz;
|
||||||
}
|
}
|
||||||
if( !SendData( buf, ptr - buf ) ) return ConnectionLost;
|
if( !SendData( buf, ptr - buf ) ) return ConnectionLost;
|
||||||
|
@ -208,6 +208,8 @@ private:
|
|||||||
LZ4_stream_t* m_stream;
|
LZ4_stream_t* m_stream;
|
||||||
char* m_buffer;
|
char* m_buffer;
|
||||||
int m_bufferOffset;
|
int m_bufferOffset;
|
||||||
|
|
||||||
|
QueueItem* m_itemBuf;
|
||||||
};
|
};
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user