mirror of
https://github.com/golang/go.git
synced 2025-05-20 06:43:26 +00:00
cmd/trace: fix overlappingDuration
Update #24081 Change-Id: Ieccfb03c51e86f35d4629a42959c80570bd93c33 Reviewed-on: https://go-review.googlesource.com/97555 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
f8973fcafb
commit
b5bd5bfbc7
@ -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 (
|
|||||||
|
|
||||||
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) {
|
|||||||
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.Fprintf(buf, "%s\n", task)
|
fmt.Fprintln(buf, "Events in Task")
|
||||||
t.Logf("%s", buf)
|
for i, ev := range task.events {
|
||||||
|
fmt.Fprintf(buf, " %d: %s\n", i, ev)
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Logf("\n%s", buf)
|
||||||
}
|
}
|
||||||
case "taskWithoutGC":
|
case "taskWithoutGC":
|
||||||
if got != 0 {
|
if got != 0 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user