aboutsummaryrefslogtreecommitdiff
path: root/src/image
diff options
context:
space:
mode:
authorNigel Tao <nigeltao@golang.org>2020-08-14 00:04:05 +1000
committerNigel Tao <nigeltao@golang.org>2020-08-17 00:08:54 +0000
commitf7fc25ed5a16ee7678680ffd0bcc3078cc249e0a (patch)
tree702ebd34c07c289ce177036c204bd5bf9f8aed31 /src/image
parentc810c6db101b53154b06f9ef1ff7455aaff16c36 (diff)
downloadgo-f7fc25ed5a16ee7678680ffd0bcc3078cc249e0a.tar.gz
go-f7fc25ed5a16ee7678680ffd0bcc3078cc249e0a.zip
image/gif: add more writer benchmarks
The two existing benchmarks encode randomized pixels, which isn't very representative. The two new benchmarks encode a PNG photo as a GIF. Also rename the benchmarks for consistency. Also fix the bytes-per-op measure for paletted images, which are 1 (not 4) bytes per pixel. Also simplify BenchmarkEncodeRandomPaletted (formerly just called BenchmarkEncode). It doesn't need to generate a random palette (and the GIF encoder largely doesn't care about the palette's RGBA values). Use palette.Plan9 instead, a pre-existing 256-element color palette. Change-Id: I10a6ea4e9590bb0d9f76e8cc0f4a88d43b1d650d Reviewed-on: https://go-review.googlesource.com/c/go/+/248218 Reviewed-by: David Symonds <dsymonds@golang.org>
Diffstat (limited to 'src/image')
-rw-r--r--src/image/gif/writer_test.go53
1 files changed, 38 insertions, 15 deletions
diff --git a/src/image/gif/writer_test.go b/src/image/gif/writer_test.go
index 9b15c8d99d..5d1b2c439e 100644
--- a/src/image/gif/writer_test.go
+++ b/src/image/gif/writer_test.go
@@ -9,6 +9,7 @@ import (
"image"
"image/color"
"image/color/palette"
+ "image/draw"
_ "image/png"
"io/ioutil"
"math/rand"
@@ -656,25 +657,14 @@ func TestEncodeWrappedImage(t *testing.T) {
}
}
-func BenchmarkEncode(b *testing.B) {
+func BenchmarkEncodeRandomPaletted(b *testing.B) {
+ img := image.NewPaletted(image.Rect(0, 0, 640, 480), palette.Plan9)
rnd := rand.New(rand.NewSource(123))
-
- // Restrict to a 256-color paletted image to avoid quantization path.
- palette := make(color.Palette, 256)
- for i := range palette {
- palette[i] = color.RGBA{
- uint8(rnd.Intn(256)),
- uint8(rnd.Intn(256)),
- uint8(rnd.Intn(256)),
- 255,
- }
- }
- img := image.NewPaletted(image.Rect(0, 0, 640, 480), palette)
for i := range img.Pix {
img.Pix[i] = uint8(rnd.Intn(256))
}
- b.SetBytes(640 * 480 * 4)
+ b.SetBytes(640 * 480 * 1)
b.ReportAllocs()
b.ResetTimer()
for i := 0; i < b.N; i++ {
@@ -682,7 +672,7 @@ func BenchmarkEncode(b *testing.B) {
}
}
-func BenchmarkQuantizedEncode(b *testing.B) {
+func BenchmarkEncodeRandomRGBA(b *testing.B) {
img := image.NewRGBA(image.Rect(0, 0, 640, 480))
bo := img.Bounds()
rnd := rand.New(rand.NewSource(123))
@@ -696,6 +686,7 @@ func BenchmarkQuantizedEncode(b *testing.B) {
})
}
}
+
b.SetBytes(640 * 480 * 4)
b.ReportAllocs()
b.ResetTimer()
@@ -703,3 +694,35 @@ func BenchmarkQuantizedEncode(b *testing.B) {
Encode(ioutil.Discard, img, nil)
}
}
+
+func BenchmarkEncodeRealisticPaletted(b *testing.B) {
+ rgba, err := readImg("../testdata/video-001.png")
+ if err != nil {
+ b.Fatalf("readImg: %v", err)
+ }
+ bo := rgba.Bounds()
+ img := image.NewPaletted(bo, palette.Plan9)
+ draw.Draw(img, bo, rgba, bo.Min, draw.Src)
+
+ b.SetBytes(int64(bo.Dx() * bo.Dy() * 1))
+ b.ReportAllocs()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ Encode(ioutil.Discard, img, nil)
+ }
+}
+
+func BenchmarkEncodeRealisticRGBA(b *testing.B) {
+ img, err := readImg("../testdata/video-001.png")
+ if err != nil {
+ b.Fatalf("readImg: %v", err)
+ }
+ bo := img.Bounds()
+
+ b.SetBytes(int64(bo.Dx() * bo.Dy() * 4))
+ b.ReportAllocs()
+ b.ResetTimer()
+ for i := 0; i < b.N; i++ {
+ Encode(ioutil.Discard, img, nil)
+ }
+}