Skip to content

Commit e57f24a

Browse files
committed
cmd/trace: don't drop sweep slice details
For sweep events, we used to modify the ViewerEvent returned from ctx.emitSlice later in order to embed more details about the sweep operation. The trick no longer works after the change https://golang.org/cl/92375 and caused a regression. ctx.emit method encodes the ViewerEvent, so any modification to the ViewerEvent object after ctx.emit returns will not be reflected. Refactor ctx.emitSlice, so ctx.makeSlice can be used when producing slices for SWEEP. ctx.emit* methods are meant to truely emit ViewerEvents. Fixes #27711 Change-Id: I0b733ebbbfd4facd8714db0535809ec3cab0833d Reviewed-on: https://go-review.googlesource.com/135775 Reviewed-by: Austin Clements <[email protected]> Run-TryBot: Austin Clements <[email protected]> TryBot-Result: Gobot Gobot <[email protected]>
1 parent 8595868 commit e57f24a

File tree

1 file changed

+7
-3
lines changed

1 file changed

+7
-3
lines changed

src/cmd/trace/trace.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -685,13 +685,14 @@ func generateTrace(params *traceParams, consumer traceConsumer) error {
685685
}
686686
ctx.emitSlice(&fakeMarkStart, text)
687687
case trace.EvGCSweepStart:
688-
slice := ctx.emitSlice(ev, "SWEEP")
688+
slice := ctx.makeSlice(ev, "SWEEP")
689689
if done := ev.Link; done != nil && done.Args[0] != 0 {
690690
slice.Arg = struct {
691691
Swept uint64 `json:"Swept bytes"`
692692
Reclaimed uint64 `json:"Reclaimed bytes"`
693693
}{done.Args[0], done.Args[1]}
694694
}
695+
ctx.emit(slice)
695696
case trace.EvGoStart, trace.EvGoStartLabel:
696697
info := getGInfo(ev.G)
697698
if ev.Type == trace.EvGoStartLabel {
@@ -846,7 +847,11 @@ func (ctx *traceContext) proc(ev *trace.Event) uint64 {
846847
}
847848
}
848849

849-
func (ctx *traceContext) emitSlice(ev *trace.Event, name string) *ViewerEvent {
850+
func (ctx *traceContext) emitSlice(ev *trace.Event, name string) {
851+
ctx.emit(ctx.makeSlice(ev, name))
852+
}
853+
854+
func (ctx *traceContext) makeSlice(ev *trace.Event, name string) *ViewerEvent {
850855
// If ViewerEvent.Dur is not a positive value,
851856
// trace viewer handles it as a non-terminating time interval.
852857
// Avoid it by setting the field with a small value.
@@ -885,7 +890,6 @@ func (ctx *traceContext) emitSlice(ev *trace.Event, name string) *ViewerEvent {
885890
sl.Cname = colorLightGrey
886891
}
887892
}
888-
ctx.emit(sl)
889893
return sl
890894
}
891895

0 commit comments

Comments
 (0)