// Package "performance" provides a tracker to observer CPU performance during // execution. package performance import ( "os" "path/filepath" "runtime/pprof" ) // Observes a reduction process, and publishes a CPU performance profile on // completion. type Tracker struct { File string filePointer *os.File Error error } // Create a performance tracker that outputs a profile to "file". func Track(file string) *Tracker { return &Tracker{File: file} } // Begin profiling. func (t *Tracker) Start() { var absPath string absPath, t.Error = filepath.Abs(t.File) if t.Error != nil { return } t.Error = os.MkdirAll(filepath.Dir(absPath), 0777) if t.Error != nil { return } t.filePointer, t.Error = os.Create(absPath) if t.Error != nil { return } t.Error = pprof.StartCPUProfile(t.filePointer) if t.Error != nil { return } } // Stop profiling. func (t *Tracker) End() { pprof.StopCPUProfile() t.filePointer.Close() }