]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/trace: show swept and reclaimed bytes
authorAustin Clements <austin@google.com>
Fri, 14 Apr 2017 18:53:09 +0000 (14:53 -0400)
committerAustin Clements <austin@google.com>
Wed, 19 Apr 2017 18:31:16 +0000 (18:31 +0000)
This displays the swept and reclaimed bytes for sweep events in the
lower panel of the trace viewer.

Change-Id: If1665a1c02bbc47700e0d9f515e574f013f3f285
Reviewed-on: https://go-review.googlesource.com/40812
Run-TryBot: Austin Clements <austin@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
src/cmd/trace/trace.go

index 72cab90de00e328175094725c876bdf0c206c9a8..7db2188861f9c2fec97f849dfc8b7f113cd68643 100644 (file)
@@ -481,7 +481,13 @@ func generateTrace(params *traceParams) (ViewerData, error) {
                        }
                        ctx.emitSlice(&fakeMarkStart, text)
                case trace.EvGCSweepStart:
-                       ctx.emitSlice(ev, "SWEEP")
+                       slice := ctx.emitSlice(ev, "SWEEP")
+                       if done := ev.Link; done != nil && done.Args[0] != 0 {
+                               slice.Arg = struct {
+                                       Swept     uint64 `json:"Swept bytes"`
+                                       Reclaimed uint64 `json:"Reclaimed bytes"`
+                               }{done.Args[0], done.Args[1]}
+                       }
                case trace.EvGoStart, trace.EvGoStartLabel:
                        info := getGInfo(ev.G)
                        if ev.Type == trace.EvGoStartLabel {
@@ -574,8 +580,8 @@ func (ctx *traceContext) proc(ev *trace.Event) uint64 {
        }
 }
 
-func (ctx *traceContext) emitSlice(ev *trace.Event, name string) {
-       ctx.emit(&ViewerEvent{
+func (ctx *traceContext) emitSlice(ev *trace.Event, name string) *ViewerEvent {
+       sl := &ViewerEvent{
                Name:     name,
                Phase:    "X",
                Time:     ctx.time(ev),
@@ -583,7 +589,9 @@ func (ctx *traceContext) emitSlice(ev *trace.Event, name string) {
                Tid:      ctx.proc(ev),
                Stack:    ctx.stack(ev.Stk),
                EndStack: ctx.stack(ev.Link.Stk),
-       })
+       }
+       ctx.emit(sl)
+       return sl
 }
 
 type heapCountersArg struct {