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