From 10813ddcf4f8dfea439c7d9c57f6f7bc9263d449 Mon Sep 17 00:00:00 2001 From: jmanc3 Date: Wed, 1 Jul 2020 17:03:01 -0500 Subject: [PATCH] Added continuous scrolling. --- server/TracyView.cpp | 38 +++++++++++++++++++++++++++++++++++++- server/TracyView.hpp | 3 +++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 59ffbaaa..95ed9306 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -146,6 +146,8 @@ View::View( const char* addr, int port, ImFont* fixedWidth, ImFont* smallFont, I s_instance = this; InitTextEditor( fixedWidth ); + + m_continuousScrollingFirstFrame = true; } View::View( FileRead& f, ImFont* fixedWidth, ImFont* smallFont, ImFont* bigFont, SetTitleCallback stcb, GetWindowCallback gwcb ) @@ -176,6 +178,8 @@ View::View( FileRead& f, ImFont* fixedWidth, ImFont* smallFont, ImFont* bigFont, if( m_worker.GetCallstackFrameCount() == 0 ) m_showUnknownFrames = false; if( m_worker.GetCallstackSampleCount() == 0 ) m_showAllSymbols = true; + + m_continuousScrollingFirstFrame = true; } View::~View() @@ -582,6 +586,8 @@ bool View::DrawImpl() ImGui::SameLine(); ToggleButton( ICON_FA_FINGERPRINT " Info", m_showInfo ); ImGui::SameLine(); + ToggleButton( ICON_FA_ARROW_RIGHT " Continuous Scroll", m_continuousScrolling ); + ImGui::SameLine(); if( ImGui::Button( ICON_FA_TOOLS ) ) ImGui::OpenPopup( "ToolsPopup" ); if( ImGui::BeginPopup( "ToolsPopup" ) ) { @@ -750,6 +756,7 @@ bool View::DrawImpl() if( m_showOptions ) DrawOptions(); if( m_showMessages ) DrawMessages(); + if( m_continuousScrolling && m_worker.IsConnected() ) ContinuousScrolling(); if( m_findZone.show ) DrawFindZone(); if( m_showStatistics ) DrawStatistics(); if( m_memInfo.show ) DrawMemory(); @@ -1693,6 +1700,7 @@ void View::HandleZoneViewMouse( int64_t timespan, const ImVec2& wpos, float w, d { m_highlight.active = true; m_highlight.start = m_highlight.end = m_vd.zvStart + ( io.MousePos.x - wpos.x ) * nspx; + m_continuousScrolling = false; } else if( ImGui::IsMouseDragging( 0, 0 ) ) { @@ -1719,6 +1727,7 @@ void View::HandleZoneViewMouse( int64_t timespan, const ImVec2& wpos, float w, d { m_highlightZoom.active = true; m_highlightZoom.start = m_highlightZoom.end = m_vd.zvStart + ( io.MousePos.x - wpos.x ) * nspx; + m_continuousScrolling = false; } else if( ImGui::IsMouseDragging( 2, 0 ) ) { @@ -1794,6 +1803,7 @@ void View::HandleZoneViewMouse( int64_t timespan, const ImVec2& wpos, float w, d ImGui::SetScrollY( y - delta.y ); io.MouseClickedPos[1].y = io.MousePos.y; } + m_continuousScrolling = false; } const auto wheel = io.MouseWheel; @@ -1826,7 +1836,18 @@ void View::HandleZoneViewMouse( int64_t timespan, const ImVec2& wpos, float w, d t0 -= std::max( int64_t( 1 ), int64_t( p1 * 0.25 ) ); t1 += std::max( int64_t( 1 ), int64_t( p2 * 0.25 ) ); } - ZoomToRange( t0, t1 ); + + if (m_continuousScrolling && m_worker.IsConnected()) { + // We want to able to increase/decrease the view span even if we are continuously scrolling + // and using ZoomToRange would be overwritten by or ContinuousScrolling function so we + // set the values directly here + m_vd.zvStart = t0; + if (t0 == t1) + t1 += 1; + m_vd.zvEnd = t1; + } else { + ZoomToRange( t0, t1 ); + } } } @@ -8677,6 +8698,21 @@ void View::DrawMessages() ImGui::End(); } +void View::ContinuousScrolling() +{ + if (m_continuousScrollingFirstFrame) { + // On the first frame, expand the view span to cover a 5 second range + m_continuousScrollingFirstFrame = false; + m_vd.zvStart = m_worker.GetLastTime(); + m_vd.zvEnd = m_vd.zvStart + 5000000000; + } + + // Center the end and then move over 25 percent to display more history + const auto t = m_worker.GetLastTime(); + const auto hr = std::max( 1, ( m_vd.zvEnd - m_vd.zvStart ) / 2 ); + ZoomToRange( (t - hr) - (hr / 2), (t + hr) - (hr / 2)); +} + uint64_t View::GetSelectionTarget( const Worker::ZoneThreadData& ev, FindZone::GroupBy groupBy ) const { switch( groupBy ) diff --git a/server/TracyView.hpp b/server/TracyView.hpp index 79470965..a9f98d33 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -155,6 +155,7 @@ private: int DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover, float yMin, float yMax ); void DrawOptions(); void DrawMessages(); + void ContinuousScrolling(); void DrawFindZone(); void DrawStatistics(); void DrawMemory(); @@ -347,6 +348,8 @@ private: bool m_showMessages = false; bool m_showStatistics = false; bool m_showInfo = false; + bool m_continuousScrolling = true; + bool m_continuousScrollingFirstFrame = true; bool m_showPlayback = false; bool m_showCpuDataWindow = false; bool m_showAnnotationList = false;