[Tracing] Support CounterEvent in tracing.go
PT-168 #Support CounterEvent in tracing.go
TEST=
fx set <product>.<board> --release --with-base
//garnet/packages/tests:cobalt_client,//garnet/packages/tests:go_benchmarking_tests
fx build && fx update
fx run-test go_benchmarking_tests
Change-Id: I26e6f6582061c1f919b8c869e40b497ccd3758c6
diff --git a/garnet/go/src/benchmarking/tracing.go b/garnet/go/src/benchmarking/tracing.go
index fa819a2..8a3704d4 100644
--- a/garnet/go/src/benchmarking/tracing.go
+++ b/garnet/go/src/benchmarking/tracing.go
@@ -102,6 +102,7 @@
AsyncEvent EventType = 1
InstantEvent EventType = 2
FlowEvent EventType = 3
+ CounterEvent EventType = 4
)
// A struct that represents an Event in the model.
@@ -413,6 +414,12 @@
top.Children = append(top.Children, thread.Events[len(thread.Events)-1])
}
delete(liveFlowEvents, flowId)
+ case "C":
+ // Counter event.
+ counterEvent := Event{CounterEvent, traceEvent.Cat, traceEvent.Name, traceEvent.Pid,
+ traceEvent.Tid, traceEvent.Ts, 0, traceEvent.ID(), traceEvent.Args, nil, make([]*Event, 0)}
+ thread := m.getOrCreateThreadById(traceEvent.Pid, traceEvent.Tid)
+ thread.Events = append(thread.Events, &counterEvent)
}
}
}
diff --git a/garnet/go/src/benchmarking/tracing_test.go b/garnet/go/src/benchmarking/tracing_test.go
index 594bf17..6b04eba 100644
--- a/garnet/go/src/benchmarking/tracing_test.go
+++ b/garnet/go/src/benchmarking/tracing_test.go
@@ -88,8 +88,7 @@
"pid": 7009,
"tid": 7022,
"ph": "e"
- },
- {
+ }, {
"name": "log",
"ph": "i",
"ts": 7055567057.312,
@@ -99,8 +98,16 @@
"args": {
"message": "[INFO:trace_manager.cc(66)] Stopping trace"
}
+ }, {
+ "cat": "system_metrics",
+ "name": "cpu_usage",
+ "ts": 35241122.375,
+ "pid": 9234,
+ "tid": 5678,
+ "ph": "C",
+ "args": {"average_cpu_percentage": 0.89349317793, "max_cpu_usage": 0.1234}
}
- ],
+ ],
"systemTraceEvents": {
"type": "fuchsia",
"events": [{
@@ -181,8 +188,7 @@
"pid": 7009,
"tid": 7022,
"ph": "e"
- },
- {
+ }, {
"name": "log",
"ph": "i",
"ts": 7055567057.312,
@@ -192,8 +198,16 @@
"args": {
"message": "[INFO:trace_manager.cc(66)] Stopping trace"
}
+ }, {
+ "cat": "system_metrics",
+ "name": "cpu_usage",
+ "ts": 35241122.375,
+ "pid": 9234,
+ "tid": 5678,
+ "ph": "C",
+ "args": {"average_cpu_percentage": 0.89349317793, "max_cpu_usage": 0.1234}
}
- ],
+ ],
"systemTraceEvents": {
"type": "fuchsia",
"events": [{
@@ -214,6 +228,11 @@
func TestReadTrace(t *testing.T) {
expectedModel := Model{
Processes: []Process{
+ Process{Name: "", Pid: 9234, Threads: []Thread{
+ Thread{Name: "", Tid: 5678, Events: []*Event{
+ &Event{Type: 4, Cat: "system_metrics", Name: "cpu_usage", Pid: 9234, Tid: 5678, Start: 3.5241122375e+07, Dur: 0, Id: 0, Args: map[string]interface{}{"average_cpu_percentage":0.89349317793, "max_cpu_usage":0.1234}, Parent: nil, Children: make([]*Event, 0)},
+ }},
+ }},
Process{Name: "root_presenter", Pid: 7009, Threads: []Thread{
Thread{Name: "initial-thread", Tid: 7022, Events: []*Event{
&Event{Type: 1, Cat: "async", Name: "ReadWrite", Pid: 7009, Tid: 7022, Start: 6.87503138e+08, Dur: 0, Id: 43, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)},
@@ -222,16 +241,22 @@
}},
Thread{Name: "", Tid: 7021, Events: []*Event{
&Event{Type: 0, Cat: "input", Name: "Read", Pid: 7009, Tid: 7021, Start: 6.975031389531089e+08, Dur: 322.78645980358124, Id: 0, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)},
- &Event{Type: 3, Cat: "input", Name: "ReadWriteFlow", Pid: 7009, Tid: 7021, Start: 6.975031399531089e+08, Dur: 0.0, Id: 0, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)}}},
+ &Event{Type: 3, Cat: "input", Name: "ReadWriteFlow", Pid: 7009, Tid: 7021, Start: 6.975031399531089e+08, Dur: 0.0, Id: 0, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)},
+ }},
}},
Process{Name: "", Pid: 7010, Threads: []Thread{
Thread{Name: "", Tid: 7023, Events: []*Event{
- &Event{Type: 0, Cat: "io", Name: "Read", Pid: 7010, Tid: 7023, Start: 6.978681853588456e+08, Dur: 386.2429618835449, Id: 0, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)}}}}},
+ &Event{Type: 0, Cat: "io", Name: "Read", Pid: 7010, Tid: 7023, Start: 6.978681853588456e+08, Dur: 386.2429618835449, Id: 0, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)},
+ }},
+ }},
Process{Name: "", Pid: 5945, Threads: []Thread{
Thread{Name: "", Tid: 5962, Events: []*Event{
- &Event{Type: 2, Cat: "", Name: "log", Pid: 5945, Tid: 5962, Start: 7.055567057312e+09, Dur: 0, Id: 0, Args: map[string]interface{}{"message": "[INFO:trace_manager.cc(66)] Stopping trace"}, Parent: nil, Children: make([]*Event, 0)}}}}}}}
+ &Event{Type: 2, Cat: "", Name: "log", Pid: 5945, Tid: 5962, Start: 7.055567057312e+09, Dur: 0, Id: 0, Args: map[string]interface{}{"message": "[INFO:trace_manager.cc(66)] Stopping trace"}, Parent: nil, Children: make([]*Event, 0)},
+ }},
+ }},
+ }}
- p7009 := expectedModel.Processes[0]
+ p7009 := expectedModel.Processes[1]
t7022 := p7009.Threads[0]
t7021 := p7009.Threads[1]
@@ -252,7 +277,6 @@
if err != nil {
t.Fatalf("Processing the trace produced an error: %#v\n", err)
}
-
if !reflect.DeepEqual(expectedModel, model) {
t.Error("Generated model and expected model are different\n")
}
@@ -309,6 +333,13 @@
&Event{Type: 0, Cat: "io", Name: "Read", Pid: 7010, Tid: 7023, Start: 6.978681853588456e+08, Dur: 386.2429618835449, Id: 0, Args: map[string]interface{}(nil), Parent: nil, Children: make([]*Event, 0)}}
events = model.FindEvents(EventsFilter{Name: &name, Cat: &cat})
compareEvents(t, "Find events by Name and Category", expectedEvents, events)
+
+ cat = "system_metrics"
+ name = "cpu_usage"
+ expectedEvents = []*Event{
+ &Event{Type: 4, Cat: "system_metrics", Name: "cpu_usage", Pid: 9234, Tid: 5678, Start: 3.5241122375e+07, Dur: 0, Id: 0, Args: map[string]interface{}{"average_cpu_percentage":0.89349317793, "max_cpu_usage":0.1234}, Parent: nil, Children: make([]*Event, 0)}}
+ events = model.FindEvents(EventsFilter{Name: &name, Cat: &cat})
+ compareEvents(t, "Find events by Name and Category", expectedEvents, events)
}
func compareAvgDurations(t *testing.T, listSize int, expected float64, actual float64) {