diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 269dc53d..16cdc31d 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -402,10 +402,16 @@ bool View::DrawImpl() } if( !m_userData.Valid() ) m_userData.Init( m_worker.GetCaptureProgram().c_str(), m_worker.GetCaptureTime() ); - if( m_saveThreadState.load( std::memory_order_relaxed ) == SaveThreadState::NeedsJoin ) + if( m_saveThreadState.load( std::memory_order_acquire ) == SaveThreadState::NeedsJoin ) { m_saveThread.join(); - m_saveThreadState.store( SaveThreadState::Inert, std::memory_order_relaxed ); + m_saveThreadState.store( SaveThreadState::Inert, std::memory_order_release ); + const auto src = m_srcFileBytes.load( std::memory_order_relaxed ); + const auto dst = m_dstFileBytes.load( std::memory_order_relaxed ); + m_notificationTime = 4; + char buf[1024]; + sprintf( buf, "Trace size %s (%.2f%% ratio)", MemSizeToString( dst ), 100.f * dst / src ); + m_notificationText = buf; } const auto& io = ImGui::GetIO(); @@ -1013,7 +1019,11 @@ bool View::DrawConnection() m_saveThread = std::thread( [this, f{std::move( f )}] { std::shared_lock lock( m_worker.GetDataLock() ); m_worker.Write( *f ); - m_saveThreadState.store( SaveThreadState::NeedsJoin, std::memory_order_relaxed ); + f->Finish(); + const auto stats = f->GetCompressionStatistics(); + m_srcFileBytes.store( stats.first, std::memory_order_relaxed ); + m_dstFileBytes.store( stats.second, std::memory_order_relaxed ); + m_saveThreadState.store( SaveThreadState::NeedsJoin, std::memory_order_release ); } ); } } diff --git a/server/TracyView.hpp b/server/TracyView.hpp index d812849f..98bbf40f 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -391,6 +391,8 @@ private: std::atomic m_saveThreadState { SaveThreadState::Inert }; std::thread m_saveThread; + std::atomic m_srcFileBytes { 0 }; + std::atomic m_dstFileBytes { 0 }; void* m_frameTexture = nullptr; const void* m_frameTexturePtr = nullptr;