summaryrefslogtreecommitdiff
path: root/internal/ior.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-10 19:25:51 +0200
committerPaul Buetow <paul@buetow.org>2026-03-10 19:25:51 +0200
commitc43932b6eee8b8a964b9be7c21c42057f05456ba (patch)
tree94a5a7ebeefdc79c106060c004b561985df69970 /internal/ior.go
parent70acff73c8d103ec68c575d3cac1bdd87c189cf0 (diff)
task 434: unify trace filter plumbing
Diffstat (limited to 'internal/ior.go')
-rw-r--r--internal/ior.go38
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