summaryrefslogtreecommitdiff
path: root/internal/tui/tui.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 20:33:41 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 20:33:41 +0200
commit4ca02bb88cffb28bb000326688c6e8e7c1cbe8a9 (patch)
tree4c74aaaaa2c96c3a694a09c511836e485e3eeffc /internal/tui/tui.go
parent8236891a2c3a774a3eee2401980c10080aa85da6 (diff)
task 372: restart tracing when filters change
Diffstat (limited to 'internal/tui/tui.go')
-rw-r--r--internal/tui/tui.go23
1 files changed, 21 insertions, 2 deletions
diff --git a/internal/tui/tui.go b/internal/tui/tui.go
index 991a9d6..db24538 100644
--- a/internal/tui/tui.go
+++ b/internal/tui/tui.go
@@ -400,10 +400,11 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
m.attaching = false
m.dashboard.SetStreamSource(m.runtime.eventStreamSource())
m.dashboard.SetLiveTrie(m.runtime.liveTrie())
+ m.dashboard.SetGlobalFilter(m.globalFilter)
width, height := common.EffectiveViewport(m.width, m.height)
next, sizeCmd := m.dashboard.Update(tea.WindowSizeMsg{Width: width, Height: height})
m.dashboard = next.(dashboardui.Model)
- return m, tea.Batch(sizeCmd, m.dashboard.Init())
+ return m, tea.Batch(sizeCmd, m.dashboard.Init(), m.dashboard.SnapshotCmd())
case TracingErrorMsg:
m.attaching = false
m.lastErr = msg.Err
@@ -540,7 +541,8 @@ func (m Model) updateFilterModal(msg tea.Msg) (tea.Model, tea.Cmd) {
wasVisible := m.filterModal.Visible()
m.filterModal = m.filterModal.Update(msg)
if wasVisible && !m.filterModal.Visible() {
- m.setGlobalFilter(m.filterModal.Filter())
+ next, cmd := m.applyGlobalFilter(m.filterModal.Filter())
+ return next, tea.Batch(dashboardCmd, cmd)
}
return m, dashboardCmd
}
@@ -831,6 +833,7 @@ func (m *Model) setProcessFilters(pid, tid int) {
m.globalFilter.PID = eqNumericFilter(pid)
m.globalFilter.TID = eqNumericFilter(tid)
m.dashboard.SetPidFilter(pid)
+ m.dashboard.SetGlobalFilter(m.globalFilter)
}
func (m *Model) setGlobalFilter(filter globalfilter.Filter) {
@@ -840,6 +843,22 @@ func (m *Model) setGlobalFilter(filter globalfilter.Filter) {
m.pidFilter = pid
m.tidFilter = tid
m.dashboard.SetPidFilter(pid)
+ m.dashboard.SetGlobalFilter(m.globalFilter)
+}
+
+func (m Model) applyGlobalFilter(filter globalfilter.Filter) (tea.Model, tea.Cmd) {
+ nextFilter := filter.Clone()
+ changed := !m.globalFilter.Equal(nextFilter)
+ m.setGlobalFilter(nextFilter)
+ if !changed || m.screen != ScreenDashboard {
+ return m, nil
+ }
+
+ m.stopTrace()
+ m.dashboard.PrepareForTraceRestart()
+ m.attaching = true
+ m.lastErr = nil
+ return m, tea.Batch(m.spin.Tick, m.beginTraceCmd())
}
func eqNumericFilterValue(filter *globalfilter.NumericFilter) (int, bool) {