]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.r57] image: png & jpeg encoding benchmarks
authorRuss Cox <rsc@golang.org>
Tue, 3 May 2011 05:15:26 +0000 (01:15 -0400)
committerRuss Cox <rsc@golang.org>
Tue, 3 May 2011 05:15:26 +0000 (01:15 -0400)
««« CL 4445074 / 304d7d2b1d6c
image: png & jpeg encoding benchmarks

No code changes in this CL.

R=r
CC=golang-dev
https://golang.org/cl/4445074
»»»

R=adg
CC=golang-dev
https://golang.org/cl/4453056

src/pkg/image/jpeg/writer_test.go
src/pkg/image/png/writer_test.go

index 00922dd5ce11346aa48d8db916b9ce63e43bfe08..7aec70f016e295435c02ccd7099df87a8876328f 100644 (file)
@@ -8,6 +8,8 @@ import (
        "bytes"
        "image"
        "image/png"
+       "io/ioutil"
+       "rand"
        "os"
        "testing"
 )
@@ -85,3 +87,29 @@ func TestWriter(t *testing.T) {
                }
        }
 }
+
+func BenchmarkEncodeRGBOpaque(b *testing.B) {
+       b.StopTimer()
+       img := image.NewRGBA(640, 480)
+       // Set all pixels to 0xFF alpha to force opaque mode.
+       bo := img.Bounds()
+       rnd := rand.New(rand.NewSource(123))
+       for y := bo.Min.Y; y < bo.Max.Y; y++ {
+               for x := bo.Min.X; x < bo.Max.X; x++ {
+                       img.Set(x, y, image.RGBAColor{
+                               uint8(rnd.Intn(256)),
+                               uint8(rnd.Intn(256)),
+                               uint8(rnd.Intn(256)),
+                               255})
+               }
+       }
+       if !img.Opaque() {
+               panic("expected image to be opaque")
+       }
+       b.SetBytes(640 * 480 * 4)
+       b.StartTimer()
+       options := &Options{Quality: 90}
+       for i := 0; i < b.N; i++ {
+               Encode(ioutil.Discard, img, options)
+       }
+}
index 4d9929f314fb966ef8516878b1387ee51bc24899..6b054aaa893c9c0754de033664b7f280789b7cea 100644 (file)
@@ -5,10 +5,10 @@
 package png
 
 import (
-       "bytes"
        "fmt"
        "image"
        "io"
+       "io/ioutil"
        "os"
        "testing"
 )
@@ -81,10 +81,42 @@ func BenchmarkEncodePaletted(b *testing.B) {
                        image.RGBAColor{0, 0, 0, 255},
                        image.RGBAColor{255, 255, 255, 255},
                })
+       b.SetBytes(640 * 480 * 1)
        b.StartTimer()
-       buffer := new(bytes.Buffer)
        for i := 0; i < b.N; i++ {
-               buffer.Reset()
-               Encode(buffer, img)
+               Encode(ioutil.Discard, img)
+       }
+}
+
+func BenchmarkEncodeRGBOpaque(b *testing.B) {
+       b.StopTimer()
+       img := image.NewRGBA(640, 480)
+       // Set all pixels to 0xFF alpha to force opaque mode.
+       bo := img.Bounds()
+       for y := bo.Min.Y; y < bo.Max.Y; y++ {
+               for x := bo.Min.X; x < bo.Max.X; x++ {
+                       img.Set(x, y, image.RGBAColor{0, 0, 0, 255})
+               }
+       }
+       if !img.Opaque() {
+               panic("expected image to be opaque")
+       }
+       b.SetBytes(640 * 480 * 4)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               Encode(ioutil.Discard, img)
+       }
+}
+
+func BenchmarkEncodeRGBA(b *testing.B) {
+       b.StopTimer()
+       img := image.NewRGBA(640, 480)
+       if img.Opaque() {
+               panic("expected image to not be opaque")
+       }
+       b.SetBytes(640 * 480 * 4)
+       b.StartTimer()
+       for i := 0; i < b.N; i++ {
+               Encode(ioutil.Discard, img)
        }
 }