diff options
| author | Paul Buetow <paul@buetow.org> | 2026-03-10 23:01:42 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-03-10 23:01:42 +0200 |
| commit | 27798b61d6ac4b14ea5129ac28131302a6c5cb30 (patch) | |
| tree | 198b623dd3ae68a4b61160ed3f48ffb4f118d17d /internal/ior.go | |
| parent | 064d967df9629acd16a5c1cd3a1007e22071f86c (diff) | |
tui: hide stream buffer behind source interface (task 428)
Diffstat (limited to 'internal/ior.go')
| -rw-r--r-- | internal/ior.go | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/internal/ior.go b/internal/ior.go index 7b8f68a..8258f01 100644 --- a/internal/ior.go +++ b/internal/ior.go @@ -51,6 +51,11 @@ type libbpfTracepointModule struct { module *bpf.Module } +type streamEventSink interface { + eventstream.Source + Push(eventstream.StreamEvent) +} + func (m libbpfTracepointModule) GetProgram(progName string) (probemanager.Program, error) { prog, err := m.module.GetProgram(progName) if err != nil { @@ -180,14 +185,20 @@ func tuiTraceStarterFromRunTrace( applyTraceScopeFromGlobalFilter(&cfg, filter) } engine := statsengine.NewEngine(64) - streamBuf := eventstream.NewRingBuffer() + streamBuf := streamEventSink(eventstream.NewRingBuffer()) + streamSource := eventstream.Source(streamBuf) liveTrie := flamegraph.NewLiveTrie(cfg.CollapsedFields, cfg.CountField) if bindings, ok := tui.RuntimeBindingsFromContext(ctx); ok { if persistent := bindings.StreamBuffer(); persistent != nil { - streamBuf = persistent + streamSource = persistent + if sink, ok := persistent.(streamEventSink); ok { + streamBuf = sink + } else { + return fmt.Errorf("runtime stream source does not support event pushes") + } } bindings.SetDashboardSnapshotSource(engine) - bindings.SetEventStreamSource(streamBuf) + bindings.SetEventStreamSource(streamSource) bindings.SetLiveTrie(liveTrie) } streamEvents := make(chan eventstream.StreamEvent, 4096) |
