From d107ee90df402aa5042ab69d5c1d26aa320e1585 Mon Sep 17 00:00:00 2001 From: Junyang Shao Date: Tue, 18 Mar 2025 21:13:23 +0000 Subject: [PATCH] [release-branch.go1.24] testing: allow manual timer control in testing.B.Loop Fixes #72934 Change-Id: I56610d2d11d151a8f95b6434bbedbfcd5c11c317 Reviewed-on: https://go-review.googlesource.com/c/go/+/658975 LUCI-TryBot-Result: Go LUCI Commit-Queue: Junyang Shao Reviewed-by: Austin Clements Reviewed-on: https://go-review.googlesource.com/c/go/+/660555 Reviewed-by: Junyang Shao Auto-Submit: Dmitri Shuralyov Reviewed-by: Cherry Mui --- src/testing/benchmark.go | 6 +++--- src/testing/loop_test.go | 10 ++++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/testing/benchmark.go b/src/testing/benchmark.go index 3a7da9e540..166e3a0d16 100644 --- a/src/testing/benchmark.go +++ b/src/testing/benchmark.go @@ -368,8 +368,8 @@ func (b *B) ReportMetric(n float64, unit string) { } func (b *B) stopOrScaleBLoop() bool { - timeElapsed := highPrecisionTimeSince(b.start) - if timeElapsed >= b.benchTime.d { + t := b.Elapsed() + if t >= b.benchTime.d { // Stop the timer so we don't count cleanup time b.StopTimer() return false @@ -377,7 +377,7 @@ func (b *B) stopOrScaleBLoop() bool { // Loop scaling goalns := b.benchTime.d.Nanoseconds() prevIters := int64(b.N) - b.N = predictN(goalns, prevIters, timeElapsed.Nanoseconds(), prevIters) + b.N = predictN(goalns, prevIters, t.Nanoseconds(), prevIters) b.loopN++ return true } diff --git a/src/testing/loop_test.go b/src/testing/loop_test.go index 7a1a93fcee..781a8566e8 100644 --- a/src/testing/loop_test.go +++ b/src/testing/loop_test.go @@ -7,7 +7,7 @@ package testing func TestBenchmarkBLoop(t *T) { var initialStart highPrecisionTime var firstStart highPrecisionTime - var lastStart highPrecisionTime + var scaledStart highPrecisionTime var runningEnd bool runs := 0 iters := 0 @@ -19,7 +19,9 @@ func TestBenchmarkBLoop(t *T) { if iters == 0 { firstStart = b.start } - lastStart = b.start + if iters == 1 { + scaledStart = b.start + } iters++ } finalBN = b.N @@ -45,8 +47,8 @@ func TestBenchmarkBLoop(t *T) { if firstStart == initialStart { t.Errorf("b.Loop did not reset the timer") } - if lastStart != firstStart { - t.Errorf("timer was reset during iteration") + if scaledStart != firstStart { + t.Errorf("b.Loop stops and restarts the timer during iteration") } // Verify that it stopped the timer after the last loop. if runningEnd { -- 2.48.1