aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/vendor/github.com/google/pprof
diff options
context:
space:
mode:
authorDmitri Shuralyov <dmitshur@golang.org>2025-02-11 18:08:32 -0500
committerGopher Robot <gobot@golang.org>2025-02-12 20:49:10 -0800
commitf2cadb6b2e589247be6730e8cb13c23d88450fbf (patch)
treebfd23204cb5505d6adc53e4de5250ef5fcc7eb83 /src/cmd/vendor/github.com/google/pprof
parent679cd8e7798db593d0973519f6d3ee7ea7659142 (diff)
downloadgo-f2cadb6b2e589247be6730e8cb13c23d88450fbf.tar.xz
cmd/pprof: update vendored github.com/google/pprof [generated]
Pull in the latest published version of github.com/google/pprof as part of the continuous process of keeping Go's dependencies up to date. For #36905. [git-generate] cd src/cmd go get github.com/google/pprof@v0.0.0-20250208200701-d0013a598941 go mod tidy go mod vendor Change-Id: I87e5621286d3db85f358fb86875aaf65bd7811a9 Reviewed-on: https://go-review.googlesource.com/c/go/+/648916 Auto-Submit: Dmitri Shuralyov <dmitshur@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Diffstat (limited to 'src/cmd/vendor/github.com/google/pprof')
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js4
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/report/report.go33
-rw-r--r--src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go14
3 files changed, 37 insertions, 14 deletions
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js
index 484c2d7590..7db06996da 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js
+++ b/src/cmd/vendor/github.com/google/pprof/internal/driver/html/stacks.js
@@ -135,7 +135,9 @@ function stackViewer(stacks, nodes) {
}
// Update params to include src.
- let v = pprofQuoteMeta(stacks.Sources[src].FullName);
+ // When `pprof` is invoked with `-lines`, FullName will be suffixed with `:<line>`,
+ // which we need to remove.
+ let v = pprofQuoteMeta(stacks.Sources[src].FullName.replace(/:[0-9]+$/, ''));
if (param != 'f' && param != 'sf') { // old f,sf values are overwritten
// Add new source to current parameter value.
const old = params.get(param);
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/report/report.go b/src/cmd/vendor/github.com/google/pprof/internal/report/report.go
index 8e73f179ec..9d52872b7d 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/report/report.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/report/report.go
@@ -699,13 +699,17 @@ func printTags(w io.Writer, rpt *Report) error {
p := rpt.prof
o := rpt.options
- formatTag := func(v int64, key string) string {
- return measurement.ScaledLabel(v, key, o.OutputUnit)
+ formatTag := func(v int64, unit string) string {
+ return measurement.ScaledLabel(v, unit, o.OutputUnit)
}
- // Hashtable to keep accumulate tags as key,value,count.
+ // Accumulate tags as key,value,count.
tagMap := make(map[string]map[string]int64)
+ // Note that we assume single value per tag per sample. Multiple values are
+ // encodable in the format but are discouraged.
+ tagTotalMap := make(map[string]int64)
for _, s := range p.Sample {
+ sampleValue := o.SampleValue(s.Value)
for key, vals := range s.Label {
for _, val := range vals {
valueMap, ok := tagMap[key]
@@ -713,7 +717,8 @@ func printTags(w io.Writer, rpt *Report) error {
valueMap = make(map[string]int64)
tagMap[key] = valueMap
}
- valueMap[val] += o.SampleValue(s.Value)
+ valueMap[val] += sampleValue
+ tagTotalMap[key] += sampleValue
}
}
for key, vals := range s.NumLabel {
@@ -725,7 +730,8 @@ func printTags(w io.Writer, rpt *Report) error {
valueMap = make(map[string]int64)
tagMap[key] = valueMap
}
- valueMap[val] += o.SampleValue(s.Value)
+ valueMap[val] += sampleValue
+ tagTotalMap[key] += sampleValue
}
}
}
@@ -736,22 +742,23 @@ func printTags(w io.Writer, rpt *Report) error {
}
tabw := tabwriter.NewWriter(w, 0, 0, 1, ' ', tabwriter.AlignRight)
for _, tagKey := range graph.SortTags(tagKeys, true) {
- var total int64
key := tagKey.Name
tags := make([]*graph.Tag, 0, len(tagMap[key]))
for t, c := range tagMap[key] {
- total += c
tags = append(tags, &graph.Tag{Name: t, Flat: c})
}
- f, u := measurement.Scale(total, o.SampleUnit, o.OutputUnit)
- fmt.Fprintf(tabw, "%s:\t Total %.1f%s\n", key, f, u)
+ tagTotal, profileTotal := tagTotalMap[key], rpt.Total()
+ if profileTotal > 0 {
+ fmt.Fprintf(tabw, "%s:\t Total %s of %s (%s)\n", key, rpt.formatValue(tagTotal), rpt.formatValue(profileTotal), measurement.Percentage(tagTotal, profileTotal))
+ } else {
+ fmt.Fprintf(tabw, "%s:\t Total %s of %s\n", key, rpt.formatValue(tagTotal), rpt.formatValue(profileTotal))
+ }
for _, t := range graph.SortTags(tags, true) {
- f, u := measurement.Scale(t.FlatValue(), o.SampleUnit, o.OutputUnit)
- if total > 0 {
- fmt.Fprintf(tabw, " \t%.1f%s (%s):\t %s\n", f, u, measurement.Percentage(t.FlatValue(), total), t.Name)
+ if profileTotal > 0 {
+ fmt.Fprintf(tabw, " \t%s (%s):\t %s\n", rpt.formatValue(t.FlatValue()), measurement.Percentage(t.FlatValue(), profileTotal), t.Name)
} else {
- fmt.Fprintf(tabw, " \t%.1f%s:\t %s\n", f, u, t.Name)
+ fmt.Fprintf(tabw, " \t%s:\t %s\n", rpt.formatValue(t.FlatValue()), t.Name)
}
}
fmt.Fprintln(tabw)
diff --git a/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go b/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go
index 0d45136461..95c15b1366 100644
--- a/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go
+++ b/src/cmd/vendor/github.com/google/pprof/internal/symbolizer/symbolizer.go
@@ -257,6 +257,10 @@ func Demangle(prof *profile.Profile, force bool, demanglerMode string) {
}
options := demanglerModeToOptions(demanglerMode)
+ // Bail out fast to avoid any parsing, if we really don't want any demangling.
+ if len(options) == 0 {
+ return
+ }
for _, fn := range prof.Function {
demangleSingleFunction(fn, options)
}
@@ -288,6 +292,16 @@ func demangleSingleFunction(fn *profile.Function, options []demangle.Option) {
fn.Name = demangled
return
}
+
+ // OSX has all the symbols prefixed with extra '_' so lets try
+ // once more without it
+ if strings.HasPrefix(fn.SystemName, "_") {
+ if demangled := demangle.Filter(fn.SystemName[1:], o...); demangled != fn.SystemName {
+ fn.Name = demangled
+ return
+ }
+ }
+
// Could not demangle. Apply heuristics in case the name is
// already demangled.
name := fn.SystemName