commit 3bdb8c52844faed6a2cef991282bb0a2dfaaca1b
parent 9c8b739f420eb05dfa848dabfe89309d5af9344b
Author: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Date: Thu, 7 Mar 2024 15:17:13 +0800
webp: benchmark decode
Benchmark stdlib webp vs transpiled vs dynamic.
Signed-off-by: Jack Mordaunt <jackmordaunt.dev@gmail.com>
Diffstat:
2 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/webp/decode.go b/webp/decode.go
@@ -22,6 +22,17 @@ func Decode(r io.Reader) (image.Image, error) {
return transpiled.DecodeImpl(by)
}
+func decodeDynamic(by []byte) (image.Image, error) {
+ if err := dynamic.Init(); err != nil {
+ return nil, err
+ }
+ return dynamic.DecodeImpl(by)
+}
+
+func decodeTranspiled(by []byte) (image.Image, error) {
+ return transpiled.DecodeImpl(by)
+}
+
// DecodeConfig returns the color model and dimensions of a WEBP image without
// decoding the entire image.
func DecodeConfig(r io.Reader) (image.Config, error) {
diff --git a/webp/webp_test.go b/webp/webp_test.go
@@ -48,6 +48,37 @@ func TestLossless(t *testing.T) {
})
}
+func BenchmarkDecode(b *testing.B) {
+ b.Run("stdwebp", func(b *testing.B) {
+ for ii := 0; ii < b.N; ii++ {
+ r := bytes.NewReader(goldenOut)
+ m, err := stdwebp.Decode(r)
+ if err != nil {
+ b.Fatalf("error: %v", err)
+ }
+ _ = m
+ }
+ })
+ b.Run("transpiled", func(b *testing.B) {
+ for ii := 0; ii < b.N; ii++ {
+ m, err := decodeTranspiled(goldenOut)
+ if err != nil {
+ b.Fatalf("error: %v", err)
+ }
+ _ = m
+ }
+ })
+ b.Run("dynamic", func(b *testing.B) {
+ for ii := 0; ii < b.N; ii++ {
+ m, err := decodeDynamic(goldenOut)
+ if err != nil {
+ b.Fatalf("error: %v", err)
+ }
+ _ = m
+ }
+ })
+}
+
func assertOutput(t *testing.T, m image.Image, src io.Reader, decode func(io.Reader) (image.Image, error)) {
t.Helper()