diff --git a/capture/src/capture.cpp b/capture/src/capture.cpp index de469c92..6aeb5c79 100644 --- a/capture/src/capture.cpp +++ b/capture/src/capture.cpp @@ -234,7 +234,7 @@ int main( int argc, char** argv ) AnsiPrintf( ANSI_YELLOW, "Tx: "); AnsiPrintf( ANSI_GREEN, "%s", tracy::MemSizeToString( netTotal ) ); printf( " | "); - AnsiPrintf( ANSI_RED ANSI_BOLD, "%s", tracy::MemSizeToString( tracy::memUsage ) ); + AnsiPrintf( ANSI_RED ANSI_BOLD, "%s", tracy::MemSizeToString( tracy::memUsage.load( std::memory_order_relaxed ) ) ); printf( " | "); AnsiPrintf( ANSI_RED, "%s", tracy::TimeToString( worker.GetLastTime() - firstTime ) ); fflush( stdout ); diff --git a/profiler/src/profiler/TracyView.cpp b/profiler/src/profiler/TracyView.cpp index fdbbfd84..a5104076 100644 --- a/profiler/src/profiler/TracyView.cpp +++ b/profiler/src/profiler/TracyView.cpp @@ -1012,12 +1012,13 @@ bool View::DrawImpl() targetLabelSize = ImGui::CalcTextSize( ICON_FA_MEMORY " 1234.56 MB (123.45 %%)" ).x; cx = ImGui::GetCursorPosX(); - ImGui::Text( ICON_FA_MEMORY " %s", MemSizeToString( memUsage ) ); + const auto mem = memUsage.load( std::memory_order_relaxed ); + ImGui::Text( ICON_FA_MEMORY " %s", MemSizeToString( mem ) ); TooltipIfHovered( "Profiler memory usage" ); if( m_totalMemory != 0 ) { ImGui::SameLine(); - const auto memUse = float( memUsage ) / m_totalMemory * 100; + const auto memUse = float( mem ) / m_totalMemory * 100; if( memUse < 80 ) { ImGui::TextDisabled( "(%.2f%%)", memUse ); diff --git a/server/TracyMemory.cpp b/server/TracyMemory.cpp index 4899a87c..c22e8043 100644 --- a/server/TracyMemory.cpp +++ b/server/TracyMemory.cpp @@ -3,6 +3,6 @@ namespace tracy { -size_t memUsage = 0; +std::atomic memUsage( 0 ); } diff --git a/server/TracyMemory.hpp b/server/TracyMemory.hpp index 50015472..01e468d7 100644 --- a/server/TracyMemory.hpp +++ b/server/TracyMemory.hpp @@ -1,12 +1,13 @@ #ifndef __TRACYMEMORY_HPP__ #define __TRACYMEMORY_HPP__ -#include +#include +#include namespace tracy { -extern size_t memUsage; +extern std::atomic memUsage; } diff --git a/server/TracySlab.hpp b/server/TracySlab.hpp index 26274c8c..f099286d 100644 --- a/server/TracySlab.hpp +++ b/server/TracySlab.hpp @@ -21,12 +21,12 @@ public: , m_buffer( { m_ptr } ) , m_usage( BlockSize ) { - memUsage += BlockSize; + memUsage.fetch_add( BlockSize, std::memory_order_relaxed ); } ~Slab() { - memUsage -= m_usage; + memUsage.fetch_sub( m_usage, std::memory_order_relaxed ); for( auto& v : m_buffer ) { delete[] v; @@ -105,7 +105,7 @@ public: } else { - memUsage += size; + memUsage.fetch_add( size, std::memory_order_relaxed ); m_usage += size; auto ret = new char[size]; m_buffer.emplace_back( ret ); @@ -117,7 +117,7 @@ public: { if( m_buffer.size() > 1 ) { - memUsage -= m_usage - BlockSize; + memUsage.fetch_sub( m_usage - BlockSize, std::memory_order_relaxed ); m_usage = BlockSize; for( int i=1; i ) ); @@ -254,7 +254,7 @@ public: cap |= cap >> 8; cap |= cap >> 16; cap = TracyCountBits( cap ); - memUsage += ( ( 1 << cap ) - Capacity() ) * sizeof( T ); + memUsage.fetch_add( ( ( 1 << cap ) - Capacity() ) * sizeof( T ), std::memory_order_relaxed ); m_capacity = cap; Realloc(); } @@ -291,13 +291,13 @@ private: if( m_ptr == nullptr ) { - memUsage += sizeof( T ); + memUsage.fetch_add( sizeof( T ), std::memory_order_relaxed ); m_ptr = (T*)malloc( sizeof( T ) ); m_capacity = 0; } else { - memUsage += Capacity() * sizeof( T ); + memUsage.fetch_add( Capacity() * sizeof( T ), std::memory_order_relaxed ); m_capacity++; Realloc(); }