summaryrefslogtreecommitdiff
path: root/internal/ior.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-10 23:01:42 +0200
committerPaul Buetow <paul@buetow.org>2026-03-10 23:01:42 +0200
commit27798b61d6ac4b14ea5129ac28131302a6c5cb30 (patch)
tree198b623dd3ae68a4b61160ed3f48ffb4f118d17d /internal/ior.go
parent064d967df9629acd16a5c1cd3a1007e22071f86c (diff)
tui: hide stream buffer behind source interface (task 428)
Diffstat (limited to 'internal/ior.go')
-rw-r--r--internal/ior.go17
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)