diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-09-01 17:57:35 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-09-01 18:02:49 +0200 |
commit | 3becba7a982f39f67c7ee7cff411eae50931c8cd (patch) | |
tree | 564f096735ea5236b9f5565bf39d1f470f1b08d4 | |
parent | 20bdc69a47b851871bdc4d9be6366fa7f51f25db (diff) |
resources: Add Exif benchmark
See #6291
-rw-r--r-- | resources/image_test.go | 67 |
1 files changed, 67 insertions, 0 deletions
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() |