diff options
author | Hana Kim <hakim@google.com> | 2018-04-04 13:47:53 -0400 |
---|---|---|
committer | Hyang-Ah Hana Kim <hyangah@gmail.com> | 2018-04-04 18:15:20 +0000 |
commit | e6ab614fda5ce7533bda81f2b0de0f9fe18139bf (patch) | |
tree | 32fa0f038454cb17928a8cfe8280b3a030265efd /src/cmd/trace | |
parent | c4874aa2a207e8c9a3c79a9411a54cce4808aa9e (diff) | |
download | go-git-e6ab614fda5ce7533bda81f2b0de0f9fe18139bf.tar.gz |
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/104716
Reviewed-by: Heschi Kreinick <heschi@google.com>
Diffstat (limited to 'src/cmd/trace')
-rw-r--r-- | src/cmd/trace/trace.go | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/cmd/trace/trace.go b/src/cmd/trace/trace.go index 12d8dec753..ecc7c3f9c9 100644 --- a/src/cmd/trace/trace.go +++ b/src/cmd/trace/trace.go @@ -815,11 +815,18 @@ func (ctx *traceContext) proc(ev *trace.Event) uint64 { } 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{ Name: name, Phase: "X", Time: ctx.time(ev), - Dur: ctx.time(ev.Link) - ctx.time(ev), + Dur: durationUsec, Tid: ctx.proc(ev), Stack: ctx.stack(ev.Stk), EndStack: ctx.stack(ev.Link.Stk), |