diff options
| author | Paul Buetow <paul@buetow.org> | 2024-03-28 11:48:42 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2024-03-28 11:48:42 +0200 |
| commit | 0ae1e14580786019703ab188ab76560fc3323fdd (patch) | |
| tree | 1d23bb2631289a0a825166b2eb7bb0b3097224f6 /internal/event.go | |
| parent | 97615d05d95cd11238d0a5af88e9ed28f0940e1f (diff) | |
initial support for logging time diffs between syscalls
Diffstat (limited to 'internal/event.go')
| -rw-r--r-- | internal/event.go | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/internal/event.go b/internal/event.go index beb8af6..acc8324 100644 --- a/internal/event.go +++ b/internal/event.go @@ -5,8 +5,13 @@ import ( . "ioriotng/internal/generated/types" "strconv" "strings" + "sync" ) +var poolOfEventPairs = sync.Pool{ + New: func() interface{} { return &eventPair{} }, +} + type event interface { String() string GetTraceId() TraceId @@ -16,26 +21,43 @@ type event interface { Recycle() } -type enterExitEvent struct { +// Represents a pair of enter and exit events (e.g. entering the syscall + exiting it) +type eventPair struct { enterEv, exitEv event file file comm string + duration uint32 tracepointMismatch bool + // To calculate the time difference from the previoud event. + prevPair *eventPair + durationToPrev uint32 +} + +func newEventPair(enterEv event) *eventPair { + e := poolOfEventPairs.Get().(*eventPair) + e.enterEv = enterEv + return e +} + +func (e *eventPair) calculateDurations() { + e.duration = e.exitEv.GetTime() - e.enterEv.GetTime() + if e.prevPair != nil { + e.durationToPrev = e.enterEv.GetTime() - e.prevPair.exitEv.GetTime() + } } -func (e enterExitEvent) is(id TraceId) bool { +func (e *eventPair) is(id TraceId) bool { return e.enterEv.GetTraceId() == id } -func (e enterExitEvent) String() string { +func (e *eventPair) String() string { var sb strings.Builder if e.tracepointMismatch { sb.WriteString("MISMATCH ") } - duration := e.exitEv.GetTime() - e.enterEv.GetTime() - sb.WriteString(fmt.Sprintf("%08d µs", duration)) + sb.WriteString(fmt.Sprintf("%08dµs %08dµs", e.durationToPrev, e.duration)) sb.WriteString(" ") sb.WriteString(e.comm) @@ -58,11 +80,13 @@ func (e enterExitEvent) String() string { return sb.String() } -func (e enterExitEvent) dump() string { +func (e *eventPair) dump() string { return fmt.Sprintf("%v with enterEv(%v) and exitEv(%v)", e, e.enterEv, e.exitEv) } -func (e enterExitEvent) recycle() { +func (e *eventPair) recycle() { e.enterEv.Recycle() e.exitEv.Recycle() + e.prevPair = nil + poolOfEventPairs.Put(e) } |
