1// Copyright 2018 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package main 6 7import ( 8 "fmt" 9 "os" 10 "runtime/pprof" 11 "time" 12) 13 14func init() { 15 register("TimeProf", TimeProf) 16} 17 18func TimeProf() { 19 f, err := os.CreateTemp("", "timeprof") 20 if err != nil { 21 fmt.Fprintln(os.Stderr, err) 22 os.Exit(2) 23 } 24 25 if err := pprof.StartCPUProfile(f); err != nil { 26 fmt.Fprintln(os.Stderr, err) 27 os.Exit(2) 28 } 29 30 t0 := time.Now() 31 // We should get a profiling signal 100 times a second, 32 // so running for 1/10 second should be sufficient. 33 for time.Since(t0) < time.Second/10 { 34 } 35 36 pprof.StopCPUProfile() 37 38 name := f.Name() 39 if err := f.Close(); err != nil { 40 fmt.Fprintln(os.Stderr, err) 41 os.Exit(2) 42 } 43 44 fmt.Println(name) 45} 46