ref: 3becba7a982f39f67c7ee7cff411eae50931c8cd
parent: 20bdc69a47b851871bdc4d9be6366fa7f51f25db
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Sun Sep 1 13:57:35 EDT 2019
resources: Add Exif benchmark See #6291
--- a/resources/image_test.go
+++ b/resources/image_test.go
@@ -23,6 +23,8 @@
"sync"
"testing"
+ "github.com/spf13/afero"
+
"github.com/disintegration/gift"
"github.com/gohugoio/hugo/helpers"
@@ -355,6 +357,71 @@
resized, _ := image.Resize("300x200")
x2, _ := resized.Exif()
c.Assert(x2, qt.Equals, x)
+
+}
+
+func BenchmarkImageExif(b *testing.B) {
+
+ getImages := func(c *qt.C, b *testing.B, fs afero.Fs) []resource.Image {
+ spec := newTestResourceSpec(specDescriptor{fs: fs, c: c})
+ images := make([]resource.Image, b.N)
+ for i := 0; i < b.N; i++ {
+ images[i] = fetchImageForSpec(spec, c, "sunset.jpg")
+ }
+ return images
+ }
+
+ getAndCheckExif := func(c *qt.C, image resource.Image) {
+ x, err := image.Exif()
+ c.Assert(err, qt.IsNil)
+ c.Assert(x, qt.Not(qt.IsNil))
+ c.Assert(x.Long, qt.Equals, float64(-4.50846))
+
+ }
+
+ b.Run("Cold cache", func(b *testing.B) {
+ b.StopTimer()
+ c := qt.New(b)
+ images := getImages(c, b, afero.NewMemMapFs())
+
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ getAndCheckExif(c, images[i])
+ }
+
+ })
+
+ b.Run("Cold cache, 10", func(b *testing.B) {
+ b.StopTimer()
+ c := qt.New(b)
+ images := getImages(c, b, afero.NewMemMapFs())
+
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ for j := 0; j < 10; j++ {
+ getAndCheckExif(c, images[i])
+ }
+ }
+
+ })
+
+ b.Run("Warm cache", func(b *testing.B) {
+ b.StopTimer()
+ c := qt.New(b)
+ fs := afero.NewMemMapFs()
+ images := getImages(c, b, fs)
+ for i := 0; i < b.N; i++ {
+ getAndCheckExif(c, images[i])
+ }
+
+ images = getImages(c, b, fs)
+
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ getAndCheckExif(c, images[i])
+ }
+
+ })
}