diff options
author | Russ Cox <rsc@golang.org> | 2009-12-04 09:56:31 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-12-04 09:56:31 -0800 |
commit | 29d8486be45cacf46cbfa811c8f1f1f1ffeeb183 (patch) | |
tree | 153a9fbf473b5653d3598d1d9fd913d63f271fed /src/pkg/testing | |
parent | 73254331f0aaa06c43895dfe1369d3d83c8a01ad (diff) | |
download | golang-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.go | 12 |
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 |