38 lines
817 B
Go
38 lines
817 B
Go
|
|
package artwork
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"fmt"
|
||
|
|
"image"
|
||
|
|
_ "image/jpeg"
|
||
|
|
_ "image/png"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func BenchmarkImageDecode(b *testing.B) {
|
||
|
|
sizes := []int{300, 1000, 3000}
|
||
|
|
formats := []struct {
|
||
|
|
name string
|
||
|
|
gen func(tb testing.TB, w, h int) []byte
|
||
|
|
}{
|
||
|
|
{"jpeg", func(tb testing.TB, w, h int) []byte { return generateJPEG(tb, w, h, 75) }},
|
||
|
|
{"png", func(tb testing.TB, w, h int) []byte { return generatePNG(tb, w, h) }},
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, format := range formats {
|
||
|
|
for _, size := range sizes {
|
||
|
|
data := format.gen(b, size, size)
|
||
|
|
b.Run(fmt.Sprintf("%s/%dx%d", format.name, size, size), func(b *testing.B) {
|
||
|
|
b.SetBytes(int64(len(data)))
|
||
|
|
b.ResetTimer()
|
||
|
|
for i := 0; i < b.N; i++ {
|
||
|
|
_, _, err := image.Decode(bytes.NewReader(data))
|
||
|
|
if err != nil {
|
||
|
|
b.Fatal(err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|