Commit e6ab614f authored by Hana Kim's avatar Hana Kim Committed by Hyang-Ah Hana Kim

cmd/trace: avoid emitting traceview slice with 0 duration

The trace viewer interprets the slice as a non-terminating
time interval which is quite opposit to what trace records indicate
(i.e., almostly immediately terminating time interval).
As observed in the issue #24663 this can result in quite misleading
visualization of the trace.

Work around the trace viewer's issue by setting a small value
(0.0001usec) as the duration if the time interval is not positive.

Change-Id: I1c2aac135c194d0717f5c01a98ca60ffb14ef45c
Reviewed-on: https://go-review.googlesource.com/104716Reviewed-by: default avatarHeschi Kreinick <heschi@google.com>
parent c4874aa2
...@@ -815,11 +815,18 @@ func (ctx *traceContext) proc(ev *trace.Event) uint64 { ...@@ -815,11 +815,18 @@ func (ctx *traceContext) proc(ev *trace.Event) uint64 {
} }
func (ctx *traceContext) emitSlice(ev *trace.Event, name string) *ViewerEvent { func (ctx *traceContext) emitSlice(ev *trace.Event, name string) *ViewerEvent {
// If ViewerEvent.Dur is not a positive value,
// trace viewer handles it as a non-terminating time interval.
// Avoid it by setting the field with a small value.
durationUsec := ctx.time(ev.Link) - ctx.time(ev)
if ev.Link.Ts-ev.Ts <= 0 {
durationUsec = 0.0001 // 0.1 nanoseconds
}
sl := &ViewerEvent{ sl := &ViewerEvent{
Name: name, Name: name,
Phase: "X", Phase: "X",
Time: ctx.time(ev), Time: ctx.time(ev),
Dur: ctx.time(ev.Link) - ctx.time(ev), Dur: durationUsec,
Tid: ctx.proc(ev), Tid: ctx.proc(ev),
Stack: ctx.stack(ev.Stk), Stack: ctx.stack(ev.Stk),
EndStack: ctx.stack(ev.Link.Stk), EndStack: ctx.stack(ev.Link.Stk),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment