diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 07492fab..7a27d8fb 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -959,6 +959,8 @@ Profiler::Profiler() , m_lz4Buf( (char*)tracy_malloc( LZ4Size + sizeof( lz4sz_t ) ) ) , m_serialQueue( 1024*1024 ) , m_serialDequeue( 1024*1024 ) + , m_etc1Buf( nullptr ) + , m_etc1BufSize( 0 ) #ifdef TRACY_ON_DEMAND , m_isConnected( false ) , m_frameCount( 0 ) @@ -1033,6 +1035,7 @@ Profiler::~Profiler() tracy_free( m_lz4Buf ); tracy_free( m_itemBuf ); tracy_free( m_buffer ); + tracy_free( m_etc1Buf ); LZ4_freeStream( (LZ4_stream_t*)m_stream ); if( m_sock ) @@ -1457,11 +1460,14 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) const auto w = MemRead( &item->frameImage.w ); const auto h = MemRead( &item->frameImage.h ); const auto csz = w * h / 2; - auto c = (char*)tracy_malloc( csz ); - CompressImageEtc1( (const char*)ptr, c, w, h ); + if( csz > m_etc1BufSize ) + { + tracy_free( m_etc1Buf ); + m_etc1Buf = (char*)tracy_malloc( csz ); + } + CompressImageEtc1( (const char*)ptr, m_etc1Buf, w, h ); tracy_free( (void*)ptr ); - SendLongString( ptr, (const char*)c, csz, QueueType::FrameImageData ); - tracy_free( (void*)c ); + SendLongString( ptr, m_etc1Buf, csz, QueueType::FrameImageData ); break; } default: diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index 3018836f..8679104c 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -521,6 +521,9 @@ private: FastVector m_serialQueue, m_serialDequeue; TracyMutex m_serialLock; + char* m_etc1Buf; + size_t m_etc1BufSize; + #ifdef TRACY_ON_DEMAND std::atomic m_isConnected; std::atomic m_frameCount;