blob: 320d9d8e40ad8754512d355a9407a7e67d281540 [file] [log] [blame]
Dan Willemsencae59bc2017-07-13 14:27:31 -07001// Copyright 2017 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package tracer
16
17import (
18 "bufio"
19 "os"
20 "strconv"
21 "strings"
22)
23
24func (t *tracerImpl) ImportMicrofactoryLog(filename string) {
25 if _, err := os.Stat(filename); err != nil {
26 return
27 }
28
29 f, err := os.Open(filename)
30 if err != nil {
31 t.log.Println("Error opening microfactory trace:", err)
32 return
33 }
34 defer f.Close()
35
36 entries := []*eventEntry{}
37 begin := map[string][]uint64{}
38 s := bufio.NewScanner(f)
39 for s.Scan() {
40 fields := strings.SplitN(s.Text(), " ", 3)
41 if len(fields) != 3 {
42 t.log.Verboseln("Unknown line in microfactory trace:", s.Text())
43 continue
44 }
45 timestamp, err := strconv.ParseUint(fields[0], 10, 64)
46 if err != nil {
47 t.log.Verboseln("Failed to parse timestamp in microfactory trace:", err)
48 }
49
50 if fields[1] == "B" {
51 begin[fields[2]] = append(begin[fields[2]], timestamp)
52 } else if beginTimestamps, ok := begin[fields[2]]; ok {
53 entries = append(entries, &eventEntry{
54 Name: fields[2],
55 Begin: beginTimestamps[len(beginTimestamps)-1],
56 End: timestamp,
57 })
58 begin[fields[2]] = beginTimestamps[:len(beginTimestamps)-1]
59 }
60 }
61
62 t.importEvents(entries)
63}