From a35f8a738de35658dda31c40e5bf24201ba92c49 Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Wed, 24 Jun 2026 19:21:40 +0200 Subject: [PATCH] Display standard deviation in frame statistics. --- profiler/src/profiler/TracyView.hpp | 2 ++ .../profiler/TracyView_FrameStatistics.cpp | 24 ++++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/profiler/src/profiler/TracyView.hpp b/profiler/src/profiler/TracyView.hpp index f61ba136..15187584 100644 --- a/profiler/src/profiler/TracyView.hpp +++ b/profiler/src/profiler/TracyView.hpp @@ -949,6 +949,8 @@ private: bool limitToView = false; std::pair limitRange = { -1, 0 }; int minBinVal = 1; + double sumSq = 0; + float sd = 0; } m_frameSortData; struct { diff --git a/profiler/src/profiler/TracyView_FrameStatistics.cpp b/profiler/src/profiler/TracyView_FrameStatistics.cpp index b6e6aeca..ca0f531a 100644 --- a/profiler/src/profiler/TracyView_FrameStatistics.cpp +++ b/profiler/src/profiler/TracyView_FrameStatistics.cpp @@ -11,7 +11,7 @@ extern double s_time; void View::DrawFrameStatistics() { const auto scale = GetScale(); - ImGui::SetNextWindowSize( ImVec2( 550 * scale, 650 * scale ), ImGuiCond_FirstUseEver ); + ImGui::SetNextWindowSize( ImVec2( 650 * scale, 500 * scale ), ImGuiCond_FirstUseEver ); ImGui::Begin( "Frame statistics", &m_showFrameStatistics ); auto fsz = m_worker.GetFullFrameCount( *m_frames ); @@ -58,9 +58,11 @@ void View::DrawFrameStatistics() m_frameSortData.frameNum = 0; m_frameSortData.data.clear(); m_frameSortData.total = 0; + m_frameSortData.sumSq = 0; } bool recalc = false; int64_t total = 0; + double sumSq = 0; if( !m_frameSortData.limitToView ) { if( m_frameSortData.frameNum != fsz || m_frameSortData.limitRange.first != -1 ) @@ -69,6 +71,7 @@ void View::DrawFrameStatistics() vec.reserve( fsz ); const auto midSz = vec.size(); total = m_frameSortData.total; + sumSq = m_frameSortData.sumSq; for( size_t i=m_frameSortData.frameNum; i 1 ) + { + const auto avg = m_frameSortData.average; + const auto ss = m_frameSortData.sumSq - 2. * total * avg + avg * avg * vsz; + m_frameSortData.sd = sqrt( ss / ( vsz - 1 ) ); + } + else + { + m_frameSortData.sd = 0; + } } const auto profileSpan = m_worker.GetLastTime(); @@ -324,6 +341,11 @@ void View::DrawFrameStatistics() ImGui::EndTooltip(); } } + ImGui::SameLine(); + ImGui::Spacing(); + ImGui::SameLine(); + TextFocused( "\xcf\x83:", TimeToString( m_frameSortData.sd ) ); + TooltipIfHovered( "Standard deviation" ); ImGui::PushStyleVar( ImGuiStyleVar_FramePadding, ImVec2( 0, 0 ) ); ImGui::Checkbox( "###draw1", &m_frameSortData.drawAvgMed );