From ef68f3139f76f2eeba76f8e73a9c05aabe046bfa Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Fri, 28 Apr 2023 14:49:00 +0200 Subject: [PATCH 1/4] allow filtering zones in Zone finder based on the user text --- server/TracyView.hpp | 1 + server/TracyView_FindZone.cpp | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/server/TracyView.hpp b/server/TracyView.hpp index f27bf654..654134a7 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -457,6 +457,7 @@ private: ImGuiTextFilter m_statisticsFilter; ImGuiTextFilter m_statisticsImageFilter; + ImGuiTextFilter m_userTextFilter; Region m_highlight; Region m_highlightZoom; diff --git a/server/TracyView_FindZone.cpp b/server/TracyView_FindZone.cpp index 7de5f561..b6592d4d 100644 --- a/server/TracyView_FindZone.cpp +++ b/server/TracyView_FindZone.cpp @@ -1362,6 +1362,23 @@ void View::DrawFindZone() SmallCheckbox( "Show zone time in frames", &m_findZone.showZoneInFrames ); ImGui::Separator(); + ImGui::AlignTextToFramePadding(); + TextDisabledUnformatted( "Filter user text:" ); + ImGui::SameLine(); + bool filterChanged = m_userTextFilter.Draw( ICON_FA_FILTER "###resultFilter", 200 ); + + ImGui::SameLine(); + if( ImGui::Button( ICON_FA_DELETE_LEFT " Clear" ) ) + { + m_userTextFilter.Clear(); + filterChanged = true; + } + ImGui::Separator(); + if( filterChanged ) + { + m_findZone.ResetGroups(); + } + ImGui::TextUnformatted( "Found zones:" ); ImGui::SameLine(); DrawHelpMarker( "Left click to highlight entry." ); @@ -1429,6 +1446,25 @@ void View::DrawFindZone() zptr++; continue; } + + if( m_userTextFilter.IsActive() ) + { + bool keep = false; + if ( m_worker.HasZoneExtra( *ev.Zone() ) && m_worker.GetZoneExtra( *ev.Zone() ).text.Active() ) + { + auto text = m_worker.GetString( m_worker.GetZoneExtra( *ev.Zone() ).text ); + if( m_userTextFilter.PassFilter( text ) ) + { + keep = true; + } + } + if( !keep ) + { + zptr++; + continue; + } + } + auto timespan = end - start; assert( timespan != 0 ); if( m_findZone.selfTime ) From 6c5029af78581629d1c202a3ae5822ad2897249b Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Mon, 1 May 2023 13:13:37 +0200 Subject: [PATCH 2/4] fix id collision in clear button --- server/TracyView_FindZone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/TracyView_FindZone.cpp b/server/TracyView_FindZone.cpp index b6592d4d..f6ded831 100644 --- a/server/TracyView_FindZone.cpp +++ b/server/TracyView_FindZone.cpp @@ -1368,7 +1368,7 @@ void View::DrawFindZone() bool filterChanged = m_userTextFilter.Draw( ICON_FA_FILTER "###resultFilter", 200 ); ImGui::SameLine(); - if( ImGui::Button( ICON_FA_DELETE_LEFT " Clear" ) ) + if( ImGui::Button( ICON_FA_DELETE_LEFT " Clear###userText" ) ) { m_userTextFilter.Clear(); filterChanged = true; From 73c83906b6323b7013dc44367e9bee5d74405fbe Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Mon, 1 May 2023 13:14:16 +0200 Subject: [PATCH 3/4] make the histogram take into account filtered zones --- server/TracyView.hpp | 1 + server/TracyView_FindZone.cpp | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/server/TracyView.hpp b/server/TracyView.hpp index 654134a7..a1aadcf4 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -458,6 +458,7 @@ private: ImGuiTextFilter m_statisticsFilter; ImGuiTextFilter m_statisticsImageFilter; ImGuiTextFilter m_userTextFilter; + unordered_flat_set m_filteredZones; Region m_highlight; Region m_highlightZoom; diff --git a/server/TracyView_FindZone.cpp b/server/TracyView_FindZone.cpp index f6ded831..216eeaf8 100644 --- a/server/TracyView_FindZone.cpp +++ b/server/TracyView_FindZone.cpp @@ -543,6 +543,7 @@ void View::DrawFindZone() { auto& ev = zones[i]; if( ev.Zone()->End() > rangeMax || ev.Zone()->Start() < rangeMin ) continue; + if( m_filteredZones.contains(&ev) ) continue; if( selGroup == GetSelectionTarget( ev, groupBy ) ) { const auto ctx = m_worker.GetContextSwitchData( m_worker.DecompressThread( zones[i].Thread() ) ); @@ -560,6 +561,7 @@ void View::DrawFindZone() for( size_t i=m_findZone.selSortNum; iEnd() > rangeMax || ev.Zone()->Start() < rangeMin ) continue; + if( m_filteredZones.contains(&ev) ) continue; if( selGroup == GetSelectionTarget( ev, groupBy ) ) { const auto t = ev.Zone()->End() - ev.Zone()->Start() - GetZoneChildTimeFast( *ev.Zone() ); @@ -595,6 +598,7 @@ void View::DrawFindZone() for( size_t i=m_findZone.selSortNum; iEnd() - ev.Zone()->Start() - GetZoneChildTimeFast( *ev.Zone() ); @@ -613,6 +617,7 @@ void View::DrawFindZone() { auto& ev = zones[i]; if( ev.Zone()->End() > rangeMax || ev.Zone()->Start() < rangeMin ) continue; + if( m_filteredZones.contains(&ev) ) continue; if( selGroup == GetSelectionTarget( ev, groupBy ) ) { const auto t = ev.Zone()->End() - ev.Zone()->Start(); @@ -627,6 +632,7 @@ void View::DrawFindZone() for( size_t i=m_findZone.selSortNum; iEnd() - ev.Zone()->Start(); @@ -1376,6 +1382,7 @@ void View::DrawFindZone() ImGui::Separator(); if( filterChanged ) { + m_filteredZones.clear(); m_findZone.ResetGroups(); } @@ -1460,6 +1467,7 @@ void View::DrawFindZone() } if( !keep ) { + m_filteredZones.insert(&ev); zptr++; continue; } From 3285c8c9605f83f000365509d74dcde01ac8319f Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Tue, 2 May 2023 11:25:42 +0200 Subject: [PATCH 4/4] formatting --- server/TracyView_FindZone.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server/TracyView_FindZone.cpp b/server/TracyView_FindZone.cpp index 216eeaf8..1fadb376 100644 --- a/server/TracyView_FindZone.cpp +++ b/server/TracyView_FindZone.cpp @@ -543,7 +543,7 @@ void View::DrawFindZone() { auto& ev = zones[i]; if( ev.Zone()->End() > rangeMax || ev.Zone()->Start() < rangeMin ) continue; - if( m_filteredZones.contains(&ev) ) continue; + if( m_filteredZones.contains( &ev ) ) continue; if( selGroup == GetSelectionTarget( ev, groupBy ) ) { const auto ctx = m_worker.GetContextSwitchData( m_worker.DecompressThread( zones[i].Thread() ) ); @@ -561,7 +561,7 @@ void View::DrawFindZone() for( size_t i=m_findZone.selSortNum; iEnd() > rangeMax || ev.Zone()->Start() < rangeMin ) continue; - if( m_filteredZones.contains(&ev) ) continue; + if( m_filteredZones.contains( &ev ) ) continue; if( selGroup == GetSelectionTarget( ev, groupBy ) ) { const auto t = ev.Zone()->End() - ev.Zone()->Start() - GetZoneChildTimeFast( *ev.Zone() ); @@ -598,7 +598,7 @@ void View::DrawFindZone() for( size_t i=m_findZone.selSortNum; iEnd() - ev.Zone()->Start() - GetZoneChildTimeFast( *ev.Zone() ); @@ -617,7 +617,7 @@ void View::DrawFindZone() { auto& ev = zones[i]; if( ev.Zone()->End() > rangeMax || ev.Zone()->Start() < rangeMin ) continue; - if( m_filteredZones.contains(&ev) ) continue; + if( m_filteredZones.contains( &ev ) ) continue; if( selGroup == GetSelectionTarget( ev, groupBy ) ) { const auto t = ev.Zone()->End() - ev.Zone()->Start(); @@ -632,7 +632,7 @@ void View::DrawFindZone() for( size_t i=m_findZone.selSortNum; iEnd() - ev.Zone()->Start(); @@ -1467,7 +1467,7 @@ void View::DrawFindZone() } if( !keep ) { - m_filteredZones.insert(&ev); + m_filteredZones.insert( &ev ); zptr++; continue; }