shithub: hugo

Download patch

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])
+		}
+
+	})
 
 }