diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-08 20:33:41 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-08 20:33:41 +0200 |
| commit | 4ca02bb88cffb28bb000326688c6e8e7c1cbe8a9 (patch) | |
| tree | 4c74aaaaa2c96c3a694a09c511836e485e3eeffc /internal/tui/tui.go | |
| parent | 8236891a2c3a774a3eee2401980c10080aa85da6 (diff) | |
task 372: restart tracing when filters change
Diffstat (limited to 'internal/tui/tui.go')
| -rw-r--r-- | internal/tui/tui.go | 23 |
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) { |
