summaryrefslogtreecommitdiff
path: root/internal/eventloop.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-03-29 11:25:27 +0200
committerPaul Buetow <paul@buetow.org>2025-03-29 11:25:27 +0200
commit8a34be1f4fffca90d74e2092c7bc5a6af02392c4 (patch)
treef003dc1b8d95a31bf8d01c786e98a5a622ac43cd /internal/eventloop.go
parent5f1b3be8ac4013ac7cf5041de339317defeb75ce (diff)
fix
Diffstat (limited to 'internal/eventloop.go')
-rw-r--r--internal/eventloop.go40
1 files changed, 20 insertions, 20 deletions
diff --git a/internal/eventloop.go b/internal/eventloop.go
index b2392ab..4e9a3cb 100644
--- a/internal/eventloop.go
+++ b/internal/eventloop.go
@@ -20,13 +20,13 @@ import (
// TOOD: read and write syscalls: can also collect amount of bytes!
type eventLoop struct {
- flags flags.Flags
- filter *eventFilter
- enterEvs map[uint32]*event.Pair // Temp. store of sys_enter tracepoints per Tid.
- files map[int32]file.File // Track all open files by file descriptor..
- comms map[uint32]string // Program or thread name of the current Tid.
- prevPairs map[uint32]*event.Pair // Previous event (to calculate time differences between two events)
- flamegraph flamegraph.Flamegraph // Storing all paths in a map structure for analysis
+ flags flags.Flags
+ filter *eventFilter
+ enterEvs map[uint32]*event.Pair // Temp. store of sys_enter tracepoints per Tid.
+ files map[int32]file.File // Track all open files by file descriptor..
+ comms map[uint32]string // Program or thread name of the current Tid.
+ prevPairTimes map[uint32]uint64 // Previous event's time (to calculate time differences between two events)
+ flamegraph flamegraph.Flamegraph // Storing all paths in a map structure for analysis
// Statistics
numTracepoints uint
@@ -39,14 +39,14 @@ type eventLoop struct {
func newEventLoop(flags flags.Flags) *eventLoop {
return &eventLoop{
- flags: flags,
- filter: newEventFilter(flags),
- enterEvs: make(map[uint32]*event.Pair),
- files: make(map[int32]file.File),
- comms: make(map[uint32]string),
- prevPairs: make(map[uint32]*event.Pair),
- flamegraph: flamegraph.New(),
- done: make(chan struct{}),
+ flags: flags,
+ filter: newEventFilter(flags),
+ enterEvs: make(map[uint32]*event.Pair),
+ files: make(map[int32]file.File),
+ comms: make(map[uint32]string),
+ prevPairTimes: make(map[uint32]uint64),
+ flamegraph: flamegraph.New(flags),
+ done: make(chan struct{}),
}
}
@@ -90,10 +90,10 @@ func (e *eventLoop) run(ctx context.Context, rawCh <-chan []byte) {
case e.flags.FlamegraphEnable:
e.flamegraph.Ch <- ev
case e.flags.PprofEnable:
- ev.RecyclePrev()
+ ev.Recycle()
default:
fmt.Println(ev.String())
- ev.RecyclePrev()
+ ev.Recycle()
}
e.numSyscallsAfterFilter++
}
@@ -325,9 +325,9 @@ func (e *eventLoop) syscallExit(exitEv event.Event, ch chan<- *event.Pair) {
// TODO: fallocate
// TODO: https://man7.org/linux/man-pages/man2/io_uring_enter.2.html (already captured but without FDs)
- ev.PrevPair, _ = e.prevPairs[ev.EnterEv.GetTid()]
- ev.CalculateDurations()
- e.prevPairs[ev.EnterEv.GetTid()] = ev
+ prevPairTime, _ := e.prevPairTimes[ev.EnterEv.GetTid()]
+ ev.CalculateDurations(prevPairTime)
+ e.prevPairTimes[ev.EnterEv.GetTid()] = ev.ExitEv.GetTime()
ch <- ev
}