github.com/icyphox/x@v0.0.355-0.20220311094250-029bd783e8b8/profilex/profiling.go (about) 1 package profilex 2 3 import ( 4 "os" 5 6 "github.com/pkg/profile" 7 ) 8 9 type noop struct{} 10 11 // Stop is a noop. 12 func (p *noop) Stop() {} 13 14 // Profile parses the PROFILING environment variable and executes the proper profiling task. 15 func Profile() interface { 16 Stop() 17 } { 18 switch os.Getenv("PROFILING") { 19 case "cpu": 20 return profile.Start(profile.CPUProfile, profile.NoShutdownHook) 21 case "mem": 22 return profile.Start(profile.MemProfile, profile.NoShutdownHook) 23 case "mutex": 24 return profile.Start(profile.MutexProfile, profile.NoShutdownHook) 25 case "block": 26 return profile.Start(profile.BlockProfile, profile.NoShutdownHook) 27 } 28 return new(noop) 29 } 30 31 // HelpMessage returns a string explaining how profiling works. 32 func HelpMessage() string { 33 return `- PROFILING: Set "PROFILING=cpu" to enable cpu profiling and "PROFILING=mem" to enable memory profiling. 34 It is not possible to do both at the same time. Profiling is disabled per default. 35 36 Example: PROFILING=cpu` 37 }