]> Cypherpunks.ru repositories - gostls13.git/commitdiff
testing: add Elapsed method to testing.B
authorhopehook <hopehook.com@gmail.com>
Sat, 30 Jul 2022 04:47:51 +0000 (12:47 +0800)
committerGopher Robot <gobot@golang.org>
Thu, 25 Aug 2022 17:58:32 +0000 (17:58 +0000)
Elapsed returns the measured elapsed time of the benchmark,
but does not change the running state of the timer.

Fixes #43620.

Change-Id: Idd9f64c4632518eec759d2ffccbf0050d84fcc03
Reviewed-on: https://go-review.googlesource.com/c/go/+/420254
Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Run-TryBot: hopehook <hopehook@qq.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
api/next/43620.txt [new file with mode: 0644]
src/testing/benchmark.go
src/testing/benchmark_test.go

diff --git a/api/next/43620.txt b/api/next/43620.txt
new file mode 100644 (file)
index 0000000..9d272fd
--- /dev/null
@@ -0,0 +1 @@
+pkg testing, method (*B) Elapsed() time.Duration #43620
\ No newline at end of file
index 4fee421d391dfdaa40334ea05be0f5e560473cdb..ce1ab6da37964d3ac05c6923a443c38f976c1b53 100644 (file)
@@ -337,6 +337,17 @@ func (b *B) launch() {
        b.result = BenchmarkResult{b.N, b.duration, b.bytes, b.netAllocs, b.netBytes, b.extra}
 }
 
+// Elapsed returns the measured elapsed time of the benchmark.
+// The duration reported by Elapsed matches the one measured by
+// StartTimer, StopTimer, and ResetTimer.
+func (b *B) Elapsed() time.Duration {
+       d := b.duration
+       if b.timerOn {
+               d += time.Since(b.start)
+       }
+       return d
+}
+
 // ReportMetric adds "n unit" to the reported benchmark results.
 // If the metric is per-iteration, the caller should divide by b.N,
 // and by convention units should end in "/op".
index 3b1dc8275b5b836ad7252dbd3adae6a96f424d17..7e456f9a409e5784feaef19dc0feb0504bb5346d 100644 (file)
@@ -176,5 +176,8 @@ func ExampleB_ReportMetric() {
                // This metric is per-operation, so divide by b.N and
                // report it as a "/op" unit.
                b.ReportMetric(float64(compares)/float64(b.N), "compares/op")
+               // This metric is per-time, so divide by b.Elapsed and
+               // report it as a "/ns" unit.
+               b.ReportMetric(float64(compares)/float64(b.Elapsed().Nanoseconds()), "compares/ns")
        })
 }