diff options
| author | Dave Cheney <dave@cheney.net> | 2016-08-01 20:34:12 +1000 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2016-10-12 13:57:26 +0000 |
| commit | 6e759ad2e2ae53f08db4470aa60e972eb908f2ef (patch) | |
| tree | d0c202ca58d72ca69db19bcb2410566c09fa2325 /src | |
| parent | 1a3b739b26e2742fd2febc7c0f87aa8115f390ab (diff) | |
| download | go-6e759ad2e2ae53f08db4470aa60e972eb908f2ef.tar.xz | |
cmd/compile/internal/gc: add runtime/trace support
This change adds runtime/trace support to go tool compile.
Change-Id: I6c496b9b063796123f75eba6af511c53a57c0196
Reviewed-on: https://go-review.googlesource.com/25354
Run-TryBot: Russ Cox <rsc@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/gc/main.go | 1 | ||||
| -rw-r--r-- | src/cmd/compile/internal/gc/trace.go | 27 | ||||
| -rw-r--r-- | src/cmd/compile/internal/gc/util.go | 5 |
3 files changed, 33 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/gc/main.go b/src/cmd/compile/internal/gc/main.go index 5179f68f4a..321f34776a 100644 --- a/src/cmd/compile/internal/gc/main.go +++ b/src/cmd/compile/internal/gc/main.go @@ -208,6 +208,7 @@ func Main() { flag.StringVar(&cpuprofile, "cpuprofile", "", "write cpu profile to `file`") flag.StringVar(&memprofile, "memprofile", "", "write memory profile to `file`") flag.Int64Var(&memprofilerate, "memprofilerate", 0, "set runtime.MemProfileRate to `rate`") + flag.StringVar(&traceprofile, "traceprofile", "", "write an execution trace to `file`") flag.StringVar(&benchfile, "bench", "", "append benchmark times to `file`") obj.Flagparse(usage) diff --git a/src/cmd/compile/internal/gc/trace.go b/src/cmd/compile/internal/gc/trace.go new file mode 100644 index 0000000000..ed4b5a268d --- /dev/null +++ b/src/cmd/compile/internal/gc/trace.go @@ -0,0 +1,27 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package gc + +import ( + "os" + tracepkg "runtime/trace" +) + +func init() { + traceHandler = traceHandlerGo17 +} + +func traceHandlerGo17(traceprofile string) { + f, err := os.Create(traceprofile) + if err != nil { + Fatalf("%v", err) + } + if err := tracepkg.Start(f); err != nil { + Fatalf("%v", err) + } + atExit(tracepkg.Stop) +} diff --git a/src/cmd/compile/internal/gc/util.go b/src/cmd/compile/internal/gc/util.go index 3786769a24..bb5cede5a6 100644 --- a/src/cmd/compile/internal/gc/util.go +++ b/src/cmd/compile/internal/gc/util.go @@ -33,6 +33,8 @@ var ( cpuprofile string memprofile string memprofilerate int64 + traceprofile string + traceHandler func(string) ) func startProfile() { @@ -61,4 +63,7 @@ func startProfile() { } }) } + if traceprofile != "" && traceHandler != nil { + traceHandler(traceprofile) + } } |
