shithub: hugo

Download patch

ref: 1622510a5c651b59a79f64e9dc3cacd24832ec0b
parent: 56d0b658879bbf476810d013176d6568553aa71e
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Mon Feb 17 03:45:14 EST 2020

Add benchmark for content edits

--- a/hugolib/site_benchmark_new_test.go
+++ b/hugolib/site_benchmark_new_test.go
@@ -22,6 +22,8 @@
 	"strings"
 	"testing"
 
+	"github.com/gohugoio/hugo/resources/page"
+
 	qt "github.com/frankban/quicktest"
 )
 
@@ -370,26 +372,68 @@
 	}
 }
 
-// TODO(bep) eventually remove the old (too complicated setup).
 func BenchmarkSiteNew(b *testing.B) {
+	rnd := rand.New(rand.NewSource(32))
 	benchmarks := getBenchmarkSiteNewTestCases()
-
-	for _, bm := range benchmarks {
-		b.Run(bm.name, func(b *testing.B) {
-			sites := make([]*sitesBuilder, b.N)
-			for i := 0; i < b.N; i++ {
-				sites[i] = bm.create(b)
+	for _, edit := range []bool{true, false} {
+		for _, bm := range benchmarks {
+			name := bm.name
+			if edit {
+				name += "/Edit"
 			}
+			b.Run(name, func(b *testing.B) {
+				sites := make([]*sitesBuilder, b.N)
+				for i := 0; i < b.N; i++ {
+					sites[i] = bm.create(b)
+					if edit {
+						sites[i].Running()
+					}
+				}
 
-			b.ResetTimer()
-			for i := 0; i < b.N; i++ {
-				s := sites[i]
-				err := s.BuildE(BuildCfg{})
-				if err != nil {
-					b.Fatal(err)
+				b.ResetTimer()
+				for i := 0; i < b.N; i++ {
+					if edit {
+						b.StopTimer()
+					}
+					s := sites[i]
+					err := s.BuildE(BuildCfg{})
+					if err != nil {
+						b.Fatal(err)
+					}
+					bm.check(s)
+
+					if edit {
+						if edit {
+							b.StartTimer()
+						}
+						// Edit a random page in a random language.
+						pages := s.H.Sites[rnd.Intn(len(s.H.Sites))].Pages()
+						var p page.Page
+						count := 0
+						for {
+							count++
+							if count > 100 {
+								panic("infinite loop")
+							}
+							p = pages[rnd.Intn(len(pages))]
+							if !p.File().IsZero() {
+								break
+							}
+						}
+
+						s.EditFiles(p.File().Filename(), fmt.Sprintf(`---
+title: %s
+---
+
+Edited!!`, p.Title()))
+
+						err := s.BuildE(BuildCfg{})
+						if err != nil {
+							b.Fatal(err)
+						}
+					}
 				}
-				bm.check(s)
-			}
-		})
+			})
+		}
 	}
 }