status-im/status-go

View on GitHub
profiling/cpu.go

Summary

Maintainability
A
0 mins
Test Coverage
D
66%
package profiling

import (
    "errors"
    "os"
    "path/filepath"
    "runtime/pprof"
)

// CPUFilename is a filename in which the CPU profiling is stored.
const CPUFilename = "status_cpu.prof"

var cpuFile *os.File

// StartCPUProfile enables CPU profiling for the current process. While profiling,
// the profile will be buffered and written to the file in folder dataDir.
func StartCPUProfile(dataDir string) error {
    if cpuFile != nil {
        return errors.New("cpu profiling is already started")
    }

    var err error
    cpuFile, err = os.Create(filepath.Join(dataDir, CPUFilename))
    if err != nil {
        return err
    }

    return pprof.StartCPUProfile(cpuFile)
}

// StopCPUProfile stops the current CPU profile, if any, and closes the file.
func StopCPUProfile() error {
    if cpuFile == nil {
        return nil
    }
    pprof.StopCPUProfile()
    err := cpuFile.Close()
    cpuFile = nil
    return err
}