cmd/trace: revert internal/traceparser

The performance improvement is not as big as we hoped.
Until the API is feature complete, we postpone the release
and avoid added complexity.

This change was prepared by reverting all the changes affected
src/cmd/trace and src/internal/traceparser packages after
golang.org/cl/137635, and then bringing back MMU computation
APIs (originally in src/internal/traceparser) to the
src/internal/trace package.

Revert "cmd/trace: use new traceparser to parse the raw trace files"
This reverts https://golang.org/cl/145457
  (commit 08816cb8d7).

Revert "internal/traceparser: provide parser that uses less space and parses segments of runtime trace files"
This reverts https://golang.org/cl/137635
  (commit daaf361f74).

Change-Id: Ic2a068a7dbaf4053cd9674ca7bde9c58e74385b4
Reviewed-on: https://go-review.googlesource.com/c/150517
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
This commit is contained in:
Hana Kim 2018-11-19 12:30:56 -05:00 committed by Hyang-Ah Hana Kim
parent 47df645473
commit 6d5caf38e3
46 changed files with 197 additions and 3273 deletions

View file

@ -5,12 +5,12 @@
package main
import (
"bytes"
"bufio"
"cmd/internal/browser"
"flag"
"fmt"
"html/template"
trace "internal/traceparser"
"internal/trace"
"io"
"log"
"net"
@ -115,22 +115,8 @@ func main() {
dief("%v\n", err)
}
if *debugFlag { // match go tool trace -d (except for Offset and Seq)
f := func(ev *trace.Event) {
desc := trace.EventDescriptions[ev.Type]
w := new(bytes.Buffer)
fmt.Fprintf(w, "%v %v p=%v g=%v", ev.Ts, desc.Name, ev.P, ev.G)
for i, a := range desc.Args {
fmt.Fprintf(w, " %v=%v", a, ev.Args[i])
}
for i, a := range desc.SArgs {
fmt.Fprintf(w, " %v=%v", a, ev.SArgs[i])
}
fmt.Println(w.String())
}
for i := 0; i < len(res.Events); i++ {
f(res.Events[i])
}
if *debugFlag {
trace.Print(res.Events)
os.Exit(0)
}
reportMemoryUsage("after parsing trace")
@ -155,23 +141,36 @@ var ranges []Range
var loader struct {
once sync.Once
res *trace.Parsed
res trace.ParseResult
err error
}
func parseTrace() (*trace.Parsed, error) {
// parseEvents is a compatibility wrapper that returns only
// the Events part of trace.ParseResult returned by parseTrace.
func parseEvents() ([]*trace.Event, error) {
res, err := parseTrace()
if err != nil {
return nil, err
}
return res.Events, err
}
func parseTrace() (trace.ParseResult, error) {
loader.once.Do(func() {
x, err := trace.New(traceFile)
tracef, err := os.Open(traceFile)
if err != nil {
loader.err = err
loader.err = fmt.Errorf("failed to open trace file: %v", err)
return
}
err = x.Parse(0, x.MaxTs, nil)
defer tracef.Close()
// Parse and symbolize.
res, err := trace.Parse(bufio.NewReader(tracef), programBinary)
if err != nil {
loader.err = err
loader.err = fmt.Errorf("failed to parse trace: %v", err)
return
}
loader.res = x
loader.res = res
})
return loader.res, loader.err
}