diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-10 19:25:51 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-10 19:25:51 +0200 |
| commit | c43932b6eee8b8a964b9be7c21c42057f05456ba (patch) | |
| tree | 94a5a7ebeefdc79c106060c004b561985df69970 /internal/ior.go | |
| parent | 70acff73c8d103ec68c575d3cac1bdd87c189cf0 (diff) | |
task 434: unify trace filter plumbing
Diffstat (limited to 'internal/ior.go')
| -rw-r--r-- | internal/ior.go | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/internal/ior.go b/internal/ior.go index 668dda1..7b8f68a 100644 --- a/internal/ior.go +++ b/internal/ior.go @@ -177,7 +177,7 @@ func tuiTraceStarterFromRunTrace( cfg := baseCfg if filter, ok := tui.TraceFiltersFromContext(ctx); ok { cfg.GlobalFilter = filter.Clone() - applyTraceFilterConfig(&cfg, filter) + applyTraceScopeFromGlobalFilter(&cfg, filter) } engine := statsengine.NewEngine(64) streamBuf := eventstream.NewRingBuffer() @@ -243,24 +243,15 @@ func shouldIngestTracePair(filter globalfilter.Filter, pair *event.Pair) bool { if !filter.IsActive() { return true } - return globalfilter.MatchPair(filter, pair) + return filter.MatchPair(pair) } -func applyTraceFilterConfig(cfg *flags.Config, filter globalfilter.Filter) { +func applyTraceScopeFromGlobalFilter(cfg *flags.Config, filter globalfilter.Filter) { if cfg == nil { return } - cfg.CommFilter = "" - cfg.PathFilter = "" cfg.PidFilter = -1 cfg.TidFilter = -1 - - if filter.Comm != nil { - cfg.CommFilter = filter.Comm.Pattern - } - if filter.File != nil { - cfg.PathFilter = filter.File.Pattern - } if pid, ok := eqFilterValue(filter.PID); ok { cfg.PidFilter = pid } @@ -285,8 +276,7 @@ func newEventLoopConfig(cfg flags.Config) eventLoopConfig { copy(fields, cfg.CollapsedFields) return eventLoopConfig{ pidFilter: cfg.PidFilter, - commFilter: cfg.CommFilter, - pathFilter: cfg.PathFilter, + filter: traceFilterFromConfig(cfg), collapsedFields: fields, countField: cfg.CountField, pprofEnable: cfg.PprofEnable, @@ -294,6 +284,26 @@ func newEventLoopConfig(cfg flags.Config) eventLoopConfig { } } +func traceFilterFromConfig(cfg flags.Config) globalfilter.Filter { + filter := cfg.GlobalFilter.Clone() + if filter.IsActive() { + return filter + } + if cfg.CommFilter != "" { + filter.Comm = &globalfilter.StringFilter{Pattern: cfg.CommFilter} + } + if cfg.PathFilter != "" { + filter.File = &globalfilter.StringFilter{Pattern: cfg.PathFilter} + } + if cfg.PidFilter > 0 { + filter.PID = &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: int64(cfg.PidFilter)} + } + if cfg.TidFilter > 0 { + filter.TID = &globalfilter.NumericFilter{Op: globalfilter.OpEq, Value: int64(cfg.TidFilter)} + } + return filter +} + type profilingControl struct { done chan struct{} enabled bool |
