From f172338a15c0d03bd89264ddcad374c76d4d4584 Mon Sep 17 00:00:00 2001 From: Benny Siegert Date: Fri, 26 Aug 2011 11:31:59 +1000 Subject: [PATCH] image/tiff: add a decode benchmark. R=nigeltao CC=golang-dev https://golang.org/cl/4917049 --- src/pkg/image/tiff/reader_test.go | 25 ++++++++++++++++++ .../tiff/testdata/video-001-uncompressed.tiff | Bin 0 -> 46674 bytes 2 files changed, 25 insertions(+) create mode 100644 src/pkg/image/tiff/testdata/video-001-uncompressed.tiff diff --git a/src/pkg/image/tiff/reader_test.go b/src/pkg/image/tiff/reader_test.go index f2122c44038..1eb2bcd76e3 100644 --- a/src/pkg/image/tiff/reader_test.go +++ b/src/pkg/image/tiff/reader_test.go @@ -5,10 +5,16 @@ package tiff import ( + "io/ioutil" "os" "testing" ) +// Read makes *buffer implements io.Reader, so that we can pass one to Decode. +func (*buffer) Read([]byte) (int, os.Error) { + panic("unimplemented") +} + // TestNoRPS tries to decode an image that has no RowsPerStrip tag. // The tag is mandatory according to the spec but some software omits // it in the case of a single strip. @@ -23,3 +29,22 @@ func TestNoRPS(t *testing.T) { t.Fatal(err) } } + +const filename = "testdata/video-001-uncompressed.tiff" + +// BenchmarkDecode benchmarks the decoding of an image. +func BenchmarkDecode(b *testing.B) { + b.StopTimer() + contents, err := ioutil.ReadFile(filename) + if err != nil { + panic(err) + } + r := &buffer{buf: contents} + b.StartTimer() + for i := 0; i < b.N; i++ { + _, err := Decode(r) + if err != nil { + panic(err) + } + } +} diff --git a/src/pkg/image/tiff/testdata/video-001-uncompressed.tiff b/src/pkg/image/tiff/testdata/video-001-uncompressed.tiff new file mode 100644 index 0000000000000000000000000000000000000000..fad147107b25464111b7b34d7728e99f84fe522a GIT binary patch literal 46674 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