1// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5'use strict';
6
7base.require('tracing.test_utils');
8base.require('tracing.importer.linux_perf_importer');
9
10base.unittest.testSuite('tracing.importer.linux_perf.android_parser',
11                        function() {
12      test('androidUserlandImport', function() {
13        var lines = [
14          'SurfaceFlinger-4831  [001] ...1 80909.598554: tracing_mark_write: B|4829|onMessageReceived', // @suppress longLineCheck
15          'SurfaceFlinger-4831  [001] ...1 80909.598572: tracing_mark_write: B|4829|handleMessageInvalidate', // @suppress longLineCheck
16          'SurfaceFlinger-4831  [001] ...1 80909.598590: tracing_mark_write: B|4829|latchBuffer', // @suppress longLineCheck
17          'SurfaceFlinger-4831  [001] ...1 80909.598604: tracing_mark_write: E',
18          'SurfaceFlinger-4831  [001] ...1 80909.598627: tracing_mark_write: B|4829|latchBuffer', // @suppress longLineCheck
19          'SurfaceFlinger-4831  [001] ...1 80909.598651: tracing_mark_write: B|4829|updateTexImage', // @suppress longLineCheck
20          'SurfaceFlinger-4831  [001] ...1 80909.598675: tracing_mark_write: B|4829|acquireBuffer', // @suppress longLineCheck
21          'SurfaceFlinger-4831  [001] ...1 80909.598695: tracing_mark_write: B|4829|' + // @suppress longLineCheck
22              'com.android.launcher/com.android.launcher2.Launcher: 0',
23          'SurfaceFlinger-4831  [001] ...1 80909.598709: tracing_mark_write: E',
24          'SurfaceFlinger-4831  [001] ...1 80909.598733: tracing_mark_write: C|4829|' + // @suppress longLineCheck
25              'com.android.launcher/com.android.launcher2.Launcher|0',
26          'SurfaceFlinger-4831  [001] ...1 80909.598746: tracing_mark_write: E',
27          'SurfaceFlinger-4831  [001] ...1 80909.598844: tracing_mark_write: B|4829|releaseBuffer', // @suppress longLineCheck
28          'SurfaceFlinger-4831  [001] ...1 80909.598862: tracing_mark_write: B|4829|' + // @suppress longLineCheck
29              'com.android.launcher/com.android.launcher2.Launcher: 2',
30          'SurfaceFlinger-4831  [001] ...1 80909.598876: tracing_mark_write: E',
31          'SurfaceFlinger-4831  [001] ...1 80909.598892: tracing_mark_write: E',
32          'SurfaceFlinger-4831  [001] ...1 80909.598925: tracing_mark_write: E',
33          'SurfaceFlinger-4831  [001] ...1 80909.598955: tracing_mark_write: E',
34          'SurfaceFlinger-4831  [001] ...1 80909.598988: tracing_mark_write: B|4829|latchBuffer', // @suppress longLineCheck
35          'SurfaceFlinger-4831  [001] ...1 80909.599001: tracing_mark_write: E',
36          'SurfaceFlinger-4831  [001] ...1 80909.599021: tracing_mark_write: B|4829|latchBuffer', // @suppress longLineCheck
37          'SurfaceFlinger-4831  [001] ...1 80909.599036: tracing_mark_write: E',
38          'SurfaceFlinger-4831  [001] ...1 80909.599068: tracing_mark_write: E',
39          'SurfaceFlinger-4831  [001] ...1 80909.599087: tracing_mark_write: E',
40          'SurfaceFlinger-4831  [001] ...1 80909.599104: tracing_mark_write: E'
41        ];
42        var m = new tracing.TraceModel(lines.join('\n'), false);
43        assertEquals(0, m.importErrors.length);
44
45        var threads = m.getAllThreads();
46        assertEquals(1, threads.length);
47
48        var thread = threads[0];
49        assertEquals(4829, thread.parent.pid);
50        assertEquals(4831, thread.tid);
51        assertEquals('SurfaceFlinger', thread.name);
52        assertEquals(11, thread.sliceGroup.length);
53      });
54
55      test('androidUserlandImportWithSpacesInThreadName', function() {
56        var lines = [
57          'Surface Flinger -4831  [001] ...1 80909.598590: tracing_mark_write: B|4829|latchBuffer', // @suppress longLineCheck
58          'Surface Flinger -4831  [001] ...1 80909.598604: tracing_mark_write: E' // @suppress longLineCheck
59        ];
60        var m = new tracing.TraceModel(lines.join('\n'), false);
61        assertEquals(0, m.importErrors.length);
62
63        var threads = m.getAllThreads();
64        assertEquals(1, threads.length);
65
66        var thread = threads[0];
67        assertEquals(4829, thread.parent.pid);
68        assertEquals(4831, thread.tid);
69        assertEquals('Surface Flinger ', thread.name);
70        assertEquals(1, thread.sliceGroup.length);
71      });
72
73      test('androidAsyncUserlandImport', function() {
74        var lines = [
75          'ndroid.launcher-9649  ( 9649) [000] ...1 1990280.663276: ' +
76              'tracing_mark_write: S|9649|animator:childrenOutlineAlpha|' +
77              '1113053968',
78          'ndroid.launcher-9649  ( 9649) [000] ...1 1990280.781445: ' +
79              'tracing_mark_write: F|9649|animator:childrenOutlineAlpha|' +
80              '1113053968'
81        ];
82        var m = new tracing.TraceModel(lines.join('\n'), false);
83        assertEquals(0, m.importErrors.length);
84
85        var threads = m.getAllThreads();
86        assertEquals(1, threads.length);
87
88        var thread = threads[0];
89        assertEquals(9649, thread.parent.pid);
90        assertEquals(9649, thread.tid);
91        assertEquals('ndroid.launcher', thread.name);
92        assertEquals(0, thread.sliceGroup.length);
93        assertEquals(1, thread.asyncSliceGroup.length);
94
95        var slice = thread.asyncSliceGroup.slices[0];
96        assertEquals('animator:childrenOutlineAlpha', slice.title);
97        assertAlmostEquals(118.169, slice.duration);
98      });
99
100      test('androidUserlandLegacyKernelImport', function() {
101        var lines = [
102          'SurfaceFlinger-4831  [001] ...1 80909.598554: 0: B|4829|onMessageReceived', // @suppress longLineCheck
103          'SurfaceFlinger-4831  [001] ...1 80909.598572: 0: B|4829|handleMessageInvalidate', // @suppress longLineCheck
104          'SurfaceFlinger-4831  [001] ...1 80909.598590: 0: B|4829|latchBuffer',
105          'SurfaceFlinger-4831  [001] ...1 80909.598604: 0: E',
106          'SurfaceFlinger-4831  [001] ...1 80909.598627: 0: B|4829|latchBuffer',
107          'SurfaceFlinger-4831  [001] ...1 80909.598651: 0: B|4829|updateTexImage', // @suppress longLineCheck
108          'SurfaceFlinger-4831  [001] ...1 80909.598675: 0: B|4829|acquireBuffer', // @suppress longLineCheck
109          'SurfaceFlinger-4831  [001] ...1 80909.598695: 0: B|4829|' +
110              'com.android.launcher/com.android.launcher2.Launcher: 0',
111          'SurfaceFlinger-4831  [001] ...1 80909.598709: 0: E',
112          'SurfaceFlinger-4831  [001] ...1 80909.598733: 0: C|4829|' +
113              'com.android.launcher/com.android.launcher2.Launcher|0',
114          'SurfaceFlinger-4831  [001] ...1 80909.598746: 0: E',
115          'SurfaceFlinger-4831  [001] ...1 80909.598844: 0: B|4829|releaseBuffer', // @suppress longLineCheck
116          'SurfaceFlinger-4831  [001] ...1 80909.598862: 0: B|4829|' +
117              'com.android.launcher/com.android.launcher2.Launcher: 2',
118          'SurfaceFlinger-4831  [001] ...1 80909.598876: 0: E',
119          'SurfaceFlinger-4831  [001] ...1 80909.598892: 0: E',
120          'SurfaceFlinger-4831  [001] ...1 80909.598925: 0: E',
121          'SurfaceFlinger-4831  [001] ...1 80909.598955: 0: E',
122          'SurfaceFlinger-4831  [001] ...1 80909.598988: 0: B|4829|latchBuffer', // @suppress longLineCheck
123          'SurfaceFlinger-4831  [001] ...1 80909.599001: 0: E',
124          'SurfaceFlinger-4831  [001] ...1 80909.599021: 0: B|4829|latchBuffer', // @suppress longLineCheck
125          'SurfaceFlinger-4831  [001] ...1 80909.599036: 0: E',
126          'SurfaceFlinger-4831  [001] ...1 80909.599068: 0: E',
127          'SurfaceFlinger-4831  [001] ...1 80909.599087: 0: E',
128          'SurfaceFlinger-4831  [001] ...1 80909.599104: 0: E'
129        ];
130        var m = new tracing.TraceModel(lines.join('\n'), false);
131        assertEquals(0, m.importErrors.length);
132
133        var threads = m.getAllThreads();
134        assertEquals(1, threads.length);
135
136        var thread = threads[0];
137        assertEquals(4829, thread.parent.pid);
138        assertEquals(4831, thread.tid);
139        assertEquals('SurfaceFlinger', thread.name);
140        assertEquals(11, thread.sliceGroup.length);
141      });
142
143      test('androidUserlandChromiumImport', function() {
144        var lines = [
145          'SandboxedProces-2894  [001] ...1   253.780659: tracing_mark_write: B|2867|DoWorkLoop|arg1=1|cat1', // @suppress longLineCheck
146          'SandboxedProces-2894  [001] ...1   253.780671: tracing_mark_write: B|2867|DeferOrRunPendingTask|source=test=test;task=xyz|cat2', // @suppress longLineCheck
147          'SandboxedProces-2894  [001] ...1   253.780671: tracing_mark_write: E|2867|DeferOrRunPendingTask||cat1', // @suppress longLineCheck
148          'SandboxedProces-2894  [001] ...1   253.780686: tracing_mark_write: B|2867|MessageLoop::RunTask|source=ipc/ipc_sync_message_filter.cc:Send|cat2', // @suppress longLineCheck
149          'SandboxedProces-2894  [001] ...1   253.780700: tracing_mark_write: E|2867|MessageLoop::RunTask||cat1', // @suppress longLineCheck
150          'SandboxedProces-2894  [001] ...1   253.780750: tracing_mark_write: C|2867|counter1|10|cat1', // @suppress longLineCheck
151          'SandboxedProces-2894  [001] ...1   253.780859: tracing_mark_write: E|2867|DoWorkLoop|arg2=2|cat2' // @suppress longLineCheck
152        ];
153        var m = new tracing.TraceModel(lines.join('\n'), false);
154        assertEquals(0, m.importErrors.length);
155
156        var threads = m.getAllThreads();
157        assertEquals(1, threads.length);
158
159        var thread = threads[0];
160        assertEquals(2867, thread.parent.pid);
161        assertEquals(2894, thread.tid);
162        assertEquals('SandboxedProces', thread.name);
163        assertEquals(3, thread.sliceGroup.length);
164
165        assertEquals('test=test', thread.sliceGroup.slices[0].args['source']);
166        assertEquals('cat2', thread.sliceGroup.slices[0].category);
167        assertEquals('DeferOrRunPendingTask',
168                     thread.sliceGroup.slices[0].title);
169        assertEquals('xyz', thread.sliceGroup.slices[0].args['task']);
170        assertEquals('ipc/ipc_sync_message_filter.cc:Send', thread.sliceGroup.slices[1].args['source']); // @suppress longLineCheck
171        assertEquals('1', thread.sliceGroup.slices[2].args['arg1']);
172        assertEquals('2', thread.sliceGroup.slices[2].args['arg2']);
173
174        var counters = m.getAllCounters();
175        assertEquals(1, counters.length);
176        assertEquals('cat1', counters[0].category);
177        assertEquals('counter1', counters[0].name);
178
179        assertEquals(1, counters[0].numSamples);
180        assertEquals(10, counters[0].getSeries(0).getSample(0).value);
181      });
182    });
183