diff options
| author | Junyang Shao <shaojunyang@google.com> | 2024-11-21 07:36:25 +0000 |
|---|---|---|
| committer | Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-11-21 22:09:32 +0000 |
| commit | 154fb4e1d45e503658542dee5296243a6146e7ca (patch) | |
| tree | 213336d17b34a5ffacf334d4afc34e6934e1c414 /src/testing/benchmark.go | |
| parent | 0c6dbd99c570874ef5ec353298708677c1675dd0 (diff) | |
| download | go-154fb4e1d45e503658542dee5296243a6146e7ca.tar.xz | |
testing: Update testing.B.Loop to save benchmark results.
This is fixing some the missing logic of CL 627755.
Change-Id: I35acffef7299331fce21da4a80a26185b2e909f4
Reviewed-on: https://go-review.googlesource.com/c/go/+/630455
Commit-Queue: Junyang Shao <shaojunyang@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/testing/benchmark.go')
| -rw-r--r-- | src/testing/benchmark.go | 51 |
1 files changed, 27 insertions, 24 deletions
diff --git a/src/testing/benchmark.go b/src/testing/benchmark.go index db0aec5100..67a5abccb4 100644 --- a/src/testing/benchmark.go +++ b/src/testing/benchmark.go @@ -230,13 +230,12 @@ func (b *B) run1() bool { b.mu.RLock() finished := b.finished b.mu.RUnlock() - // b.Loop() does its own ramp-up so we just need to run it once. - if b.hasSub.Load() || finished || b.loopN != 0 { + if b.hasSub.Load() || finished { tag := "BENCH" if b.skipped { tag = "SKIP" } - if b.chatty != nil && (len(b.output) > 0 || finished || b.loopN != 0) { + if b.chatty != nil && (len(b.output) > 0 || finished) { b.trimOutput() fmt.Fprintf(b.w, "%s--- %s: %s\n%s", b.chatty.prefix(), tag, b.name, b.output) } @@ -304,28 +303,32 @@ func (b *B) launch() { b.signal <- true }() - // Run the benchmark for at least the specified amount of time. - if b.benchTime.n > 0 { - // We already ran a single iteration in run1. - // If -benchtime=1x was requested, use that result. - // See https://golang.org/issue/32051. - if b.benchTime.n > 1 { - b.runN(b.benchTime.n) - } - } else { - d := b.benchTime.d - for n := int64(1); !b.failed && b.duration < d && n < 1e9; { - last := n - // Predict required iterations. - goalns := d.Nanoseconds() - prevIters := int64(b.N) - prevns := b.duration.Nanoseconds() - if prevns <= 0 { - // Round up, to avoid div by zero. - prevns = 1 + // b.Loop does its own ramp-up logic so we just need to run it once. + // If b.loopN is non zero, it means b.Loop has already run. + if b.loopN == 0 { + // Run the benchmark for at least the specified amount of time. + if b.benchTime.n > 0 { + // We already ran a single iteration in run1. + // If -benchtime=1x was requested, use that result. + // See https://golang.org/issue/32051. + if b.benchTime.n > 1 { + b.runN(b.benchTime.n) + } + } else { + d := b.benchTime.d + for n := int64(1); !b.failed && b.duration < d && n < 1e9; { + last := n + // Predict required iterations. + goalns := d.Nanoseconds() + prevIters := int64(b.N) + prevns := b.duration.Nanoseconds() + if prevns <= 0 { + // Round up, to avoid div by zero. + prevns = 1 + } + n = int64(predictN(goalns, prevIters, prevns, last)) + b.runN(int(n)) } - n = int64(predictN(goalns, prevIters, prevns, last)) - b.runN(int(n)) } } b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra} |
