[ninjatrace] Remove ninjatrace tool

This has been moved to fuchsia.googlesource.com/tools.

Change-Id: I46402332617198f59fc71468ac5cf2e5c254d336
diff --git a/cmd/ninjatrace/ninjatrace.go b/cmd/ninjatrace/ninjatrace.go
deleted file mode 100644
index 411614d..0000000
--- a/cmd/ninjatrace/ninjatrace.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// Copyright 2014 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// ninja_log_trace converts .ninja_log into trace-viewer formats.
-//
-// usage:
-//  $ go run ninja_log_trace.go --filename out/debug-x64/.ninja_log
-//
-package main
-
-import (
-	"bufio"
-	"compress/gzip"
-	"encoding/json"
-	"flag"
-	"io"
-	"log"
-	"os"
-	"path/filepath"
-	"runtime/pprof"
-
-	"fuchsia.googlesource.com/infra/infra/ninjalog"
-)
-
-var (
-	filename             = flag.String("filename", ".ninja_log", "filename of .ninja_log")
-	traceJSON            = flag.String("trace_json", "trace.json", "output filename of trace.json")
-	cpuprofile           = flag.String("cpuprofile", "", "file to write cpu profile")
-)
-
-func reader(fname string, rd io.Reader) (io.Reader, error) {
-	if filepath.Ext(fname) != ".gz" {
-		return bufio.NewReaderSize(rd, 512*1024), nil
-	}
-	return gzip.NewReader(bufio.NewReaderSize(rd, 512*1024))
-}
-
-func convert(fname string) ([]ninjalog.Trace, error) {
-	f, err := os.Open(fname)
-	if err != nil {
-		return nil, err
-	}
-	defer f.Close()
-	rd, err := reader(fname, f)
-	if err != nil {
-		return nil, err
-	}
-
-	njl, err := ninjalog.Parse(fname, rd)
-	if err != nil {
-		return nil, err
-	}
-	steps := ninjalog.Dedup(njl.Steps)
-	flow := ninjalog.Flow(steps)
-	return ninjalog.ToTraces(flow, 1), nil
-}
-
-func output(fname string, traces []ninjalog.Trace) (err error) {
-	f, err := os.Create(fname)
-	if err != nil {
-		return err
-	}
-	defer func() {
-		cerr := f.Close()
-		if err == nil {
-			err = cerr
-		}
-	}()
-	js, err := json.Marshal(traces)
-	if err != nil {
-		return err
-	}
-	_, err = f.Write(js)
-	return err
-}
-
-func main() {
-	flag.Parse()
-
-	if *cpuprofile != "" {
-		f, err := os.Create(*cpuprofile)
-		if err != nil {
-			log.Fatal(err)
-		}
-		pprof.StartCPUProfile(f)
-		defer pprof.StopCPUProfile()
-	}
-
-	traces, err := convert(*filename)
-	if err != nil {
-		log.Fatal(err)
-	}
-	if *traceJSON != "" {
-		err = output(*traceJSON, traces)
-		if err != nil {
-			log.Fatal(err)
-		}
-	}
-}
diff --git a/ninjalog/doc.go b/ninjalog/doc.go
deleted file mode 100644
index 4c2b075..0000000
--- a/ninjalog/doc.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/*
-Package ninjalog provides ninja_log parser
-
-It support ninja log v5.
-
- # ninja log v5
- <start>	<end>	<restat>	<target>	<cmdhash>
-
-where
- <start> = start time since ninja starts in msec.
- <end>   = end time since ninja starts in msec.
- <restat> = restat time in epoch.
- <target> = target (output) filename
- <cmdhash> = hash of command line (?)
-
-It assumes steps in the last build will be ascendent order of <end>.
-
-It also supports metadata added by chromium's buildbot compile.py.
-metadata is added after
-
- # end of ninja log
-
-and written in json format.
-
-*/
-package ninjalog
diff --git a/ninjalog/ninjalog.go b/ninjalog/ninjalog.go
deleted file mode 100644
index 09261ac..0000000
--- a/ninjalog/ninjalog.go
+++ /dev/null
@@ -1,449 +0,0 @@
-// Copyright 2014 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package ninjalog
-
-import (
-	"bufio"
-	"encoding/json"
-	"fmt"
-	"io"
-	"sort"
-	"strconv"
-	"strings"
-	"time"
-)
-
-// Step is one step in ninja_log file.
-// time is measured from ninja start time.
-type Step struct {
-	Start time.Duration
-	End   time.Duration
-	// modification time, but not convertable to absolute real time.
-	// on POSIX, time_t is used, but on Windows different type is used.
-	// htts://github.com/martine/ninja/blob/master/src/timestamp.h
-	Restat  int
-	Out     string
-	CmdHash string
-
-	// other outs for the same CmdHash if dedup'ed.
-	Outs []string
-}
-
-// Duration reports step's duration.
-func (s Step) Duration() time.Duration {
-	return s.End - s.Start
-}
-
-// Steps is a list of Step.
-// It could be used to sort by start time.
-type Steps []Step
-
-func (s Steps) Len() int      { return len(s) }
-func (s Steps) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s Steps) Less(i, j int) bool {
-	if s[i].Start != s[j].Start {
-		return s[i].Start < s[j].Start
-	}
-	if s[i].End != s[j].End {
-		return s[i].End < s[j].End
-	}
-	return s[i].Out < s[j].Out
-}
-
-// Reverse reverses steps.
-// It would be more efficient if steps is already sorted than using sort.Reverse.
-func (s Steps) Reverse() {
-	for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
-		s[i], s[j] = s[j], s[i]
-	}
-}
-
-// ByEnd is used to sort by end time.
-type ByEnd struct{ Steps }
-
-func (s ByEnd) Less(i, j int) bool { return s.Steps[i].End < s.Steps[j].End }
-
-// ByDuration is used to sort by duration.
-type ByDuration struct{ Steps }
-
-func (s ByDuration) Less(i, j int) bool { return s.Steps[i].Duration() < s.Steps[j].Duration() }
-
-// ByWeightedTime is used to sort by weighted time.
-type ByWeightedTime struct {
-	Weighted map[string]time.Duration
-	Steps
-}
-
-func (s ByWeightedTime) Less(i, j int) bool {
-	return s.Weighted[s.Steps[i].Out] < s.Weighted[s.Steps[j].Out]
-}
-
-// Metadata is data added by compile.py.
-type Metadata struct {
-	// Platform is platform of buildbot.
-	Platform string `json:"platform"`
-
-	// Argv is argv of compile.py
-	Argv []string `json:"argv"`
-
-	// Cwd is current working directory of compile.py
-	Cwd string `json:"cwd"`
-
-	// Compiler is compiler used.
-	Compiler string `json:"compiler"`
-
-	// Cmdline is command line of ninja.
-	Cmdline []string `json:"cmdline"`
-
-	// Exit is exit status of ninja.
-	Exit int `json:"exit"`
-
-	// Env is environment variables.
-	Env map[string]string `json:"env"`
-
-	// CompilerProxyInfo is a path name of associated compiler_proxy.INFO log.
-	CompilerProxyInfo string `json:"compiler_proxy_info"`
-
-	// Raw is raw string for metadata.
-	Raw string
-	// Error is error message of parsing metadata.
-	Error string
-}
-
-// NinjaLog is parsed data of ninja_log file.
-type NinjaLog struct {
-	// Filename is a filename of ninja_log.
-	Filename string
-
-	// Start is start line of the last build in ninja_log file.
-	Start int
-
-	// Steps contains steps in the last build in ninja_log file.
-	Steps []Step
-
-	// Metadata is additional data found in ninja_log file.
-	Metadata Metadata
-}
-
-// Parse parses .ninja_log file, with chromium's compile.py metadata.
-func Parse(fname string, r io.Reader) (*NinjaLog, error) {
-	b := bufio.NewReader(r)
-	scanner := bufio.NewScanner(b)
-	nlog := &NinjaLog{Filename: fname}
-	lineno := 0
-	if !scanner.Scan() {
-		if err := scanner.Err(); err != nil {
-			return nil, err
-		}
-		return nil, fmt.Errorf("empty file?")
-	}
-	lineno++
-	line := scanner.Text()
-	if line != "# ninja log v5" {
-		return nil, fmt.Errorf("unexpected format: %s", line)
-	}
-	nlog.Start = lineno
-	var lastStep Step
-	for scanner.Scan() {
-		line := scanner.Text()
-		if line == "# end of ninja log" {
-			break
-		}
-		if line == "" {
-			continue
-		}
-		step, err := lineToStep(line)
-		if err != nil {
-			return nil, fmt.Errorf("error at %d: %v", lineno, err)
-		}
-		if step.End < lastStep.End {
-			nlog.Start = lineno
-			nlog.Steps = nil
-		}
-		nlog.Steps = append(nlog.Steps, step)
-		lastStep = step
-		lineno++
-	}
-	if err := scanner.Err(); err != nil {
-		return nil, fmt.Errorf("error at %d: %v", lineno, err)
-	}
-	if !scanner.Scan() {
-		if err := scanner.Err(); err != nil {
-			return nil, fmt.Errorf("error at %d: %v", lineno, err)
-		}
-		// missing metadata?
-		return nlog, nil
-	}
-	lineno++
-	nlog.Metadata.Raw = scanner.Text()
-	if err := parseMetadata([]byte(nlog.Metadata.Raw), &nlog.Metadata); err != nil {
-		nlog.Metadata.Error = fmt.Sprintf("error at %d: %v", lineno, err)
-	}
-	return nlog, nil
-}
-
-func lineToStep(line string) (Step, error) {
-	var step Step
-
-	// Due to slowness of strings.Split in App Engine Go,
-	// we use more faster implementation.
-	fields := make([]string, 0, 5)
-	for i := 0; i < 5; i += 1 {
-		m := strings.IndexByte(line, '\t')
-		if m < 0 {
-			m = len(line)
-		}
-		fields = append(fields, line[:m])
-		if m < len(line) {
-			line = line[m+1:]
-		}
-	}
-
-	if len(fields) < 5 {
-		return step, fmt.Errorf("few fields:%d", len(fields))
-	}
-	s, err := strconv.ParseUint(fields[0], 10, 0)
-	if err != nil {
-		return step, fmt.Errorf("bad start %s:%v", fields[0], err)
-	}
-	e, err := strconv.ParseUint(fields[1], 10, 0)
-	if err != nil {
-		return step, fmt.Errorf("bad end %s:%v", fields[1], err)
-	}
-	rs, err := strconv.ParseUint(fields[2], 10, 0)
-	if err != nil {
-		return step, fmt.Errorf("bad restat %s:%v", fields[2], err)
-	}
-	step.Start = time.Duration(s) * time.Millisecond
-	step.End = time.Duration(e) * time.Millisecond
-	step.Restat = int(rs)
-	step.Out = fields[3]
-	step.CmdHash = fields[4]
-	return step, nil
-}
-
-func stepToLine(s Step) string {
-	return fmt.Sprintf("%d\t%d\t%d\t%s\t%s",
-		s.Start.Nanoseconds()/int64(time.Millisecond),
-		s.End.Nanoseconds()/int64(time.Millisecond),
-		s.Restat,
-		s.Out,
-		s.CmdHash)
-}
-
-func parseMetadata(buf []byte, metadata *Metadata) error {
-	return json.Unmarshal(buf, metadata)
-}
-
-// Dump dumps steps as ninja log v5 format in w.
-func Dump(w io.Writer, steps []Step) error {
-	_, err := fmt.Fprintf(w, "# ninja log v5\n")
-	if err != nil {
-		return err
-	}
-	for _, s := range steps {
-		_, err = fmt.Fprintln(w, stepToLine(s))
-		if err != nil {
-			return err
-		}
-	}
-	return nil
-}
-
-// Dedup dedupes steps. step may have the same cmd hash.
-// Dedup only returns the first step for these steps.
-// steps will be sorted by start time.
-func Dedup(steps []Step) []Step {
-	m := make(map[string]*Step)
-	sort.Sort(Steps(steps))
-	var dedup []Step
-	for _, s := range steps {
-		if os := m[s.CmdHash]; os != nil {
-			os.Outs = append(os.Outs, s.Out)
-			continue
-		}
-		dedup = append(dedup, s)
-		m[s.CmdHash] = &dedup[len(dedup)-1]
-	}
-	return dedup
-}
-
-// TotalTime returns startup time and end time of ninja, and accumulated time
-// of all tasks.
-func TotalTime(steps []Step) (startupTime, endTime, cpuTime time.Duration) {
-	if len(steps) == 0 {
-		return 0, 0, 0
-	}
-	steps = Dedup(steps)
-	startup := steps[0].Start
-	var end time.Duration
-	for _, s := range steps {
-		if s.Start < startup {
-			startup = s.Start
-		}
-		if s.End > end {
-			end = s.End
-		}
-		cpuTime += s.Duration()
-	}
-	return startup, end, cpuTime
-}
-
-// Flow returns concurrent steps by time.
-// steps in every []Step will not have time overlap.
-// steps will be sorted by start time.
-func Flow(steps []Step) [][]Step {
-	sort.Sort(Steps(steps))
-	var threads [][]Step
-
-	for _, s := range steps {
-		tid := -1
-		for i, th := range threads {
-			if len(th) == 0 {
-				panic(fmt.Errorf("thread %d has no entry", i))
-			}
-			if th[len(th)-1].End <= s.Start {
-				tid = i
-				break
-			}
-		}
-		if tid == -1 {
-			threads = append(threads, nil)
-			tid = len(threads) - 1
-		}
-		threads[tid] = append(threads[tid], s)
-	}
-	return threads
-}
-
-// action represents an event's action. "start" or "end".
-type action string
-
-const (
-	unknownAction action = ""
-	startAction   action = "start"
-	stopAction    action = "stop"
-)
-
-// event is an event of steps.
-type event struct {
-	time   time.Duration
-	action action
-	target string
-}
-
-// toEvent converts steps into events.
-// events are sorted by its time.
-func toEvent(steps []Step) []event {
-	var events []event
-	for _, s := range steps {
-		events = append(events,
-			event{
-				time:   s.Start,
-				action: startAction,
-				target: s.Out,
-			},
-			event{
-				time:   s.End,
-				action: stopAction,
-				target: s.Out,
-			},
-		)
-	}
-	sort.Slice(events, func(i, j int) bool {
-		if events[i].time == events[j].time {
-			// If a task starts and stops on the same time stamp
-			// then the start will come first.
-			return events[i].action < events[j].action
-		}
-		return events[i].time < events[j].time
-	})
-	return events
-}
-
-// WeightedTime calculates weighted time, which is elapsed time with
-// each segment divided by the number of tasks that were running in paralle.
-// This makes it a much better approximation of how "important" a slow step was.
-// For example, A link that is entirely or mostly serialized will have a
-// weighted time that is the same or similar to its elapsed time.
-// A compile that runs in parallel with 999 other compiles will have a weighted
-// time that is tiny.
-func WeightedTime(steps []Step) map[string]time.Duration {
-	if len(steps) == 0 {
-		return nil
-	}
-	steps = Dedup(steps)
-	events := toEvent(steps)
-	weightedDuration := make(map[string]time.Duration)
-
-	// Track the tasks which are currently running.
-	runningTasks := make(map[string]time.Duration)
-
-	// Record the time we have processed up to so we know how to calculate
-	// time deltas.
-	lastTime := events[0].time
-
-	// Track the accumulated weighted time so that it can efficiently be
-	// added to individual tasks.
-	var lastWeightedTime time.Duration
-
-	for _, event := range events {
-		numRunning := len(runningTasks)
-		if numRunning > 0 {
-			// Update the total weighted time up to this moment.
-			lastWeightedTime += (event.time - lastTime) / time.Duration(numRunning)
-		}
-		switch event.action {
-		case startAction:
-			// Record the total weighted task time when this task starts.
-			runningTasks[event.target] = lastWeightedTime
-		case stopAction:
-			// Record the change in the total weighted task time while this task ran.
-			weightedDuration[event.target] = lastWeightedTime - runningTasks[event.target]
-			delete(runningTasks, event.target)
-		}
-		lastTime = event.time
-	}
-	return weightedDuration
-}
-
-// Stat represents statistics for build step.
-type Stat struct {
-	Type     string
-	Count    int
-	Time     time.Duration
-	Weighted time.Duration
-}
-
-// StatsByType summarizes build step statistics with weighted and typeOf.
-// Stats is sorted by Weighted, longer first.
-func StatsByType(steps []Step, weighted map[string]time.Duration, typeOf func(Step) string) []Stat {
-	if len(steps) == 0 {
-		return nil
-	}
-	steps = Dedup(steps)
-	m := make(map[string]int) // type to index of stats.
-	var stats []Stat
-	for _, step := range steps {
-		t := typeOf(step)
-		if i, ok := m[t]; ok {
-			stats[i].Count++
-			stats[i].Time += step.Duration()
-			stats[i].Weighted += weighted[step.Out]
-			continue
-		}
-		stats = append(stats, Stat{
-			Type:     t,
-			Count:    1,
-			Time:     step.Duration(),
-			Weighted: weighted[step.Out],
-		})
-		m[t] = len(stats) - 1
-	}
-	sort.Slice(stats, func(i, j int) bool {
-		return stats[i].Weighted > stats[j].Weighted
-	})
-	return stats
-}
diff --git a/ninjalog/ninjalog_test.go b/ninjalog/ninjalog_test.go
deleted file mode 100644
index bc5306d..0000000
--- a/ninjalog/ninjalog_test.go
+++ /dev/null
@@ -1,553 +0,0 @@
-// Copyright 2014 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package ninjalog
-
-import (
-	"bytes"
-	"io/ioutil"
-	"reflect"
-	"sort"
-	"strings"
-	"testing"
-	"time"
-)
-
-var (
-	logTestCase = `# ninja log v5
-76	187	0	resources/inspector/devtools_extension_api.js	75430546595be7c2
-80	284	0	gen/autofill_regex_constants.cc	fa33c8d7ce1d8791
-78	286	0	gen/angle/commit_id.py	4ede38e2c1617d8c
-79	287	0	gen/angle/copy_compiler_dll.bat	9fb635ad5d2c1109
-141	287	0	PepperFlash/manifest.json	324f0a0b77c37ef
-142	288	0	PepperFlash/libpepflashplayer.so	1e2c2b7845a4d4fe
-287	290	0	obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp	b211d373de72f455
-`
-
-	stepsTestCase = []Step{
-		Step{
-			Start:   76 * time.Millisecond,
-			End:     187 * time.Millisecond,
-			Out:     "resources/inspector/devtools_extension_api.js",
-			CmdHash: "75430546595be7c2",
-		},
-		Step{
-			Start:   80 * time.Millisecond,
-			End:     284 * time.Millisecond,
-			Out:     "gen/autofill_regex_constants.cc",
-			CmdHash: "fa33c8d7ce1d8791",
-		},
-		Step{
-			Start:   78 * time.Millisecond,
-			End:     286 * time.Millisecond,
-			Out:     "gen/angle/commit_id.py",
-			CmdHash: "4ede38e2c1617d8c",
-		},
-		Step{
-			Start:   79 * time.Millisecond,
-			End:     287 * time.Millisecond,
-			Out:     "gen/angle/copy_compiler_dll.bat",
-			CmdHash: "9fb635ad5d2c1109",
-		},
-		Step{
-			Start:   141 * time.Millisecond,
-			End:     287 * time.Millisecond,
-			Out:     "PepperFlash/manifest.json",
-			CmdHash: "324f0a0b77c37ef",
-		},
-		Step{
-			Start:   142 * time.Millisecond,
-			End:     288 * time.Millisecond,
-			Out:     "PepperFlash/libpepflashplayer.so",
-			CmdHash: "1e2c2b7845a4d4fe",
-		},
-		Step{
-			Start:   287 * time.Millisecond,
-			End:     290 * time.Millisecond,
-			Out:     "obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp",
-			CmdHash: "b211d373de72f455",
-		},
-	}
-
-	stepsSorted = []Step{
-		Step{
-			Start:   76 * time.Millisecond,
-			End:     187 * time.Millisecond,
-			Out:     "resources/inspector/devtools_extension_api.js",
-			CmdHash: "75430546595be7c2",
-		},
-		Step{
-			Start:   78 * time.Millisecond,
-			End:     286 * time.Millisecond,
-			Out:     "gen/angle/commit_id.py",
-			CmdHash: "4ede38e2c1617d8c",
-		},
-		Step{
-			Start:   79 * time.Millisecond,
-			End:     287 * time.Millisecond,
-			Out:     "gen/angle/copy_compiler_dll.bat",
-			CmdHash: "9fb635ad5d2c1109",
-		},
-		Step{
-			Start:   80 * time.Millisecond,
-			End:     284 * time.Millisecond,
-			Out:     "gen/autofill_regex_constants.cc",
-			CmdHash: "fa33c8d7ce1d8791",
-		},
-		Step{
-			Start:   141 * time.Millisecond,
-			End:     287 * time.Millisecond,
-			Out:     "PepperFlash/manifest.json",
-			CmdHash: "324f0a0b77c37ef",
-		},
-		Step{
-			Start:   142 * time.Millisecond,
-			End:     288 * time.Millisecond,
-			Out:     "PepperFlash/libpepflashplayer.so",
-			CmdHash: "1e2c2b7845a4d4fe",
-		},
-		Step{
-			Start:   287 * time.Millisecond,
-			End:     290 * time.Millisecond,
-			Out:     "obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp",
-			CmdHash: "b211d373de72f455",
-		},
-	}
-
-	metadataTestCase = Metadata{
-		Platform: "linux",
-		Argv:     []string{"../../../scripts/slave/compile.py", "--target", "Release", "--clobber", "--compiler=goma", "--", "all"},
-		Cwd:      "/b/build/slave/Linux_x64/build/src",
-		Compiler: "goma",
-		Cmdline:  []string{"ninja", "-C", "/b/build/slave/Linux_x64/build/src/out/Release", "all", "-j50"},
-		Exit:     0,
-		Env: map[string]string{
-			"LANG":    "en_US.UTF-8",
-			"SHELL":   "/bin/bash",
-			"HOME":    "/home/chrome-bot",
-			"PWD":     "/b/build/slave/Linux_x64/build",
-			"LOGNAME": "chrome-bot",
-			"USER":    "chrome-bot",
-			"PATH":    "/home/chrome-bot/slavebin:/b/depot_tools:/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin",
-		},
-		CompilerProxyInfo: "/tmp/compiler_proxy.build48-m1.chrome-bot.log.INFO.20140907-203827.14676",
-	}
-)
-
-func TestStepsSort(t *testing.T) {
-	steps := append([]Step{}, stepsTestCase...)
-	sort.Sort(Steps(steps))
-	if !reflect.DeepEqual(steps, stepsSorted) {
-		t.Errorf("sort Steps=%v; want=%v", steps, stepsSorted)
-	}
-}
-
-func TestStepsReverse(t *testing.T) {
-	steps := []Step{
-		Step{Out: "0"},
-		Step{Out: "1"},
-		Step{Out: "2"},
-		Step{Out: "3"},
-	}
-	Steps(steps).Reverse()
-	want := []Step{
-		Step{Out: "3"},
-		Step{Out: "2"},
-		Step{Out: "1"},
-		Step{Out: "0"},
-	}
-	if !reflect.DeepEqual(steps, want) {
-		t.Errorf("steps.Reverse=%v; want=%v", steps, want)
-	}
-}
-
-func TestParseBadVersion(t *testing.T) {
-	_, err := Parse(".ninja_log", strings.NewReader(`# ninja log v4
-0	1	0	foo	touch foo
-`))
-	if err == nil {
-		t.Error("Parse()=_, <nil>; want=_, error")
-	}
-}
-
-func TestParseSimple(t *testing.T) {
-	njl, err := Parse(".ninja_log", strings.NewReader(logTestCase))
-	if err != nil {
-		t.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-	}
-
-	want := &NinjaLog{
-		Filename: ".ninja_log",
-		Start:    1,
-		Steps:    stepsTestCase,
-	}
-	if !reflect.DeepEqual(njl, want) {
-		t.Errorf("Parse()=%v; want=%v", njl, want)
-	}
-}
-
-func TestParseEmptyLine(t *testing.T) {
-	njl, err := Parse(".ninja_log", strings.NewReader(logTestCase+"\n"))
-	if err != nil {
-		t.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-	}
-	want := &NinjaLog{
-		Filename: ".ninja_log",
-		Start:    1,
-		Steps:    stepsTestCase,
-	}
-	if !reflect.DeepEqual(njl, want) {
-		t.Errorf("Parse()=%v; want=%v", njl, want)
-	}
-}
-
-func TestParseLast(t *testing.T) {
-	njl, err := Parse(".ninja_log", strings.NewReader(`# ninja log v5
-1020807	1020916	0	chrome.1	e101fd46be020cfc
-84	9489	0	gen/libraries.cc	9001f3182fa8210e
-1024369	1041522	0	chrome	aee9d497d56c9637
-76	187	0	resources/inspector/devtools_extension_api.js	75430546595be7c2
-80	284	0	gen/autofill_regex_constants.cc	fa33c8d7ce1d8791
-78	286	0	gen/angle/commit_id.py	4ede38e2c1617d8c
-79	287	0	gen/angle/copy_compiler_dll.bat	9fb635ad5d2c1109
-141	287	0	PepperFlash/manifest.json	324f0a0b77c37ef
-142	288	0	PepperFlash/libpepflashplayer.so	1e2c2b7845a4d4fe
-287	290	0	obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp	b211d373de72f455
-`))
-	if err != nil {
-		t.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-	}
-
-	want := &NinjaLog{
-		Filename: ".ninja_log",
-		Start:    4,
-		Steps:    stepsTestCase,
-	}
-	if !reflect.DeepEqual(njl, want) {
-		t.Errorf("Parse()=%v; want=%v", njl, want)
-	}
-}
-
-func TestParseMetadata(t *testing.T) {
-	njl, err := Parse(".ninja_log", strings.NewReader(`# ninja log v5
-1020807	1020916	0	chrome.1	e101fd46be020cfc
-84	9489	0	gen/libraries.cc	9001f3182fa8210e
-1024369	1041522	0	chrome	aee9d497d56c9637
-76	187	0	resources/inspector/devtools_extension_api.js	75430546595be7c2
-80	284	0	gen/autofill_regex_constants.cc	fa33c8d7ce1d8791
-78	286	0	gen/angle/commit_id.py	4ede38e2c1617d8c
-79	287	0	gen/angle/copy_compiler_dll.bat	9fb635ad5d2c1109
-141	287	0	PepperFlash/manifest.json	324f0a0b77c37ef
-142	288	0	PepperFlash/libpepflashplayer.so	1e2c2b7845a4d4fe
-287	290	0	obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp	b211d373de72f455
-
-# end of ninja log
-{"platform": "linux", "argv": ["../../../scripts/slave/compile.py", "--target", "Release", "--clobber", "--compiler=goma", "--", "all"], "cmdline": ["ninja", "-C", "/b/build/slave/Linux_x64/build/src/out/Release", "all", "-j50"], "exit": 0, "env": {"LANG": "en_US.UTF-8", "SHELL": "/bin/bash", "HOME": "/home/chrome-bot", "PWD": "/b/build/slave/Linux_x64/build", "LOGNAME": "chrome-bot", "USER": "chrome-bot", "PATH": "/home/chrome-bot/slavebin:/b/depot_tools:/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" }, "compiler_proxy_info": "/tmp/compiler_proxy.build48-m1.chrome-bot.log.INFO.20140907-203827.14676", "cwd": "/b/build/slave/Linux_x64/build/src", "compiler": "goma"}
-`))
-	if err != nil {
-		t.Errorf(`Parse()=_, %#v; want=_, <nil>`, err)
-	}
-
-	want := &NinjaLog{
-		Filename: ".ninja_log",
-		Start:    4,
-		Steps:    stepsTestCase,
-		Metadata: metadataTestCase,
-	}
-	njl.Metadata.Raw = ""
-	if !reflect.DeepEqual(njl, want) {
-		t.Errorf("Parse()=%#v; want=%#v", njl, want)
-	}
-}
-
-func TestParseBadMetadata(t *testing.T) {
-	// https://bugs.chromium.org/p/chromium/issues/detail?id=667571
-	njl, err := Parse(".ninja_log", strings.NewReader(`# ninja log v5
-1020807	1020916	0	chrome.1	e101fd46be020cfc
-84	9489	0	gen/libraries.cc	9001f3182fa8210e
-1024369	1041522	0	chrome	aee9d497d56c9637
-76	187	0	resources/inspector/devtools_extension_api.js	75430546595be7c2
-80	284	0	gen/autofill_regex_constants.cc	fa33c8d7ce1d8791
-78	286	0	gen/angle/commit_id.py	4ede38e2c1617d8c
-79	287	0	gen/angle/copy_compiler_dll.bat	9fb635ad5d2c1109
-141	287	0	PepperFlash/manifest.json	324f0a0b77c37ef
-142	288	0	PepperFlash/libpepflashplayer.so	1e2c2b7845a4d4fe
-287	290	0	obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp	b211d373de72f455
-# end of ninja log
-{"platform": "linux", "argv": ["/b/build/scripts/slave/upload_goma_logs.py", "--upload-compiler-proxy-info", "--json-status", "/b/build/slave/cache/cipd/goma/jsonstatus", "--ninja-log-outdir", "/b/build/slave/pdfium/build/pdfium/out/debug_xfa_v8", "--ninja-log-compiler", "unknown", "--ninja-log-command", "['ninja', '-C', Path('checkout', 'out','debug_xfa_v8'), '-j', 80]", "--ninja-log-exit-status", "0", "--goma-stats-file", "/b/build/slave/pdfium/.recipe_runtime/tmpOgwx97/build_data/goma_stats_proto", "--goma-crash-report-id-file", "/b/build/slave/pdfium/.recipe_runtime/tmpOgwx97/build_data/crash_report_id_file", "--build-data-dir", "/b/build/slave/pdfium/.recipe_runtime/tmpOgwx97/build_data", "--buildbot-buildername", "linux_xfa", "--buildbot-mastername", "tryserver.client.pdfium", "--buildbot-slavename", "slave1386-c4"], "cmdline": "['ninja', '-C', Path('checkout','out','debug_xfa_v8'), '-j', 80]", "exit": 0, "env": {"GOMA_SERVICE_ACCOUNT_JSON_FILE": "/creds/service_accounts/service-account-goma-client.json", "BUILDBOT_BUILDERNAME": "linux_xfa", "USER": "chrome-bot", "HOME": "/home/chrome-bot", "BOTO_CONFIG": "/b/build/scripts/slave/../../site_config/.boto", "PATH": "/home/chrome-bot/slavebin:/b/depot_tools:/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin", "PYTHONUNBUFFERED": "1", "BUILDBOT_BUILDBOTURL": "https://build.chromium.org/p/tryserver.client.pdfium/", "DISPLAY": ":0.0", "LANG": "en_US.UTF-8", "BUILDBOT_BLAMELIST": "[u'dsinclair@chromium.org']", "BUILDBOT_MASTERNAME": "tryserver.client.pdfium", "GOMACTL_CRASH_REPORT_ID_FILE": "/b/build/slave/pdfium/.recipe_runtime/tmpOgwx97/build_data/crash_report_id_file", "USERNAME": "chrome-bot", "BUILDBOT_GOT_REVISION": "None", "PYTHONPATH": "/b/build/site_config:/b/build/scripts:/b/build/scripts/release:/b/build/third_party:/b/build/third_party/requests_2_10_0:/b/build_internal/site_config:/b/build_internal/symsrc:/b/build/slave:/b/build/third_party/buildbot_slave_8_4:/b/build/third_party/twisted_10_2:", "BUILDBOT_SCHEDULER": "None", "BUILDBOT_REVISION": "", "AWS_CREDENTIAL_FILE": "/b/build/scripts/slave/../../site_config/.boto", "CHROME_HEADLESS": "1", "BUILDBOT_BRANCH": "", "GIT_USER_AGENT": "linux2 git/2.10.2 slave1386-c4.c.chromecompute.google.com.internal", "TESTING_SLAVENAME": "slave1386-c4", "GOMA_DUMP_STATS_FILE": "/b/build/slave/pdfium/.recipe_runtime/tmpOgwx97/build_data/goma_stats_proto", "BUILDBOT_BUILDNUMBER": "2937", "PWD": "/b/build/slave/pdfium/build", "BUILDBOT_SLAVENAME": "slave1386-c4", "BUILDBOT_CLOBBER": "", "PAGER": "cat"}, "compiler_proxy_info": "/tmp/compiler_proxy.slave1386-c4.chrome-bot.log.INFO.20161121-165459.5790", "cwd": "/b/build/slave/pdfium/build", "compiler": "unknown"}
-`))
-	if err != nil {
-		t.Errorf(`Parse()=_, %#v; want=_, <nil>`, err)
-	}
-
-	if njl.Metadata.Error == "" {
-		t.Errorf("Parse().Metadata.Error='', want some error")
-	}
-	njl.Metadata = Metadata{}
-
-	want := &NinjaLog{
-		Filename: ".ninja_log",
-		Start:    4,
-		Steps:    stepsTestCase,
-	}
-	if !reflect.DeepEqual(njl, want) {
-		t.Errorf("Parse()=%#v; want=%#v", njl, want)
-	}
-}
-
-func TestDump(t *testing.T) {
-	var b bytes.Buffer
-	err := Dump(&b, stepsTestCase)
-	if err != nil {
-		t.Errorf("Dump()=%v; want=<nil>", err)
-	}
-	if b.String() != logTestCase {
-		t.Errorf("Dump %q; want %q", b.String(), logTestCase)
-	}
-}
-
-func TestDedup(t *testing.T) {
-	steps := append([]Step{}, stepsTestCase...)
-	for _, out := range []string{
-		"gen/ui/keyboard/webui/keyboard.mojom.cc",
-		"gen/ui/keyboard/webui/keyboard.mojom.h",
-		"gen/ui/keyboard/webui/keyboard.mojom.js",
-		"gen/ui/keyboard/webui/keyboard.mojom-internal.h",
-	} {
-		steps = append(steps, Step{
-			Start:   302 * time.Millisecond,
-			End:     5764 * time.Millisecond,
-			Out:     out,
-			CmdHash: "a551cc46f8c21e5a",
-		})
-	}
-	got := Dedup(steps)
-	want := append([]Step{}, stepsSorted...)
-	want = append(want, Step{
-		Start: 302 * time.Millisecond,
-		End:   5764 * time.Millisecond,
-		Out:   "gen/ui/keyboard/webui/keyboard.mojom-internal.h",
-		Outs: []string{
-			"gen/ui/keyboard/webui/keyboard.mojom.cc",
-			"gen/ui/keyboard/webui/keyboard.mojom.h",
-			"gen/ui/keyboard/webui/keyboard.mojom.js",
-		},
-		CmdHash: "a551cc46f8c21e5a",
-	})
-	if !reflect.DeepEqual(got, want) {
-		t.Errorf("Dedup=%v; want=%v", got, want)
-	}
-}
-
-func TestFlow(t *testing.T) {
-	steps := append([]Step{}, stepsTestCase...)
-	steps = append(steps, Step{
-		Start:   187 * time.Millisecond,
-		End:     21304 * time.Millisecond,
-		Out:     "obj/third_party/pdfium/core/src/fpdfdoc/fpdfdoc.doc_formfield.o",
-		CmdHash: "2ac7111aa1ae86af",
-	})
-
-	flow := Flow(steps)
-
-	want := [][]Step{
-		[]Step{
-			Step{
-				Start:   76 * time.Millisecond,
-				End:     187 * time.Millisecond,
-				Out:     "resources/inspector/devtools_extension_api.js",
-				CmdHash: "75430546595be7c2",
-			},
-			Step{
-				Start:   187 * time.Millisecond,
-				End:     21304 * time.Millisecond,
-				Out:     "obj/third_party/pdfium/core/src/fpdfdoc/fpdfdoc.doc_formfield.o",
-				CmdHash: "2ac7111aa1ae86af",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   78 * time.Millisecond,
-				End:     286 * time.Millisecond,
-				Out:     "gen/angle/commit_id.py",
-				CmdHash: "4ede38e2c1617d8c",
-			},
-			Step{
-				Start:   287 * time.Millisecond,
-				End:     290 * time.Millisecond,
-				Out:     "obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp",
-				CmdHash: "b211d373de72f455",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   79 * time.Millisecond,
-				End:     287 * time.Millisecond,
-				Out:     "gen/angle/copy_compiler_dll.bat",
-				CmdHash: "9fb635ad5d2c1109",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   80 * time.Millisecond,
-				End:     284 * time.Millisecond,
-				Out:     "gen/autofill_regex_constants.cc",
-				CmdHash: "fa33c8d7ce1d8791",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   141 * time.Millisecond,
-				End:     287 * time.Millisecond,
-				Out:     "PepperFlash/manifest.json",
-				CmdHash: "324f0a0b77c37ef",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   142 * time.Millisecond,
-				End:     288 * time.Millisecond,
-				Out:     "PepperFlash/libpepflashplayer.so",
-				CmdHash: "1e2c2b7845a4d4fe",
-			},
-		},
-	}
-
-	if !reflect.DeepEqual(flow, want) {
-		t.Errorf("Flow()=%v; want=%v", flow, want)
-	}
-}
-
-func TestWeightedTime(t *testing.T) {
-	steps := []Step{
-		Step{
-			Start:   0 * time.Millisecond,
-			End:     3 * time.Millisecond,
-			Out:     "target-a",
-			CmdHash: "hash-target-a",
-		},
-		Step{
-			Start:   2 * time.Millisecond,
-			End:     5 * time.Millisecond,
-			Out:     "target-b",
-			CmdHash: "hash-target-b",
-		},
-		Step{
-			Start:   2 * time.Millisecond,
-			End:     8 * time.Millisecond,
-			Out:     "target-c",
-			CmdHash: "hash-target-c",
-		},
-		Step{
-			Start:   2 * time.Millisecond,
-			End:     3 * time.Millisecond,
-			Out:     "target-d",
-			CmdHash: "hash-target-d",
-		},
-	}
-
-	// 0 1 2 3 4 5 6 7 8
-	// +-+-+-+-+-+-+-+-+
-	// <--A-->
-	//     <--B-->
-	//     <------C---->
-	//     <D>
-	got := WeightedTime(steps)
-	want := map[string]time.Duration{
-		"target-a": 2*time.Millisecond + 1*time.Millisecond/4,
-		"target-b": 1*time.Millisecond/4 + 2*time.Millisecond/2,
-		"target-c": 1*time.Millisecond/4 + 2*time.Millisecond/2 + 3*time.Millisecond,
-		"target-d": 1 * time.Millisecond / 4,
-	}
-	if !reflect.DeepEqual(got, want) {
-		t.Errorf("WeightedTime(%v)=%v; want=%v", steps, got, want)
-	}
-}
-
-func BenchmarkParse(b *testing.B) {
-	data, err := ioutil.ReadFile("testdata/ninja_log")
-	if err != nil {
-		b.Errorf(`ReadFile("testdata/ninja_log")=_, %v; want_, <nil>`, err)
-	}
-
-	for i := 0; i < b.N; i++ {
-		_, err := Parse(".ninja_log", bytes.NewReader(data))
-		if err != nil {
-			b.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-		}
-	}
-}
-
-func BenchmarkDedup(b *testing.B) {
-	data, err := ioutil.ReadFile("testdata/ninja_log")
-	if err != nil {
-		b.Errorf(`ReadFile("testdata/ninja_log")=_, %v; want_, <nil>`, err)
-	}
-
-	njl, err := Parse(".ninja_log", bytes.NewReader(data))
-	if err != nil {
-		b.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-	}
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		steps := make([]Step, len(njl.Steps))
-		copy(steps, njl.Steps)
-		Dedup(steps)
-	}
-}
-
-func BenchmarkFlow(b *testing.B) {
-	data, err := ioutil.ReadFile("testdata/ninja_log")
-	if err != nil {
-		b.Errorf(`ReadFile("testdata/ninja_log")=_, %v; want_, <nil>`, err)
-	}
-
-	njl, err := Parse(".ninja_log", bytes.NewReader(data))
-	if err != nil {
-		b.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-	}
-	steps := Dedup(njl.Steps)
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		flowInput := make([]Step, len(steps))
-		copy(flowInput, steps)
-		Flow(flowInput)
-	}
-}
-
-func BenchmarkToTraces(b *testing.B) {
-	data, err := ioutil.ReadFile("testdata/ninja_log")
-	if err != nil {
-		b.Errorf(`ReadFile("testdata/ninja_log")=_, %v; want_, <nil>`, err)
-	}
-
-	njl, err := Parse(".ninja_log", bytes.NewReader(data))
-	if err != nil {
-		b.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-	}
-	steps := Dedup(njl.Steps)
-	flow := Flow(steps)
-	b.ResetTimer()
-	for i := 0; i < b.N; i++ {
-		ToTraces(flow, 1)
-	}
-}
-
-func BenchmarkDedupFlowToTraces(b *testing.B) {
-	data, err := ioutil.ReadFile("testdata/ninja_log")
-	if err != nil {
-		b.Errorf(`ReadFile("testdata/ninja_log")=_, %v; want_, <nil>`, err)
-	}
-
-	for i := 0; i < b.N; i++ {
-		njl, err := Parse(".ninja_log", bytes.NewReader(data))
-		if err != nil {
-			b.Errorf(`Parse()=_, %v; want=_, <nil>`, err)
-		}
-
-		steps := Dedup(njl.Steps)
-		flow := Flow(steps)
-		ToTraces(flow, 1)
-	}
-}
diff --git a/ninjalog/testdata/ninja_log b/ninjalog/testdata/ninja_log
deleted file mode 100644
index ac90cab..0000000
--- a/ninjalog/testdata/ninja_log
+++ /dev/null
@@ -1,326 +0,0 @@
-# ninja log v5
-932	1887	0	obj/aura_builder.stamp	7f299500e7cc72e4
-933	1887	0	obj/chromium_builder_tests.stamp	3b269cc5e106d1cb
-935	1889	0	obj/chromium_swarm_tests.stamp	228817dbc2838ed
-935	1889	0	obj/breakpad/stackwalk_common/ia32_operand.o	e910d286882099db
-936	1890	0	obj/breakpad/stackwalk_common/ia32_implicit.o	5f70baee81295512
-936	1891	0	obj/breakpad/stackwalk_common/ia32_insn.o	f5a4396053248fe2
-940	1892	0	obj/breakpad/stackwalk_common/ia32_settings.o	defcb1700387b35b
-941	1900	0	obj/breakpad/stackwalk_common/x86_imm.o	a9d30af1b7950290
-944	1901	0	obj/build/config/posix/posix.stamp	6d0ca2a0eaf18f67
-944	1902	0	obj/build/config/nacl/nacl_base.stamp	ef27934affc9c112
-945	1903	0	obj/build/config/sanitizers/deps_no_options.stamp	5a49d397d6442ac3
-947	1903	0	obj/build/config/linux/linux.stamp	f77230b5eb5afaf2
-947	1910	0	obj/build/config/linux/gtk3/gtk3.stamp	9b784fd2e50164d4
-947	1910	0	obj/build/config/linux/gtk3/gtkprint3.stamp	630941a61f5a6923
-948	1914	0	obj/base/base_static/switches.o	b013922ef6f8aaab
-948	1915	0	gen/base/histogram_unittest_nc.cc	dd29c0c48a525644
-949	1915	0	gen/base/callback_unittest_nc.cc	475066177ce401ff
-949	1916	0	gen/base/callback_list_unittest_nc.cc	16824df464b694f
-953	1920	0	obj/base/test/native_library_test_utils/native_library_test_utils.o	c33b12415d139603
-953	1920	0	obj/base/allocator/tcmalloc/low_level_alloc.o	1fc5cc88e3e16e23
-957	1921	0	obj/base/allocator/tcmalloc/sysinfo.o	45a91a4d87d1aa9e
-957	1922	0	obj/base/allocator/tcmalloc/vdso_support.o	3e46bc0f32a5f33c
-962	1922	0	obj/base/allocator/tcmalloc/common.o	13a060d08e39d509
-962	1923	0	obj/base/allocator/tcmalloc/free_list.o	4e42356197e89a16
-965	1925	0	obj/base/allocator/tcmalloc/malloc_extension.o	76679f18029232e7
-965	1925	0	obj/base/allocator/tcmalloc/malloc_hook.o	c627b7675ebfb1b0
-968	1925	0	obj/base/allocator/tcmalloc/page_heap.o	d94de6badd6f30e6
-968	1926	0	obj/base/allocator/tcmalloc/raw_printer.o	9a2e6e0c1a365182
-968	1927	0	obj/base/allocator/tcmalloc/sampler.o	ab3fb9ade346e5bc
-969	1927	0	obj/base/allocator/tcmalloc/stacktrace.o	7ac392099df854df
-969	1928	0	obj/base/allocator/tcmalloc/static_vars.o	5a7c9b34e682f72f
-973	1929	0	obj/base/allocator/tcmalloc/system-alloc.o	f7e40e31b72b4fed
-977	1929	0	gen/base/debug/debugging_flags.h	9596e291177bcaa7
-977	1932	0	obj/base/base_unittests_bundle_data.stamp	ccc2010a4884995f
-980	1932	0	obj/base/build_date.inputdeps.stamp	44b53a9dd8e06c36
-980	1932	0	gen/base/allocator/features.h	f9894386c01c41c2
-980	1935	0	obj/base/allocator/tcmalloc/spinlock_internal.o	52eb3163ecfc72c
-980	1935	0	obj/base/allocator/tcmalloc/abort.o	318d8d2c8df20f6c
-987	1935	0	obj/base/allocator/tcmalloc/atomicops-internals-x86.o	3d3c2a4b6e9e91fa
-1005	1936	0	obj/base/allocator/tcmalloc/logging.o	861b3c21231da430
-1023	1937	0	obj/base/third_party/xdg_mime/xdg_mime/xdgmimeicon.o	64baf98d444024dd
-1029	1937	0	obj/base/third_party/libevent/libevent/strlcpy.o	be9686387d30188e
-1171	1938	0	minidump_fuzzer.dict	2f759dc54b10c5a5
-1195	1939	0	minidump_fuzzer.options	12fb1704c79cd108
-1204	1940	0	gen/library_loaders/libgio.h	3f42a994f91c90ad
-1204	1940	0	gen/library_loaders/libgio_loader.cc	3f42a994f91c90ad
-1220	1944	0	obj/breakpad/stackwalk_common/dump_object.o	e6678006ee215cf6
-1253	1944	0	obj/breakpad/stackwalk_common/stackwalker_sparc.o	634f5cec2de7ad50
-1253	1944	0	chrome.VisualElementsManifest.xml	11019a3b23390133
-1258	1944	0	gen/library_loaders/libudev0.h	6e9ea2f9a6d08cc5
-1258	1944	0	gen/library_loaders/libudev0_loader.cc	6e9ea2f9a6d08cc5
-1259	1945	0	gen/library_loaders/libudev1.h	5cff2c8da0269aa3
-1259	1945	0	gen/library_loaders/libudev1_loader.cc	5cff2c8da0269aa3
-1259	1945	0	obj/build/util/chrome_version_json.inputdeps.stamp	4a98b379bd3a95e1
-1259	1945	0	obj/build/util/webkit_version.inputdeps.stamp	b4f2c6e2e759ee6d
-1259	1945	0	obj/build/win/default_exe_manifest.stamp	5749e6404e11fdd6
-1259	1947	0	obj/cc/ipc/interfaces__is_mojom.stamp	4f4afff0f6093dda
-1259	1948	0	obj/chrome/browser/preferences_manifest.inputdeps.stamp	373d9f2344667069
-1261	1948	0	obj/cc/ipc/test_interfaces__is_mojom.stamp	11f28ad8101031f9
-1268	1948	0	product_logo_48.png	b4486b27ac8de19e
-1269	1950	0	chrome-wrapper	c30fdbd2f2925001
-1270	1951	0	obj/chrome/manpage.inputdeps.stamp	307252fd80755cae
-1271	1951	0	xdg-mime	472f1619df53cd2b
-1272	1951	0	xdg-settings	325658a140ad44c1
-1272	1952	0	obj/chrome/app/chrome_content_gpu_manifest__is_service_manifest.stamp	bc54c4907b6aae93
-1273	1952	0	obj/chrome/app/chrome_content_browser_manifest_overlay__is_service_manifest.stamp	f6b6ad1752883df7
-1273	1952	0	obj/chrome/app/chrome_content_browser_manifest__is_service_manifest.stamp	679b1f0fffefa65f
-1273	1954	0	obj/chrome/app/chrome_content_gpu_manifest_overlay.inputdeps.stamp	87835f17ee6d9ad8
-1273	1954	0	obj/chrome/app/chrome_content_gpu_manifest_overlay__is_service_manifest.stamp	b8219a49d409a88e
-1274	1955	0	obj/chrome/app/chrome_content_packaged_services_manifest__is_service_manifest.stamp	162af6abc2708239
-1274	1956	0	obj/chrome/app/chrome_content_packaged_services_manifest_for_mash__is_service_manifest.stamp	b1395a7bf61f2e1a
-1274	1956	0	obj/chrome/app/chrome_content_packaged_services_manifest_overlay__is_service_manifest.stamp	da61f69dd6c92351
-1274	1956	0	obj/chrome/app/chrome_content_packaged_services_manifest_overlay_for_mash__is_service_manifest.stamp	2a19ea80ead0568a
-1275	1957	0	obj/chrome/app/chrome_content_plugin_manifest_overlay.inputdeps.stamp	a6733dbc50dc0b4
-1275	1957	0	obj/chrome/app/chrome_content_plugin_manifest__is_service_manifest.stamp	df4185965232a7e6
-1275	1957	0	obj/chrome/app/chrome_content_plugin_manifest_overlay__is_service_manifest.stamp	bd0fb97237c5074d
-1275	1957	0	obj/chrome/app/chrome_content_renderer_manifest_overlay.inputdeps.stamp	1605b840beae701c
-1275	1958	0	obj/chrome/app/chrome_content_renderer_manifest__is_service_manifest.stamp	5173642d314f2d18
-1276	1959	0	obj/chrome/app/chrome_content_renderer_manifest_overlay__is_service_manifest.stamp	dab5a7d3eaadd85a
-1276	1960	0	obj/chrome/app/chrome_content_utility_manifest_overlay.inputdeps.stamp	bb61a6eae7e90d98
-1276	1962	0	obj/chrome/app/chrome_content_utility_manifest__is_service_manifest.stamp	d102efc7228156fc
-1276	1962	0	obj/chrome/app/chrome_content_utility_manifest_overlay__is_service_manifest.stamp	e7c510cfbe2d9088
-1277	1962	0	obj/chrome/app/chrome_dll_resources.stamp	608c7174590ae48c
-1280	1963	0	obj/chrome/app/chrome_manifest.inputdeps.stamp	26a230f094ee6e25
-1281	1964	0	obj/chrome/app/chrome_manifest__is_service_manifest.stamp	392035a75b781481
-1281	1965	0	obj/chrome/app/command_ids.stamp	a2bf13bf4ee69ea3
-1282	1966	0	obj/chrome/browser/ui/webui/omnibox/mojo_bindings__check_deps_are_all_mojom.stamp	bd7ff06038f3ec7f
-1282	1966	0	obj/chrome/app/vector_icons/chrome_vector_icons.inputdeps.stamp	f47ee6fec73e05b0
-1282	1967	0	cast_remoting_connector_fuzzer.options	930134b769ba9f73
-1282	1967	0	obj/chrome/browser/media/router/mojo_bindings__is_mojom.stamp	466fc9a439fbb2ec
-1283	1970	0	obj/chrome/browser/media/router/mojo_bindings_common__is_mojom.stamp	8b490270cdafecf
-1283	1971	0	obj/chrome/browser/media/router/mojo_test_interfaces__is_mojom.stamp	4c893ba3099cdaf7
-1283	1971	0	obj/chrome/browser/resources/md_downloads/vulcanize.inputdeps.stamp	b463bc7f9833e4eb
-1283	1973	0	obj/chrome/browser/resources/md_history/vulcanize_app.inputdeps.stamp	5da5a62ad1dcb31f
-1283	1975	0	obj/chrome/browser/resources/md_history/vulcanize_lazy_load.inputdeps.stamp	3962d76366774295
-1284	1976	0	obj/components/domain_reliability/bake_in_configs.inputdeps.stamp	7fb2b7da8b55926b
-1284	1976	0	obj/chrome/browser/chrome_internal_resources_gen.stamp	1eae97aecd17386c
-1284	1976	0	obj/chrome/browser/preferences_manifest__is_service_manifest.stamp	33d9abfb726981c4
-1284	1978	0	obj/chrome/browser/theme_properties.stamp	6aa373278541af71
-1288	1978	0	gen/chrome/common/features.h	1380d988824bf2ae
-1289	1982	0	obj/chrome/common/mojo_bindings__is_mojom.stamp	58677facfc55a6c3
-1289	1983	0	obj/chrome/common/instant_mojom__is_mojom.stamp	eca52cd264c479c6
-1289	1983	0	obj/chrome/browser/ui/webui/engagement/mojo_bindings__is_mojom.stamp	9f26b0e2b5750aa6
-1289	1984	0	obj/chrome/browser/ui/webui/omnibox/mojo_bindings__type_mappings.inputdeps.stamp	a92cfc87812fc28e
-1289	1984	0	obj/chrome/browser/ui/webui/omnibox/mojo_bindings__is_mojom.stamp	1f292b08a229fcff
-1289	1984	0	obj/chrome/browser/ui/webui/omnibox/mojo_bindings_blink__type_mappings.inputdeps.stamp	a7ef1a514c41174f
-1289	1985	0	obj/chrome/browser/ui/webui/usb_internals/mojo_bindings__is_mojom.stamp	9f2140f824793e44
-1290	1986	0	obj/chrome/common/extensions/mojo_bindings__is_mojom.stamp	697cc1f72aa3c9e9
-1290	1987	0	obj/chrome/common/version_header_action.inputdeps.stamp	6b9baa8063a6a905
-1291	1987	0	obj/chrome/common/extensions/api/api_bundle_generator_schema.inputdeps.stamp	417a733a1b1dc1b8
-1291	1988	0	obj/chrome/common/extensions/api/api_schema_generator.inputdeps.stamp	c78d2148e660f04b
-1291	1990	0	obj/chrome/common/extensions/api/api_registration_bundle_generator_registration.inputdeps.stamp	d87a40660f2526e8
-1292	1990	0	obj/chrome/common/importer/interfaces__is_mojom.stamp	fbba48a63930fad8
-1292	1991	0	obj/components/password_manager/core/browser/unit_tests_bundle_data.stamp	a1221f6a41bbc716
-1292	1993	0	obj/components/visitedlink/common/interfaces__is_mojom.stamp	2c49363bec81305d
-1292	1994	0	obj/components/visitedlink/common/interfaces__type_mappings.inputdeps.stamp	a0d0f67f50be78ae
-1294	1994	0	obj/chrome/installer/installer.stamp	fdbc934e2b94627c
-1294	1996	0	obj/chrome/installer/util/generate_strings.inputdeps.stamp	c21387fd9dd578b7
-1294	1996	0	obj/components/payments/content/payment_app__is_mojom.stamp	a8f1f182179a2e4a
-1294	1996	0	obj/components/autofill/core/browser/unit_tests_bundle_data.stamp	76813fb9ac300ccd
-1295	1997	0	obj/components/dom_distiller/core/unit_tests_bundle_data.stamp	6a0f970508ef2822
-1295	1998	0	obj/mash/public/interfaces/interfaces__type_mappings.inputdeps.stamp	8fc53baa86393f2c
-1295	1999	0	obj/components/dom_distiller/content/common/mojo_bindings__type_mappings.inputdeps.stamp	7cf1b8d92cfbe99d
-1295	2002	0	obj/chrome/test/test.stamp	740bf2e94b308511
-1295	2005	0	obj/extensions/browser/api/api_registration_bundle_generator_registration.inputdeps.stamp	16ba782e33efde8a
-1295	2009	0	obj/components/autofill/content/common/mojo_interfaces__is_mojom.stamp	9e5b625f65094c9f
-1295	2009	0	obj/components/autofill/content/common/mojo_types__is_mojom.stamp	dcb5dbec6d55a6a7
-1296	2011	0	obj/components/autofill/content/common/mojo_test_types__is_mojom.stamp	d9c798289ba46425
-1297	2011	0	obj/components/password_manager/content/common/mojo_interfaces__is_mojom.stamp	626b36fa82d1da58
-1298	2012	0	obj/components/bookmarks/browser/unit_tests_bundle_data.stamp	597321f908035e7b
-1298	2029	0	test_data/chrome/browser/resources/print_preview/print_preview_utils.js	3da6f440b12423f5
-1298	2045	0	test_data/chrome/browser/resources/print_preview/data/measurement_system.js	276da1cf0e264513
-1298	2061	0	test_data/chrome/browser/resources/md_downloads/action_service.js	ab7d4417cd0ee295
-1298	2097	0	test_data/chrome/renderer/resources/extensions/notifications_custom_bindings.js	a6480bafe57a2747
-1299	2097	0	test_data/chrome/renderer/resources/extensions/notifications_test_util.js	21534713a862f9f0
-1300	2106	0	media_router/browser_test_resources/no_provider.json	3966753c5d416bb
-1300	2120	0	media_router/browser_test_resources/no_sinks.json	8a565aa71679478b
-1300	2121	0	media_router/test_extension/manifest.json	8f65bc8b627dcc57
-1300	2126	0	media_router/test_extension/script.js	107afb97bad014f
-1300	2127	0	media_router/browser_test_resources/close_route_with_error_on_send.json	b9facf84d2e8c445
-1301	2129	0	media_router/browser_test_resources/basic_test.html	f95507df99df541
-1301	2134	0	media_router/browser_test_resources/common.js	d07c9ad75bf70cf5
-1301	2137	0	media_router/browser_test_resources/route_creation_timed_out.json	e5dc7c74ac436fe5
-1302	2141	0	media_router/browser_test_resources/fail_create_route.json	f41da6c16c17fcce
-1302	2157	0	media_router/browser_test_resources/fail_reconnect_session.json	581f4aec17f01054
-1302	2177	0	media_router/browser_test_resources/no_supported_sinks.json	9a1378949ae8c576
-1303	2181	0	media_router/browser_test_resources/fail_reconnect_session.html	63cebfae6ed2384e
-1303	2181	0	obj/content/test/content_test_mojo_bindings__check_deps_are_all_mojom.stamp	ffff60eb9ffb675
-1303	2183	0	test_data/ui/webui/resources/js/cr.js	b6fec657a251987d
-1303	2184	0	obj/chrome/test/chromedriver/embed_js_in_cpp.inputdeps.stamp	decaaac784c17e4a
-1303	2184	0	obj/chrome/test/chromedriver/embed_user_data_dir_in_cpp.inputdeps.stamp	e92600aa087bbb93
-1304	2185	0	obj/chrome/test/chromedriver/embed_version_in_cpp.inputdeps.stamp	3972b73cb5c02713
-1304	2186	0	obj/chrome/test/chromedriver/embed_extension_in_cpp.inputdeps.stamp	b9ccb10c5ebe688b
-1304	2189	0	obj/components/content_settings/core/common/mojo_bindings__check_deps_are_all_mojom.stamp	da375d2ecca40368
-1305	2201	0	obj/components/history/core/browser/unit_tests_bundle_data.stamp	a3b912d12f688623
-1305	2201	0	obj/components/contextual_search/mojo_bindings__check_deps_are_all_mojom.stamp	18fd737f0687941e
-1305	2201	0	obj/components/contextual_search/mojo_bindings__is_mojom.stamp	d187e414f8925477
-1308	2205	0	obj/components/contextual_search/mojo_bindings__type_mappings.inputdeps.stamp	1af9b91fb39cf2c
-1309	2221	0	hid_report_descriptor_fuzzer.options	580f064a68005230
-1309	2224	0	obj/components/content_settings/core/common/mojo_bindings__type_mappings.inputdeps.stamp	5d22a3eb8a588726
-1309	2249	0	obj/components/content_settings/core/common/mojo_bindings__is_mojom.stamp	7750f7c67582c124
-1309	2258	0	obj/components/content_settings/core/common/mojo_bindings_blink__type_mappings.inputdeps.stamp	2431763c76fe6e5a
-1309	2265	0	obj/components/contextual_search/mojo_bindings_blink__type_mappings.inputdeps.stamp	e7473d8c2e1dcae2
-1311	2265	0	obj/components/data_reduction_proxy/core/common/version_header_action.inputdeps.stamp	def55c35f16728c2
-1311	2277	0	obj/components/data_reduction_proxy/core/browser/unit_tests_bundle_data.stamp	7cb412d497616df3
-1311	2297	0	obj/components/discardable_memory/public/interfaces/interfaces__type_mappings.inputdeps.stamp	dca59ab4f91c2ee8
-1311	2309	0	obj/components/discardable_memory/public/interfaces/interfaces__is_mojom.stamp	9f0a161334664221
-1311	2333	0	obj/components/discardable_memory/public/interfaces/interfaces_blink__type_mappings.inputdeps.stamp	6e36ef3a17f3de02
-1312	2345	0	obj/components/discardable_memory/public/interfaces/interfaces__check_deps_are_all_mojom.stamp	ec112dbb3de63c54
-1312	2345	0	obj/components/dom_distiller/content/common/mojo_bindings__is_mojom.stamp	e9cb079e59ba260e
-1312	2348	0	obj/components/dom_distiller/content/common/mojo_bindings__check_deps_are_all_mojom.stamp	dbece267a76395df
-1314	2353	0	obj/ui/base/ime/text_input_types.stamp	7a2d9dbcc77cfda6
-1314	2359	0	obj/components/dom_distiller/content/common/mojo_bindings_blink__type_mappings.inputdeps.stamp	1e36ef36dd3398c9
-1315	2360	0	obj/components/filesystem/test_manifest__is_service_manifest.stamp	49dd9970c19ba5e
-1315	2369	0	obj/components/filesystem/manifest__is_service_manifest.stamp	95c95da367c72984
-1315	2369	0	obj/components/filesystem/test_manifest.inputdeps.stamp	ff8428f5f54eeb48
-1315	2393	0	obj/components/filesystem/manifest.inputdeps.stamp	43bef0c83d0b0886
-1315	2393	0	obj/components/filesystem/public/interfaces/interfaces__is_mojom.stamp	4c28486b416c7fd2
-1316	2394	0	obj/components/font_service/manifest.inputdeps.stamp	d8a2303746c6b516
-1317	2395	0	obj/components/font_service/manifest__is_service_manifest.stamp	1fc5b5ae92a492b7
-1317	2396	0	obj/components/font_service/public/interfaces/interfaces__is_mojom.stamp	2f17d19bcb97eb84
-1318	2404	0	obj/components/handoff/handoff.stamp	a1ecd0e1f95f0461
-1318	2409	0	obj/components/visitedlink/common/interfaces_blink__type_mappings.inputdeps.stamp	22bdb1b353356929
-1318	2425	0	obj/components/json_schema/unit_tests_bundle_data.stamp	55e44fc60b39fe05
-1318	2427	0	obj/components/leveldb/public/interfaces/interfaces__is_mojom.stamp	a4c4f4afa51e0970
-1319	2427	0	obj/components/leveldb/test_manifest__is_service_manifest.stamp	a5060450ad053f48
-1319	2429	0	obj/components/leveldb/manifest__is_service_manifest.stamp	98ae837e0acd335
-1319	2429	0	obj/components/leveldb/test_manifest.inputdeps.stamp	68a6f2adcbd52597
-1319	2433	0	obj/components/leveldb/manifest.inputdeps.stamp	ab10e912a19cf2df
-1320	2433	0	obj/content/public/common/service_names__type_mappings.inputdeps.stamp	373bbbad6ead5f34
-1321	2453	0	obj/content/public/common/service_names__is_mojom.stamp	8357cc3b4f2c0123
-1323	2461	0	obj/content/renderer/for_content_tests.stamp	700a6a50f029f439
-1323	2461	0	obj/components/metrics/call_stack_profile_params/call_stack_profile_params.o	d0898cd3269c4685
-1324	2461	0	obj/components/metrics/public/interfaces/call_stack_mojo_bindings__is_mojom.stamp	d71fb0ea06f4ff50
-1324	2463	0	obj/components/metrics/public/interfaces/call_stack_mojo_test_bindings__is_mojom.stamp	f343bc355006eda9
-1324	2465	0	obj/content/test/content_test_mojo_bindings__is_mojom.stamp	dca0e4ba7b52130d
-1325	2466	0	obj/content/test/content_test_mojo_bindings__type_mappings.inputdeps.stamp	1b21e422740b76bd
-1325	2466	0	obj/device/bluetooth/public/interfaces/interfaces__type_mappings.inputdeps.stamp	bb0aa06fc65ada2
-1325	2486	0	obj/device/bluetooth/public/interfaces/interfaces__is_mojom.stamp	5e31bc7b9644b45e
-1325	2486	0	obj/components/omnibox/browser/unit_tests_bundle_data.stamp	e6f22eb311c939d0
-1326	2489	0	obj/components/omnibox/common/common.stamp	c3620bb786809ce6
-1326	2489	0	obj/components/omnibox/browser/omnibox_vector_icons.inputdeps.stamp	fc4caa96333b1f49
-1328	2525	0	obj/components/payments/content/payment_request__type_mappings.inputdeps.stamp	4138c73edd8d9967
-1329	2525	0	obj/components/payments/content/payment_request__is_mojom.stamp	4dbc6bdd61021ca0
-1330	2537	0	obj/components/payments/content/payment_request__check_deps_are_all_mojom.stamp	d922943f5977c2dd
-1330	2541	0	obj/components/payments/content/payment_request_blink__type_mappings.inputdeps.stamp	43997c6ac87963a4
-1330	2541	0	obj/components/policy/full_runtime_code_generate.inputdeps.stamp	8207acd4fc2c0e50
-1331	2542	0	obj/device/wake_lock/public/interfaces/interfaces_blink__type_mappings.inputdeps.stamp	6b4c989d4e204ee3
-1332	2545	0	obj/components/policy/cloud_policy_code_generate.inputdeps.stamp	80d997b008445f27
-1332	2559	0	obj/components/rappor/public/interfaces/interfaces__is_mojom.stamp	f74ddb5b30de7283
-1332	2585	0	gen/components/reading_list/core/reading_list_enable_flags.h	f18d0b5d02cf9f78
-1334	2586	0	obj/headless/version_header_action.inputdeps.stamp	c1023777f5460270
-1334	2587	0	obj/components/resources/about_credits.inputdeps.stamp	a42c859c1e84aafc
-1334	2587	0	obj/gpu/ipc/common/test_interfaces__is_mojom.stamp	6c211a01634aee8e
-1335	2587	0	obj/components/search_engines/prepopulated_engines_action.inputdeps.stamp	563322a485255768
-1335	2588	0	obj/components/safe_json/public/interfaces/interfaces__is_mojom.stamp	b1c4ffd92ad2d62
-1337	2593	0	gpu_fuzzer.options	357a45b5220e5ae6
-1337	2593	0	gen/components/spellcheck/spellcheck_build_features.h	ffbfeb2acac5fefb
-1338	2594	0	net_url_request_ftp_fuzzer.dict	d2a573f9850594ae
-1338	2594	0	net_url_request_ftp_fuzzer.options	ebf89f03483d7889
-1338	2596	0	obj/components/startup_metric_utils/common/interfaces__is_mojom.stamp	402b01730c095796
-1339	2597	0	obj/services/image_decoder/public/interfaces/constants__check_deps_are_all_mojom.stamp	79541de2b563448d
-1339	2598	0	remoting/chrome-remote-desktop-host	645e67669422d2f4
-1339	2598	0	obj/services/ui/ws/mus_ws_unittests_app_manifest.inputdeps.stamp	387fe8854b2e7630
-1339	2599	0	obj/skia/public/interfaces/test_interfaces__is_mojom.stamp	8e9419d22031d89a
-1340	2606	0	obj/services/shape_detection/manifest.inputdeps.stamp	2245ddb863b954c
-1341	2621	0	colorenhancer/src/cvd.js	bfff4c53b86e67fa
-1342	2621	0	colorenhancer/src/common.js	273a0f544599a6f
-1343	2633	0	colorenhancer/src/background.js	8b6bc1aa16c16bc8
-1343	2633	0	obj/ui/base/mojo/mojo_bindings_blink__type_mappings.inputdeps.stamp	565a2b79604e9caa
-1344	2633	0	obj/services/service_manager/manifest.inputdeps.stamp	89d35163db05eef
-1344	2634	0	obj/services/service_manager/manifest__is_service_manifest.stamp	1cbc8d6f5f4b48ff
-1350	2634	0	obj/services/service_manager/background/tests/test_manifest__is_service_manifest.stamp	d6300a614424bac5
-1351	2636	0	obj/services/service_manager/background/tests/test_service_interfaces__check_deps_are_all_mojom.stamp	17f819c51d0bbcba
-1351	2636	0	obj/services/service_manager/background/tests/test_manifest.inputdeps.stamp	ac6756d58fa02be5
-1351	2636	0	obj/services/service_manager/background/tests/test_service_interfaces__is_mojom.stamp	d9304a27f20ef777
-1351	2636	0	obj/services/service_manager/background/tests/test_service_interfaces__type_mappings.inputdeps.stamp	99a4b65a446a96c6
-1352	2637	0	obj/services/service_manager/background/tests/test_service_interfaces_blink__type_mappings.inputdeps.stamp	fc8744ed09af87be
-1352	2637	0	obj/services/service_manager/background/tests/test_service_manifest.inputdeps.stamp	c24cd0627664d8f
-1352	2637	0	obj/services/service_manager/background/tests/test_service_manifest__is_service_manifest.stamp	b5e86b588a28fb5c
-1353	2641	0	obj/services/service_manager/public/interfaces/constants__is_mojom.stamp	e062038719022d9a
-1354	2642	0	obj/services/service_manager/public/interfaces/constants__check_deps_are_all_mojom.stamp	419f0ddba4c080d6
-1356	2643	0	obj/services/service_manager/public/interfaces/constants__type_mappings.inputdeps.stamp	d69a5fd3bc55a6fa
-1357	2643	0	obj/services/service_manager/public/interfaces/constants_blink__type_mappings.inputdeps.stamp	e5d64366e8ff03ac
-1358	2645	0	obj/services/service_manager/public/interfaces/interfaces__is_mojom.stamp	8008271190de7995
-1358	2649	0	obj/services/service_manager/tests/interfaces__type_mappings.inputdeps.stamp	3b926ed55307693f
-1359	2650	0	obj/services/service_manager/tests/interfaces__is_mojom.stamp	bbf5a998c440e482
-1359	2652	0	obj/services/service_manager/runner/host/host_test_service_manifest__is_service_manifest.stamp	b3629c78e87569ea
-1360	2652	0	obj/services/service_manager/runner/host/host_test_service_manifest.inputdeps.stamp	881ed42edc54279
-1360	2654	0	obj/services/service_manager/tests/interfaces__check_deps_are_all_mojom.stamp	3e745013b5c3a7d4
-1361	2654	0	obj/ui/keyboard/mojom__is_mojom.stamp	ac83212aef984ca6
-1362	2655	0	obj/components/toolbar/toolbar_vector_icons.inputdeps.stamp	999190b061be2b18
-1363	2656	0	obj/components/translate/content/common/common__is_mojom.stamp	e77a47adf41e78ca
-1363	2658	0	obj/components/ui_devtools/protocol_compatibility.inputdeps.stamp	a262a48d447d407c
-1364	2660	0	obj/components/update_client/unit_tests_bundle_data.stamp	e34a9f29a7ddf9da
-1364	2660	0	obj/components/variations/field_trial_config/field_trial_testing_config_action.inputdeps.stamp	434946957497ef1e
-1364	2660	0	obj/testing/buildbot/filters/browser_tests_filters.stamp	3b9fd46dc80e103
-1365	2660	0	obj/components/version_info/generate_version_info_action.inputdeps.stamp	e320dedf7f041bb8
-1365	2662	0	obj/components/web_cache/public/interfaces/interfaces__type_mappings.inputdeps.stamp	1d8798130ad180c8
-1365	2662	0	obj/components/web_cache/public/interfaces/interfaces__is_mojom.stamp	5173eb112c5d56f1
-1366	2669	0	obj/mash/public/interfaces/interfaces__is_mojom.stamp	6dd113bd4ce0134a
-1366	2669	0	obj/components/web_cache/public/interfaces/interfaces_blink__type_mappings.inputdeps.stamp	defee36e55d65320
-1367	2669	0	obj/components/visitedlink/common/interfaces__check_deps_are_all_mojom.stamp	12c5f8f404f07144
-1367	2669	0	obj/components/web_cache/public/interfaces/interfaces__check_deps_are_all_mojom.stamp	4d22832bbd44e332
-1368	2673	0	obj/content/sandbox_helper_win.stamp	53556bd1952574d0
-1369	2681	0	obj/services/ui/demo/manifest.inputdeps.stamp	d261cb8b5832ad36
-1370	2681	0	obj/components/webdata/common/unit_tests_bundle_data.stamp	bea6c98642e32d4e
-1370	2681	0	obj/content/app/both_for_content_tests.stamp	61ebf49fd98b90cc
-1370	2681	0	obj/content/export.stamp	4a060d841250382b
-1370	2681	0	obj/content/common/mojo_bindings__is_mojom.stamp	41eea74b73e02dfb
-1371	2682	0	obj/content/child/for_content_tests.stamp	44aaf3e748abc1ea
-1371	2682	0	gen/content/public/common/features.h	f5ec1a1276c73150
-1372	2683	0	obj/content/common/for_content_tests.stamp	b3f0afc35633fbca
-1373	2684	0	gen/content/common/features.h	f14dec80fcf32baa
-1373	2685	0	obj/services/ui/demo/test_manifest.inputdeps.stamp	76824c99aa6bf355
-1373	2685	0	obj/content/public/app/renderer_manifest__is_service_manifest.stamp	fd7f4a85ccacf1b7
-1374	2686	0	obj/content/public/app/renderer_manifest.inputdeps.stamp	48032c8ab25a6aec
-1374	2688	0	obj/content/public/app/plugin_manifest__is_service_manifest.stamp	99d43b55bb330fae
-1374	2690	0	obj/content/public/app/plugin_manifest.inputdeps.stamp	fd40843720182461
-1374	2690	0	obj/content/public/app/packaged_services_manifest__is_service_manifest.stamp	4813dd4c7cfe0dd4
-1375	2691	0	obj/content/public/app/gpu_manifest__is_service_manifest.stamp	ae2b882bbd8bb292
-1375	2692	0	obj/content/public/app/gpu_manifest.inputdeps.stamp	d316339c888e8cbf
-1375	2692	0	obj/content/public/app/browser_manifest__is_service_manifest.stamp	83671be596ae3bf9
-1377	2692	0	obj/content/public/app/utility_manifest__is_service_manifest.stamp	c875df2d90c2c80
-1378	2693	0	obj/content/public/app/utility_manifest.inputdeps.stamp	88bb6e963b00b0c1
-1378	2694	0	obj/content/public/common/service_names_blink__type_mappings.inputdeps.stamp	1b2338947af3a1b
-1378	2694	0	obj/content/public/common/interfaces__check_deps_are_all_mojom.stamp	97afcae8baadc77a
-1379	2694	0	obj/content/public/common/result_codes.stamp	7e3d25132dcedc3b
-1380	2694	0	obj/content/public/common/service_names__check_deps_are_all_mojom.stamp	1b497d9c4f1d8650
-1380	2695	0	obj/content/public/common/interfaces__type_mappings.inputdeps.stamp	359a82b755d6dfbc
-1380	2696	0	obj/content/public/common/interfaces__is_mojom.stamp	4a4e8a0c32c5f938
-1381	2696	0	obj/content/public/common/interfaces_blink__type_mappings.inputdeps.stamp	ee602eacc9b045e9
-1381	2697	0	GardinerModCat.ttf	3ce72a7c357259c0
-1381	2699	0	GardinerModBug.ttf	69f4c57ee21e3d45
-1382	2699	0	fonts.conf	903c92c674848f27
-1383	2699	0	AHEM____.TTF	d9be98d3534e71be
-1384	2699	0	obj/content/shell/mojo_bindings__is_mojom.stamp	41a503d4088b8a6d
-1384	2700	0	obj/content/test/content_test_mojo_bindings_blink__type_mappings.inputdeps.stamp	cdbad946535f7511
-1385	2701	0	obj/content/test/content_unittests_manifest__is_service_manifest.stamp	f72e2413607b90b6
-1385	2701	0	obj/content/utility/for_content_tests.stamp	144e86637a119ab7
-1385	2701	0	obj/content/test/web_ui_test_mojo_bindings__check_deps_are_all_mojom.stamp	70bf70f78a81f092
-1386	2703	0	obj/third_party/webrtc/base/gtest_prod.stamp	c7ba3618f71670fe
-1387	2713	0	obj/device/battery/mojo_bindings__is_mojom.stamp	d1000202725cdd3a
-1387	2713	0	obj/device/battery/mojo_bindings_blink__type_mappings.inputdeps.stamp	b5a2ba69c2ffe9f1
-1388	2714	0	obj/device/battery/mojo_bindings__check_deps_are_all_mojom.stamp	ec7d3f5902ab03b8
-1388	2715	0	obj/device/battery/mojo_bindings__type_mappings.inputdeps.stamp	8f755a1226416498
-1388	2716	0	obj/content/test/web_ui_test_mojo_bindings_blink__type_mappings.inputdeps.stamp	491d4795773c54c8
-1388	2716	0	obj/content/test/web_ui_test_mojo_bindings__type_mappings.inputdeps.stamp	de7637397f63b2ec
-1389	2716	0	obj/content/test/web_ui_test_mojo_bindings__is_mojom.stamp	1e0ab0348c2e1ee0
-1390	2717	0	obj/content/test/fuzzer/fuzzer.stamp	bbc6f5317d29aa65
-1390	2718	0	obj/device/bluetooth/public/interfaces/experimental_interfaces__is_mojom.stamp	1c79665bed98ab04
-1390	2719	0	obj/device/bluetooth/public/interfaces/interfaces__check_deps_are_all_mojom.stamp	89c2f14913b32f85
-1391	2719	0	obj/device/bluetooth/public/interfaces/interfaces_blink__type_mappings.inputdeps.stamp	2b05f29f4adaa33
-1392	2720	0	obj/device/gamepad/public/interfaces/gamepad_struct_traits_test__is_mojom.stamp	33daf38dd323965b
-1393	2721	0	obj/device/gamepad/public/interfaces/interfaces__check_deps_are_all_mojom.stamp	35111b8a42281362
-1393	2721	0	obj/device/gamepad/public/interfaces/interfaces__is_mojom.stamp	60c295fb5928248a
-1394	2722	0	obj/device/gamepad/public/interfaces/interfaces__type_mappings.inputdeps.stamp	3b2c48390830aa2b
-1395	2725	0	obj/device/gamepad/public/interfaces/interfaces_blink__type_mappings.inputdeps.stamp	1e19f40cc0de3a70
-1395	2733	0	obj/device/generic_sensor/public/interfaces/interfaces__check_deps_are_all_mojom.stamp	4314a13b8c276e18
-1395	2733	0	obj/device/generic_sensor/public/interfaces/interfaces__is_mojom.stamp	69989e0cd8e35ad4
-1396	2735	0	obj/device/generic_sensor/public/interfaces/interfaces__type_mappings.inputdeps.stamp	5ddddfa704d022e6
-1396	2735	0	obj/device/generic_sensor/public/interfaces/interfaces_blink__type_mappings.inputdeps.stamp	e1fa941c54fc56cc
-1397	2735	0	obj/device/geolocation/public/interfaces/interfaces__is_mojom.stamp	1c29a8f30eb15f9d
-1397	2736	0	obj/device/geolocation/public/interfaces/interfaces__type_mappings.inputdeps.stamp	286d95a305d8b211
-1398	2737	0	obj/device/geolocation/public/interfaces/interfaces__check_deps_are_all_mojom.stamp	a9256d80d904d268
diff --git a/ninjalog/trace.go b/ninjalog/trace.go
deleted file mode 100644
index 0313d4c..0000000
--- a/ninjalog/trace.go
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright 2014 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package ninjalog
-
-import (
-	"sort"
-)
-
-// Trace is an entry of trace format.
-// https://code.google.com/p/trace-viewer/
-type Trace struct {
-	Name      string                 `json:"name"`
-	Category  string                 `json:"cat"`
-	EventType string                 `json:"ph"`
-	Timestamp int                    `json:"ts"`  // microsecond
-	Duration  int                    `json:"dur"` // microsecond
-	ProcessID int                    `json:"pid"`
-	ThreadID  int                    `json:"tid"`
-	Args      map[string]interface{} `json:"args"`
-}
-
-type traceByStart []Trace
-
-func (t traceByStart) Len() int           { return len(t) }
-func (t traceByStart) Swap(i, j int)      { t[i], t[j] = t[j], t[i] }
-func (t traceByStart) Less(i, j int) bool { return t[i].Timestamp < t[j].Timestamp }
-
-func toTrace(step Step, pid int, tid int) Trace {
-	return Trace{
-		Name:      step.Out,
-		Category:  "target",
-		EventType: "X",
-		Timestamp: int(step.Start.Nanoseconds() / 1000),
-		Duration:  int(step.Duration().Nanoseconds() / 1000),
-		ProcessID: pid,
-		ThreadID:  tid,
-		Args:      make(map[string]interface{}),
-	}
-}
-
-// ToTraces converts Flow outputs into trace log.
-func ToTraces(steps [][]Step, pid int) []Trace {
-	traceNum := 0
-	for _, thread := range steps {
-		traceNum += len(thread)
-	}
-
-	traces := make([]Trace, 0, traceNum)
-	for tid, thread := range steps {
-		for _, step := range thread {
-			traces = append(traces, toTrace(step, pid, tid))
-		}
-	}
-	sort.Sort(traceByStart(traces))
-	return traces
-}
diff --git a/ninjalog/trace_test.go b/ninjalog/trace_test.go
deleted file mode 100644
index 9417587..0000000
--- a/ninjalog/trace_test.go
+++ /dev/null
@@ -1,164 +0,0 @@
-// Copyright 2014 The Fuchsia Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package ninjalog
-
-import (
-	"reflect"
-	"testing"
-	"time"
-)
-
-func TestTrace(t *testing.T) {
-	flow := [][]Step{
-		[]Step{
-			Step{
-				Start:   76 * time.Millisecond,
-				End:     187 * time.Millisecond,
-				Out:     "resources/inspector/devtools_extension_api.js",
-				CmdHash: "75430546595be7c2",
-			},
-			Step{
-				Start:   187 * time.Millisecond,
-				End:     21304 * time.Millisecond,
-				Out:     "obj/third_party/pdfium/core/src/fpdfdoc/fpdfdoc.doc_formfield.o",
-				CmdHash: "2ac7111aa1ae86af",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   78 * time.Millisecond,
-				End:     286 * time.Millisecond,
-				Out:     "gen/angle/commit_id.py",
-				CmdHash: "4ede38e2c1617d8c",
-			},
-			Step{
-				Start:   287 * time.Millisecond,
-				End:     290 * time.Millisecond,
-				Out:     "obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp",
-				CmdHash: "b211d373de72f455",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   79 * time.Millisecond,
-				End:     287 * time.Millisecond,
-				Out:     "gen/angle/copy_compiler_dll.bat",
-				CmdHash: "9fb635ad5d2c1109",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   80 * time.Millisecond,
-				End:     284 * time.Millisecond,
-				Out:     "gen/autofill_regex_constants.cc",
-				CmdHash: "fa33c8d7ce1d8791",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   141 * time.Millisecond,
-				End:     287 * time.Millisecond,
-				Out:     "PepperFlash/manifest.json",
-				CmdHash: "324f0a0b77c37ef",
-			},
-		},
-		[]Step{
-			Step{
-				Start:   142 * time.Millisecond,
-				End:     288 * time.Millisecond,
-				Out:     "PepperFlash/libpepflashplayer.so",
-				CmdHash: "1e2c2b7845a4d4fe",
-			},
-		},
-	}
-
-	traces := ToTraces(flow, 1)
-	want := []Trace{
-		Trace{
-			Name:      "resources/inspector/devtools_extension_api.js",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 76 * 1000,
-			Duration:  (187 - 76) * 1000,
-			ProcessID: 1,
-			ThreadID:  0,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "gen/angle/commit_id.py",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 78 * 1000,
-			Duration:  (286 - 78) * 1000,
-			ProcessID: 1,
-			ThreadID:  1,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "gen/angle/copy_compiler_dll.bat",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 79 * 1000,
-			Duration:  (287 - 79) * 1000,
-			ProcessID: 1,
-			ThreadID:  2,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "gen/autofill_regex_constants.cc",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 80 * 1000,
-			Duration:  (284 - 80) * 1000,
-			ProcessID: 1,
-			ThreadID:  3,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "PepperFlash/manifest.json",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 141 * 1000,
-			Duration:  (287 - 141) * 1000,
-			ProcessID: 1,
-			ThreadID:  4,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "PepperFlash/libpepflashplayer.so",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 142 * 1000,
-			Duration:  (288 - 142) * 1000,
-			ProcessID: 1,
-			ThreadID:  5,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "obj/third_party/pdfium/core/src/fpdfdoc/fpdfdoc.doc_formfield.o",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 187 * 1000,
-			Duration:  (21304 - 187) * 1000,
-			ProcessID: 1,
-			ThreadID:  0,
-			Args:      map[string]interface{}{},
-		},
-		Trace{
-			Name:      "obj/third_party/angle/src/copy_scripts.actions_rules_copies.stamp",
-			Category:  "target",
-			EventType: "X",
-			Timestamp: 287 * 1000,
-			Duration:  (290 - 287) * 1000,
-			ProcessID: 1,
-			ThreadID:  1,
-			Args:      map[string]interface{}{},
-		},
-	}
-
-	if !reflect.DeepEqual(traces, want) {
-		t.Errorf("ToTrace()=%v; want=%v", traces, want)
-	}
-}