hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 3becba7a982f39f67c7ee7cff411eae50931c8cd
parent 20bdc69a47b851871bdc4d9be6366fa7f51f25db
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sun,  1 Sep 2019 17:57:35 +0200

resources: Add Exif benchmark

See #6291

Diffstat:
Mresources/image_test.go | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 67 insertions(+), 0 deletions(-)
diff --git a/resources/image_test.go b/resources/image_test.go
@@ -23,6 +23,8 @@ import (
 	"sync"
 	"testing"
 
+	"github.com/spf13/afero"
+
 	"github.com/disintegration/gift"
 
 	"github.com/gohugoio/hugo/helpers"
@@ -358,6 +360,71 @@ func TestImageExif(t *testing.T) {
 
 }
 
+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])
+		}
+
+	})
+
+}
+
 func TestImageOperationsGolden(t *testing.T) {
 	c := qt.New(t)
 	c.Parallel()