go.image/tiff: add a benchmark for the encoder
The idea is to see whether it is worthwhile to implement special cases.
On my Mac Book Pro:
BenchmarkEncode 1000 1689656 ns/op 36.69 MB/s
R=nigeltao, minux.ma
CC=golang-dev
https://golang.org/cl/6278050
diff --git a/tiff/writer_test.go b/tiff/writer_test.go
index 1fc2331..4f5ab70 100644
--- a/tiff/writer_test.go
+++ b/tiff/writer_test.go
@@ -6,6 +6,8 @@
import (
"bytes"
+ "image"
+ "io/ioutil"
"os"
"testing"
)
@@ -15,18 +17,21 @@
"bw-packbits.tiff",
}
+func openImage(filename string) (image.Image, error) {
+ f, err := os.Open(testdataDir + filename)
+ if err != nil {
+ return nil, err
+ }
+ defer f.Close()
+ return Decode(f)
+}
+
func TestRoundtrip(t *testing.T) {
for _, filename := range roundtripTests {
- f, err := os.Open(testdataDir + filename)
+ img, err := openImage(filename)
if err != nil {
t.Fatal(err)
}
- defer f.Close()
- img, err := Decode(f)
- if err != nil {
- t.Fatal(err)
- }
-
out := new(bytes.Buffer)
err = Encode(out, img)
if err != nil {
@@ -40,3 +45,17 @@
compare(t, img, img2)
}
}
+
+// BenchmarkEncode benchmarks the encoding of an image.
+func BenchmarkEncode(b *testing.B) {
+ img, err := openImage("video-001.tiff")
+ if err != nil {
+ b.Fatal(err)
+ }
+ s := img.Bounds().Size()
+ b.SetBytes(int64(s.X * s.Y * 4))
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ Encode(ioutil.Discard, img)
+ }
+}