diff options
| author | Felix Geisendörfer <felix.geisendoerfer@datadoghq.com> | 2024-08-27 21:07:57 +0200 |
|---|---|---|
| committer | Michael Knyszek <mknyszek@google.com> | 2024-09-23 15:02:42 +0000 |
| commit | 6eb40d158a80985460afc3924c4239dc97a34ae0 (patch) | |
| tree | 3df8096e85d0add2cab2ae19007c3733f16e26f8 /src/cmd/trace | |
| parent | 89a5a60da623ca9e7f91a93cd34b35785e30ab7e (diff) | |
| download | go-6eb40d158a80985460afc3924c4239dc97a34ae0.tar.xz | |
cmd/trace,internal/trace,runtime: refactor to access frames via range over func
Change-Id: Id0be0eb35ae8560bd5338ec296a086aaf4617db0
Reviewed-on: https://go-review.googlesource.com/c/go/+/608856
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Diffstat (limited to 'src/cmd/trace')
| -rw-r--r-- | src/cmd/trace/gstate.go | 12 | ||||
| -rw-r--r-- | src/cmd/trace/pprof.go | 20 | ||||
| -rw-r--r-- | src/cmd/trace/regions.go | 5 | ||||
| -rw-r--r-- | src/cmd/trace/viewer.go | 5 |
4 files changed, 19 insertions, 23 deletions
diff --git a/src/cmd/trace/gstate.go b/src/cmd/trace/gstate.go index 76c58073b3..ea501ef57d 100644 --- a/src/cmd/trace/gstate.go +++ b/src/cmd/trace/gstate.go @@ -362,11 +362,9 @@ func (gs *gState[R]) rangeEnd(ts trace.Time, name string, stack trace.Stack, ctx delete(gs.activeRanges, name) } -func lastFunc(s trace.Stack) string { - var last trace.StackFrame - s.Frames()(func(f trace.StackFrame) bool { - last = f - return true - }) - return last.Func +func lastFunc(s trace.Stack) (fn string) { + for frame := range s.Frames() { + fn = frame.Func + } + return } diff --git a/src/cmd/trace/pprof.go b/src/cmd/trace/pprof.go index 856b97b75f..d27dfa7aa3 100644 --- a/src/cmd/trace/pprof.go +++ b/src/cmd/trace/pprof.go @@ -306,19 +306,19 @@ func (m *stackMap) profile() []traceviewer.ProfileRecord { prof := make([]traceviewer.ProfileRecord, 0, len(m.stacks)) for stack, record := range m.stacks { rec := *record - i := 0 - stack.Frames()(func(frame trace.StackFrame) bool { + for i, frame := range slices.Collect(stack.Frames()) { rec.Stack = append(rec.Stack, &trace.Frame{ PC: frame.PC, Fn: frame.Func, File: frame.File, Line: int(frame.Line), }) - i++ // Cut this off at pprofMaxStack because that's as far // as our deduplication goes. - return i < pprofMaxStack - }) + if i >= pprofMaxStack { + break + } + } prof = append(prof, rec) } return prof @@ -326,10 +326,10 @@ func (m *stackMap) profile() []traceviewer.ProfileRecord { // pcsForStack extracts the first pprofMaxStack PCs from stack into pcs. func pcsForStack(stack trace.Stack, pcs *[pprofMaxStack]uint64) { - i := 0 - stack.Frames()(func(frame trace.StackFrame) bool { + for i, frame := range slices.Collect(stack.Frames()) { pcs[i] = frame.PC - i++ - return i < len(pcs) - }) + if i >= len(pcs) { + break + } + } } diff --git a/src/cmd/trace/regions.go b/src/cmd/trace/regions.go index cae38355a5..4073b6b07d 100644 --- a/src/cmd/trace/regions.go +++ b/src/cmd/trace/regions.go @@ -72,10 +72,9 @@ func fingerprintRegion(r *trace.UserRegionSummary) regionFingerprint { func regionTopStackFrame(r *trace.UserRegionSummary) trace.StackFrame { var frame trace.StackFrame if r.Start != nil && r.Start.Stack() != trace.NoStack { - r.Start.Stack().Frames()(func(f trace.StackFrame) bool { + for f := range r.Start.Stack().Frames() { frame = f - return false - }) + } } return frame } diff --git a/src/cmd/trace/viewer.go b/src/cmd/trace/viewer.go index c367c7d636..6ce74b75b8 100644 --- a/src/cmd/trace/viewer.go +++ b/src/cmd/trace/viewer.go @@ -15,15 +15,14 @@ import ( // used to store the frames to reduce allocations. func viewerFrames(stk trace.Stack) []*trace.Frame { var frames []*trace.Frame - stk.Frames()(func(f trace.StackFrame) bool { + for f := range stk.Frames() { frames = append(frames, &trace.Frame{ PC: f.PC, Fn: f.Func, File: f.File, Line: int(f.Line), }) - return true - }) + } return frames } |
