diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-04-09 18:54:43 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2018-04-11 10:48:56 +0300 |
commit | fdf1d94ebc7d1aa4855c62237f2edbd4bdade1a7 (patch) | |
tree | faca07a544e098b2482b98ea36933bbf38e80222 /commands | |
parent | 1157fef85908ea54883fe0dba6adc4861ba02162 (diff) |
commands: Make benchmark non-global
See #4598
Diffstat (limited to 'commands')
-rw-r--r-- | commands/benchmark.go | 66 | ||||
-rw-r--r-- | commands/hugo.go | 2 |
2 files changed, 42 insertions, 26 deletions
diff --git a/commands/benchmark.go b/commands/benchmark.go index 4f1041b0e..a31f679e9 100644 --- a/commands/benchmark.go +++ b/commands/benchmark.go @@ -23,50 +23,66 @@ import ( 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 (c *benchmarkCmd) getCommand() *cobra.Command { + return c.cmd } -func init() { - initHugoBuilderFlags(benchmarkCmd) - initBenchmarkBuildingFlags(benchmarkCmd) +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.`, + } + + 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") - 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") + cmd.RunE = c.benchmark - benchmarkCmd.RunE = 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 } } 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 @@ func benchmark(cmd *cobra.Command, args []string) error { } 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 @@ func benchmark(cmd *cobra.Command, args []string) error { 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 } diff --git a/commands/hugo.go b/commands/hugo.go index ec05b7a35..e6c2771fa 100644 --- a/commands/hugo.go +++ b/commands/hugo.go @@ -198,7 +198,7 @@ func AddCommands() { 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) |