Files
kopia/cli/profile.go
Jarek Kowalski 6fa50640f4 build(deps): manual upgrade to github.com/alecthomas/kingpin/v2 (#2804)
also upgraded github.com/klauspost/reedsolomon to latest non-retracted version
go mod tidy
2023-03-11 06:28:05 -08:00

47 lines
1.3 KiB
Go

package cli
import (
"github.com/alecthomas/kingpin/v2"
"github.com/pkg/profile"
)
type profileFlags struct {
profileDir string
profileCPU bool
profileMemory int
profileBlocking bool
profileMutex bool
}
func (c *profileFlags) setup(app *kingpin.Application) {
app.Flag("profile-dir", "Write profile to the specified directory").Hidden().StringVar(&c.profileDir)
app.Flag("profile-cpu", "Enable CPU profiling").Hidden().BoolVar(&c.profileCPU)
app.Flag("profile-memory", "Enable memory profiling").Hidden().IntVar(&c.profileMemory)
app.Flag("profile-blocking", "Enable block profiling").Hidden().BoolVar(&c.profileBlocking)
app.Flag("profile-mutex", "Enable mutex profiling").Hidden().BoolVar(&c.profileMutex)
}
// withProfiling runs the given callback with profiling enabled, configured according to command line flags.
func (c *profileFlags) withProfiling(callback func() error) error {
if c.profileDir != "" {
pp := profile.ProfilePath(c.profileDir)
if c.profileMemory > 0 {
defer profile.Start(pp, profile.MemProfileRate(c.profileMemory)).Stop()
}
if c.profileCPU {
defer profile.Start(pp, profile.CPUProfile).Stop()
}
if c.profileBlocking {
defer profile.Start(pp, profile.BlockProfile).Stop()
}
if c.profileMutex {
defer profile.Start(pp, profile.MutexProfile).Stop()
}
}
return callback()
}