diff options
| author | Hana (Hyang-Ah) Kim <hyangah@gmail.com> | 2018-11-06 17:48:08 -0500 |
|---|---|---|
| committer | Hyang-Ah Hana Kim <hyangah@gmail.com> | 2018-11-07 12:27:21 +0000 |
| commit | c0a40e4fe5d4649672d0d430ca26551841fc4852 (patch) | |
| tree | 4ccd82b68f0795d68bc43caff3cba7c9fabdb4d8 /src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go | |
| parent | 1100df58238a1b1c55af148a880b48caf4be6504 (diff) | |
| download | go-c0a40e4fe5d4649672d0d430ca26551841fc4852.tar.xz | |
cmd/vendor: update github.com/google/pprof
Sync @ fde099a (Oct 26, 2018)
Also update misc/nacl/testzip.proto to include new testdata.
Change-Id: If41590be9f395a591056e89a417b589c4ba71b1a
Reviewed-on: https://go-review.googlesource.com/c/147979
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go')
| -rw-r--r-- | src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go b/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go index cd72bf2ab1..aebd1bf0e8 100644 --- a/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go +++ b/src/cmd/vendor/github.com/google/pprof/internal/graph/graph.go @@ -19,6 +19,7 @@ import ( "fmt" "math" "path/filepath" + "regexp" "sort" "strconv" "strings" @@ -26,6 +27,12 @@ import ( "github.com/google/pprof/profile" ) +var ( + javaRegExp = regexp.MustCompile(`^(?:[a-z]\w*\.)*([A-Z][\w\$]*\.(?:<init>|[a-z]\w*(?:\$\d+)?))(?:(?:\()|$)`) + goRegExp = regexp.MustCompile(`^(?:[\w\-\.]+\/)+(.+)`) + cppRegExp = regexp.MustCompile(`^(?:(?:\(anonymous namespace\)::)(\w+$))|(?:(?:\(anonymous namespace\)::)?(?:[_a-zA-Z]\w*\::|)*(_*[A-Z]\w*::~?[_a-zA-Z]\w*)$)`) +) + // Graph summarizes a performance profile into a format that is // suitable for visualization. type Graph struct { @@ -420,6 +427,16 @@ func newTree(prof *profile.Profile, o *Options) (g *Graph) { return selectNodesForGraph(nodes, o.DropNegative) } +// ShortenFunctionName returns a shortened version of a function's name. +func ShortenFunctionName(f string) string { + for _, re := range []*regexp.Regexp{goRegExp, javaRegExp, cppRegExp} { + if matches := re.FindStringSubmatch(f); len(matches) >= 2 { + return strings.Join(matches[1:], "") + } + } + return f +} + // TrimTree trims a Graph in forest form, keeping only the nodes in kept. This // will not work correctly if even a single node has multiple parents. func (g *Graph) TrimTree(kept NodePtrSet) { @@ -512,9 +529,7 @@ func isNegative(n *Node) bool { // CreateNodes creates graph nodes for all locations in a profile. It // returns set of all nodes, plus a mapping of each location to the -// set of corresponding nodes (one per location.Line). If kept is -// non-nil, only nodes in that set are included; nodes that do not -// match are represented as a nil. +// set of corresponding nodes (one per location.Line). func CreateNodes(prof *profile.Profile, o *Options) (Nodes, map[uint64]Nodes) { locations := make(map[uint64]Nodes, len(prof.Location)) nm := make(NodeMap, len(prof.Location)) @@ -564,13 +579,13 @@ func nodeInfo(l *profile.Location, line profile.Line, objfile string, o *Options if fname := line.Function.Filename; fname != "" { ni.File = filepath.Clean(fname) } - if o.ObjNames { - ni.Objfile = objfile - ni.StartLine = int(line.Function.StartLine) - } if o.OrigFnNames { ni.OrigName = line.Function.SystemName } + if o.ObjNames || (ni.Name == "" && ni.OrigName == "") { + ni.Objfile = objfile + ni.StartLine = int(line.Function.StartLine) + } return ni } |
