From 3becba7a982f39f67c7ee7cff411eae50931c8cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sun, 1 Sep 2019 17:57:35 +0200 Subject: [PATCH] resources: Add Exif benchmark See #6291 --- resources/image_test.go | 67 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/resources/image_test.go b/resources/image_test.go index 4968190e9..dc5e0a217 100644 --- 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()