aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/trace
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2017-12-01 16:13:08 -0500
committerAustin Clements <austin@google.com>2018-05-07 21:38:40 +0000
commit44286b17c5ca6673648ba57b4a9d49ab8dffedf6 (patch)
tree19e9be51dced2da66cd7b6fb8cdd67aed045a39d /src/cmd/trace
parenta8a050819bd4693ea7c6fdc1744038f172c2a439 (diff)
downloadgo-44286b17c5ca6673648ba57b4a9d49ab8dffedf6.tar.gz
go-44286b17c5ca6673648ba57b4a9d49ab8dffedf6.zip
runtime: replace system goroutine whitelist with symbol test
Currently isSystemGoroutine has a hard-coded list of known entry points into system goroutines. This list is annoying to maintain. For example, it's missing the ensureSigM goroutine. Replace it with a check that simply looks for any goroutine with runtime function as its entry point, with a few exceptions. This also matches the definition recently added to the trace viewer (CL 81315). Change-Id: Iaed723d4a6e8c2ffb7c0c48fbac1688b00b30f01 Reviewed-on: https://go-review.googlesource.com/81655 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Keith Randall <khr@golang.org>
Diffstat (limited to 'src/cmd/trace')
-rw-r--r--src/cmd/trace/trace.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/trace/trace.go b/src/cmd/trace/trace.go
index 7a61d5b412..fcba0cbc3f 100644
--- a/src/cmd/trace/trace.go
+++ b/src/cmd/trace/trace.go
@@ -576,7 +576,7 @@ func generateTrace(params *traceParams, consumer traceConsumer) error {
fname := stk[0].Fn
info.name = fmt.Sprintf("G%v %s", newG, fname)
- info.isSystemG = strings.HasPrefix(fname, "runtime.") && fname != "runtime.main"
+ info.isSystemG = isSystemGoroutine(fname)
ctx.gcount++
setGState(ev, newG, gDead, gRunnable)
@@ -1125,6 +1125,12 @@ func (ctx *traceContext) buildBranch(parent frameNode, stk []*trace.Frame) int {
return ctx.buildBranch(node, stk)
}
+func isSystemGoroutine(entryFn string) bool {
+ // This mimics runtime.isSystemGoroutine as closely as
+ // possible.
+ return entryFn != "runtime.main" && strings.HasPrefix(entryFn, "runtime.")
+}
+
// firstTimestamp returns the timestamp of the first event record.
func firstTimestamp() int64 {
res, _ := parseTrace()