From: Dmitry Vyukov Date: Fri, 12 Dec 2014 17:56:36 +0000 (+0100) Subject: runtime/pprof: add tracing support X-Git-Tag: go1.5beta1~2243 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=986a1d2d1c4000955c5b63cf9a87cba91367b701;p=gostls13.git runtime/pprof: add tracing support runtime/pprof part of tracing functionality: https://docs.google.com/document/u/1/d/1FP5apqzBgr7ahCCgFO-yoVhk4YZrNIDNf9RybngBc14/pub Full change: https://codereview.appspot.com/146920043 Change-Id: I3143a569cbd33576f19ca47308d1ff5200d8c955 Reviewed-on: https://go-review.googlesource.com/1452 Reviewed-by: Russ Cox --- diff --git a/src/runtime/pprof/pprof.go b/src/runtime/pprof/pprof.go index 236de54f38..b3d0ae9b64 100644 --- a/src/runtime/pprof/pprof.go +++ b/src/runtime/pprof/pprof.go @@ -615,6 +615,33 @@ func StopCPUProfile() { <-cpu.done } +// TODO(rsc): Decide if StartTrace belongs in this package. +// See golang.org/issue/9710. +// StartTrace enables tracing for the current process. +// While tracing, the trace will be buffered and written to w. +// StartTrace returns an error if profiling is tracing enabled. +func StartTrace(w io.Writer) error { + if err := runtime.StartTrace(); err != nil { + return err + } + go func() { + for { + data := runtime.ReadTrace() + if data == nil { + break + } + w.Write(data) + } + }() + return nil +} + +// StopTrace stops the current tracing, if any. +// StopTrace only returns after all the writes for the trace have completed. +func StopTrace() { + runtime.StopTrace() +} + type byCycles []runtime.BlockProfileRecord func (x byCycles) Len() int { return len(x) }