From ce1f56ea0f3aacf9f8413cb3540c19c20b88b3ef Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Wed, 2 May 2018 17:46:09 +0200 Subject: [PATCH] Display zone memory statistics. Note that this information is incorrect, as it accounts for memory events in all threads. --- server/TracyView.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 69ef6b1e..d8a65ad0 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -2673,6 +2673,58 @@ void View::DrawZoneInfoWindow() ImGui::Text( "Execution time: %s", TimeToString( ztime ) ); ImGui::Text( "Without profiling: %s", TimeToString( ztime - m_worker.GetDelay() * dmul ) ); + auto& mem = m_worker.GetMemData(); + if( mem.plot ) + { + ImGui::Separator(); + + const auto& vec = mem.plot->data; + auto mit = std::lower_bound( vec.begin(), vec.end(), ev.start, [] ( const auto& l, const auto& r ) { return l.time < r; } ); + auto mend = std::upper_bound( mit, vec.end(), end, [] ( const auto& l, const auto& r ) { return l < r.time; } ); + + const auto dist = std::distance( mit, mend ); + if( dist == 0 ) + { + ImGui::Text( "No memory events." ); + } + else + { + ImGui::Text( "%s memory events.", RealToString( dist, true ) ); + + double change = 0; + double cAlloc = 0; + double cFree = 0; + uint64_t nAlloc = 0; + uint64_t nFree = 0; + + if( mit != vec.begin() ) --mit; + auto prev = mit->val; + ++mit; + while( mit != mend ) + { + double curr = mit->val; + change += curr - prev; + if( curr > prev ) + { + cAlloc += curr - prev; + nAlloc++; + } + else + { + cFree += prev - curr; + nFree++; + } + prev = curr; + ++mit; + } + + ImGui::Text( "%s allocs, %s frees.", RealToString( nAlloc, true ), RealToString( nFree, true ) ); + ImGui::Text( "Memory allocated: %s bytes", RealToString( cAlloc, true ) ); + ImGui::Text( "Memory freed: %s bytes", RealToString( cFree, true ) ); + ImGui::Text( "Overall change: %s bytes", RealToString( change, true ) ); + } + } + ImGui::Separator(); std::vector zoneTrace;