summaryrefslogtreecommitdiff
path: root/src/pkg/testing
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-12-04 09:56:31 -0800
committerRuss Cox <rsc@golang.org>2009-12-04 09:56:31 -0800
commit29d8486be45cacf46cbfa811c8f1f1f1ffeeb183 (patch)
tree153a9fbf473b5653d3598d1d9fd913d63f271fed /src/pkg/testing
parent73254331f0aaa06c43895dfe1369d3d83c8a01ad (diff)
downloadgolang-29d8486be45cacf46cbfa811c8f1f1f1ffeeb183.tar.gz
testing: compute MB/s in benchmarks
R=r http://codereview.appspot.com/166060
Diffstat (limited to 'src/pkg/testing')
-rw-r--r--src/pkg/testing/benchmark.go12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/pkg/testing/benchmark.go b/src/pkg/testing/benchmark.go
index b6e100686..b552a1320 100644
--- a/src/pkg/testing/benchmark.go
+++ b/src/pkg/testing/benchmark.go
@@ -26,6 +26,7 @@ type B struct {
N int;
benchmark Benchmark;
ns int64;
+ bytes int64;
start int64;
}
@@ -50,6 +51,10 @@ func (b *B) ResetTimer() {
b.ns = 0;
}
+// SetBytes records the number of bytes processed in a single operation.
+// If this is called, the benchmark will report ns/op and MB/s.
+func (b *B) SetBytes(n int64) { b.bytes = n }
+
func (b *B) nsPerOp() int64 {
if b.N <= 0 {
return 0
@@ -125,7 +130,12 @@ func (b *B) run() {
n = roundUp(n);
b.runN(n);
}
- fmt.Printf("%s\t%d\t%10d ns/op\n", b.benchmark.Name, b.N, b.nsPerOp());
+ ns := b.nsPerOp();
+ mb := "";
+ if ns > 0 && b.bytes > 0 {
+ mb = fmt.Sprintf("\t%7.2f MB/s", (float64(b.bytes)/1e6)/(float64(ns)/1e9))
+ }
+ fmt.Printf("%s\t%8d\t%10d ns/op%s\n", b.benchmark.Name, b.N, b.nsPerOp(), mb);
}
// An internal function but exported because it is cross-package; part of the implementation