mirror of https://github.com/golang/go.git
testing: allow manual timer control in testing.B.Loop
Fixes #72922 Change-Id: I56610d2d11d151a8f95b6434bbedbfcd5c11c317 Reviewed-on: https://go-review.googlesource.com/c/go/+/658975 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Commit-Queue: Junyang Shao <shaojunyang@google.com> Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
parent
ba50de8429
commit
b613d21ffd
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in New Issue