ref: fdf1d94ebc7d1aa4855c62237f2edbd4bdade1a7
parent: 1157fef85908ea54883fe0dba6adc4861ba02162
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Apr 9 13:54:43 EDT 2018
commands: Make benchmark non-global See #4598
--- a/commands/benchmark.go
+++ b/commands/benchmark.go
@@ -23,42 +23,58 @@
jww "github.com/spf13/jwalterweatherman"
)
-var (
+var _ cmder = (*benchmarkCmd)(nil)
+
+type cmder interface {
+ getCommand() *cobra.Command
+}
+
+type benchmarkCmd struct {
benchmarkTimes int
cpuProfileFile string
memProfileFile string
-)
-var benchmarkCmd = &cobra.Command{
- Use: "benchmark",
- Short: "Benchmark Hugo by building a site a number of times.",
- Long: `Hugo can build a site many times over and analyze the running process
-creating a benchmark.`,
+ cmd *cobra.Command
}
-func init() {
- initHugoBuilderFlags(benchmarkCmd)
- initBenchmarkBuildingFlags(benchmarkCmd)
+func (c *benchmarkCmd) getCommand() *cobra.Command {
+ return c.cmd
+}
- benchmarkCmd.Flags().StringVar(&cpuProfileFile, "cpuprofile", "", "path/filename for the CPU profile file")
- benchmarkCmd.Flags().StringVar(&memProfileFile, "memprofile", "", "path/filename for the memory profile file")
- benchmarkCmd.Flags().IntVarP(&benchmarkTimes, "count", "n", 13, "number of times to build the site")
+func newBenchmarkCmd() *benchmarkCmd {
+ cmd := &cobra.Command{
+ Use: "benchmark",
+ Short: "Benchmark Hugo by building a site a number of times.",
+ Long: `Hugo can build a site many times over and analyze the running process
+creating a benchmark.`,
+ }
- benchmarkCmd.RunE = benchmark
+ initHugoBuilderFlags(cmd)
+ initBenchmarkBuildingFlags(cmd)
+
+ c := &benchmarkCmd{cmd: cmd}
+
+ cmd.Flags().StringVar(&c.cpuProfileFile, "cpuprofile", "", "path/filename for the CPU profile file")
+ cmd.Flags().StringVar(&c.memProfileFile, "memprofile", "", "path/filename for the memory profile file")
+ cmd.Flags().IntVarP(&c.benchmarkTimes, "count", "n", 13, "number of times to build the site")
+
+ cmd.RunE = c.benchmark
+
+ return c
}
-func benchmark(cmd *cobra.Command, args []string) error {
+func (c *benchmarkCmd) benchmark(cmd *cobra.Command, args []string) error {
cfgInit := func(c *commandeer) error {
return nil
}
- c, err := InitializeConfig(false, cfgInit, benchmarkCmd)
+ comm, err := InitializeConfig(false, cfgInit, c.cmd)
if err != nil {
return err
}
var memProf *os.File
- if memProfileFile != "" {
- memProf, err = os.Create(memProfileFile)
+ if c.memProfileFile != "" {
+ memProf, err = os.Create(c.memProfileFile)
if err != nil {
return err
}
@@ -65,8 +81,8 @@
}
var cpuProf *os.File
- if cpuProfileFile != "" {
- cpuProf, err = os.Create(cpuProfileFile)
+ if c.cpuProfileFile != "" {
+ cpuProf, err = os.Create(c.cpuProfileFile)
if err != nil {
return err
}
@@ -81,8 +97,8 @@
}
t := time.Now()
- for i := 0; i < benchmarkTimes; i++ {
- if err = c.resetAndBuildSites(); err != nil {
+ for i := 0; i < c.benchmarkTimes; i++ {
+ if err = comm.resetAndBuildSites(); err != nil {
return err
}
}
@@ -102,9 +118,9 @@
totalMallocs := memStats.Mallocs - mallocs
jww.FEEDBACK.Println()
- jww.FEEDBACK.Printf("Average time per operation: %vms\n", int(1000*totalTime.Seconds()/float64(benchmarkTimes)))
- jww.FEEDBACK.Printf("Average memory allocated per operation: %vkB\n", totalMemAllocated/uint64(benchmarkTimes)/1024)
- jww.FEEDBACK.Printf("Average allocations per operation: %v\n", totalMallocs/uint64(benchmarkTimes))
+ jww.FEEDBACK.Printf("Average time per operation: %vms\n", int(1000*totalTime.Seconds()/float64(c.benchmarkTimes)))
+ jww.FEEDBACK.Printf("Average memory allocated per operation: %vkB\n", totalMemAllocated/uint64(c.benchmarkTimes)/1024)
+ jww.FEEDBACK.Printf("Average allocations per operation: %v\n", totalMallocs/uint64(c.benchmarkTimes))
return nil
}
--- a/commands/hugo.go
+++ b/commands/hugo.go
@@ -198,7 +198,7 @@
HugoCmd.AddCommand(envCmd)
HugoCmd.AddCommand(configCmd)
HugoCmd.AddCommand(checkCmd)
- HugoCmd.AddCommand(benchmarkCmd)
+ HugoCmd.AddCommand(newBenchmarkCmd().getCommand())
HugoCmd.AddCommand(convertCmd)
HugoCmd.AddCommand(newCmd)
HugoCmd.AddCommand(listCmd)