// Copyright 2020 syzkaller project authors. All rights reserved. // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. package tool import ( "os" "runtime" "runtime/pprof" ) // installProfiling simplifies cpu/memory profiling for command line tools. func installProfiling(cpuprof, memprof string) func() { res := func() {} if cpuprof != "" { f, err := os.Create(cpuprof) if err != nil { Failf("failed to create cpuprofile file: %v", err) } if err := pprof.StartCPUProfile(f); err != nil { Failf("failed to start cpu profile: %v", err) } res = func() { pprof.StopCPUProfile() f.Close() } } if memprof != "" { prev := res res = func() { prev() f, err := os.Create(memprof) if err != nil { Failf("failed to create memprofile file: %v", err) } defer f.Close() runtime.GC() if err := pprof.WriteHeapProfile(f); err != nil { Failf("failed to write mem profile: %v", err) } } } return res }