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

cmd/trace: fix overlappingDuration

Update #24081

Change-Id: Ieccfb03c51e86f35d4629a42959c80570bd93c33
Reviewed-on: https://go-review.googlesource.com/97555Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent f8973fca
...@@ -463,10 +463,10 @@ func overlappingDuration(start1, end1, start2, end2 int64) time.Duration { ...@@ -463,10 +463,10 @@ func overlappingDuration(start1, end1, start2, end2 int64) time.Duration {
return 0 return 0
} }
if start1 > start2 { if start1 < start2 { // choose the later one
start1 = start2 start1 = start2
} }
if end1 > end2 { if end1 > end2 { // choose the earlier one
end1 = end2 end1 = end2
} }
return time.Duration(end1 - start1) return time.Duration(end1 - start1)
......
...@@ -17,6 +17,33 @@ import ( ...@@ -17,6 +17,33 @@ import (
var saveTraces = flag.Bool("savetraces", false, "save traces collected by tests") var saveTraces = flag.Bool("savetraces", false, "save traces collected by tests")
func TestOverlappingDuration(t *testing.T) {
cases := []struct {
start0, end0, start1, end1 int64
want time.Duration
}{
{
1, 10, 11, 20, 0,
},
{
1, 10, 5, 20, 5 * time.Nanosecond,
},
{
1, 10, 2, 8, 6 * time.Nanosecond,
},
}
for _, tc := range cases {
s0, e0, s1, e1 := tc.start0, tc.end0, tc.start1, tc.end1
if got := overlappingDuration(s0, e0, s1, e1); got != tc.want {
t.Errorf("overlappingDuration(%d, %d, %d, %d)=%v; want %v", s0, e0, s1, e1, got, tc.want)
}
if got := overlappingDuration(s1, e1, s0, e0); got != tc.want {
t.Errorf("overlappingDuration(%d, %d, %d, %d)=%v; want %v", s1, e1, s0, e0, got, tc.want)
}
}
}
// prog0 starts three goroutines. // prog0 starts three goroutines.
// //
// goroutine 1: taskless span // goroutine 1: taskless span
...@@ -247,14 +274,18 @@ func TestAnalyzeAnnotationGC(t *testing.T) { ...@@ -247,14 +274,18 @@ func TestAnalyzeAnnotationGC(t *testing.T) {
switch task.name { switch task.name {
case "taskWithGC": case "taskWithGC":
if got <= 0 || got >= gcTime { if got <= 0 || got >= gcTime {
t.Errorf("%s reported %v as overlapping GC time; want (0, %v): %v", task.name, got, gcTime, task) t.Errorf("%s reported %v as overlapping GC time; want (0, %v):\n%v", task.name, got, gcTime, task)
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
fmt.Fprintln(buf, "GC Events") fmt.Fprintln(buf, "GC Events")
for _, ev := range res.gcEvents { for _, ev := range res.gcEvents {
fmt.Fprintf(buf, " %s\n", ev) fmt.Fprintf(buf, " %s -> %s\n", ev, ev.Link)
}
fmt.Fprintln(buf, "Events in Task")
for i, ev := range task.events {
fmt.Fprintf(buf, " %d: %s\n", i, ev)
} }
fmt.Fprintf(buf, "%s\n", task)
t.Logf("%s", buf) t.Logf("\n%s", buf)
} }
case "taskWithoutGC": case "taskWithoutGC":
if got != 0 { if got != 0 {
......
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