3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
8 <link rel="import" href="/tracing/test_utils.html">
9 <link rel="import" href="/tracing/importer/linux_perf_importer.html">
14 tv.unittest.testSuite(function() { // @suppress longLineCheck
15 test('schedSwitchRE', function() {
16 var re = tracing.importer.linux_perf._SchedParserTestExports.schedSwitchRE;
17 var x = re.exec('prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ' +
18 '==> next_comm=SurfaceFlinger next_pid=178 next_prio=112');
20 assertEquals('swapper', x[1]);
21 assertEquals('0', x[2]);
22 assertEquals('120', x[3]);
23 assertEquals('R', x[4]);
24 assertEquals('SurfaceFlinger', x[5]);
25 assertEquals('178', x[6]);
26 assertEquals('112', x[7]);
28 var x = re.exec('prev_comm=.android.chrome prev_pid=1562 prev_prio=120 prev_state=R ==> next_comm=Binder Thread # next_pid=195 next_prio=120'); // @suppress longLineCheck
30 assertEquals('.android.chrome', x[1]);
31 assertEquals('Binder Thread #', x[5]);
33 var x = re.exec('prev_comm=Binder Thread # prev_pid=1562 prev_prio=120 prev_state=R ==> next_comm=.android.chrome next_pid=195 next_prio=120'); // @suppress longLineCheck
35 assertEquals('Binder Thread #', x[1]);
36 assertEquals('.android.chrome', x[5]);
38 // explict test for prev_state of D|W
39 var x = re.exec('prev_comm=.android.chrome prev_pid=1562 prev_prio=120 ' +
40 'prev_state=D|W ==> next_comm=Binder Thread # next_pid=195 ' +
43 assertEquals('D|W', x[4]);
46 test('schedWakeupRE', function() {
47 var re = tracing.importer.linux_perf._SchedParserTestExports.schedWakeupRE;
49 'comm=SensorService pid=207 prio=112 success=1 target_cpu=000');
51 assertEquals('SensorService', x[1]);
52 assertEquals('207', x[2]);
53 assertEquals('112', x[3]);
54 assertEquals('1', x[4]);
55 assertEquals('000', x[5]);
58 test('importOneSequenceWithSchedWakeUp', function() {
60 'ndroid.launcher-584 [001] d..3 12622.506890: sched_switch: prev_comm=ndroid.launcher prev_pid=584 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=217 next_prio=120', // @suppress longLineCheck
61 ' Binder_1-217 [001] d..3 12622.506918: sched_switch: prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=D ==> next_comm=ndroid.launcher next_pid=584 next_prio=120', // @suppress longLineCheck
62 'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001', // @suppress longLineCheck
63 'ndroid.launcher-584 [001] d..3 12622.506950: sched_switch: prev_comm=ndroid.launcher prev_pid=584 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=217 next_prio=120', // @suppress longLineCheck
64 ' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: B|128|queueBuffer', // @suppress longLineCheck
65 ' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
66 ' Binder_1-217 [001] d..3 12622.507253: sched_switch: prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=S ==> next_comm=ndroid.launcher next_pid=584 next_prio=120' // @suppress longLineCheck
69 var m = new tracing.TraceModel(lines.join('\n'), false);
70 assertFalse(m.hasImportWarnings);
72 var thread = m.findAllThreadsNamed('Binder_1')[0];
73 var timeSlices = thread.timeSlices;
74 assertEquals(4, timeSlices.length);
76 var runningSlice = timeSlices[0];
77 assertEquals('Running', runningSlice.title);
78 assertAlmostEquals(12622506.890, runningSlice.start);
79 assertAlmostEquals(.918 - .890, runningSlice.duration);
81 var sleepSlice = timeSlices[1];
82 assertEquals('Uninterruptible Sleep', sleepSlice.title);
83 assertAlmostEquals(12622506.918, sleepSlice.start);
84 assertAlmostEquals(.936 - .918, sleepSlice.duration);
86 var wakeupSlice = timeSlices[2];
87 assertEquals('Runnable', wakeupSlice.title);
88 assertAlmostEquals(12622506.936, wakeupSlice.start);
89 assertAlmostEquals(.950 - .936, wakeupSlice.duration);
90 assertEquals(584, wakeupSlice.args['wakeup from tid']);
92 var runningSlice2 = timeSlices[3];
93 assertEquals('Running', runningSlice2.title);
94 assertAlmostEquals(12622506.950, runningSlice2.start);
95 assertAlmostEquals(7.253 - 6.950, runningSlice2.duration);
98 test('importWithUnknownSleepState', function() {
100 'ndroid.launcher-584 [001] d..3 12622.506890: sched_switch: prev_comm=ndroid.launcher prev_pid=584 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=217 next_prio=120', // @suppress longLineCheck
101 ' Binder_1-217 [001] d..3 12622.506918: sched_switch: prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=F|O ==> next_comm=ndroid.launcher next_pid=584 next_prio=120', // @suppress longLineCheck
102 'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001', // @suppress longLineCheck
103 'ndroid.launcher-584 [001] d..3 12622.506950: sched_switch: prev_comm=ndroid.launcher prev_pid=584 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=217 next_prio=120', // @suppress longLineCheck
104 ' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: B|128|queueBuffer', // @suppress longLineCheck
105 ' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
106 ' Binder_1-217 [001] d..3 12622.507253: sched_switch: prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=F|O ==> next_comm=ndroid.launcher next_pid=584 next_prio=120' // @suppress longLineCheck
110 assertDoesNotThrow(function() {
111 m = new tracing.TraceModel(lines.join('\n'), false);
113 assertTrue(m.hasImportWarnings);
114 assertEquals('Unrecognized sleep state: F|O', m.importWarnings[0].message);
116 var thread = m.findAllThreadsNamed('Binder_1')[0];
117 var timeSlices = thread.timeSlices;
119 assertEquals('UNKNOWN', timeSlices[1].title);
122 test('importWithUninterruptibleSleep', function() {
124 'ndroid.launcher-584 [001] d..3 12622.506890: sched_switch: ' +
125 'prev_comm=ndroid.launcher prev_pid=584 ' +
126 'prev_prio=120 prev_state=R+ ' +
127 '==> next_comm=Binder_1 next_pid=217 next_prio=120',
129 ' Binder_1-217 [001] d..3 12622.506918: sched_switch: ' +
130 'prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=D|K ' +
131 '==> next_comm=ndroid.launcher next_pid=584 next_prio=120',
133 'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: ' +
134 'comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001',
136 'ndroid.launcher-584 [001] d..3 12622.506950: sched_switch: ' +
137 'prev_comm=ndroid.launcher prev_pid=584 ' +
138 'prev_prio=120 prev_state=R+ ' +
139 '==> next_comm=Binder_1 next_pid=217 next_prio=120',
141 ' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: ' +
144 ' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
146 ' Binder_1-217 [001] d..3 12622.507253: sched_switch: ' +
147 'prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=S ' +
148 '==> next_comm=ndroid.launcher next_pid=584 next_prio=120'
151 var m = new tracing.TraceModel(lines.join('\n'), false);
152 assertFalse(m.hasImportWarnings);
154 var thread = m.findAllThreadsNamed('Binder_1')[0];
155 var timeSlices = thread.timeSlices;
156 assertEquals(4, timeSlices.length);
158 var wakeKillSlice = timeSlices[1];
159 assertEquals('Uninterruptible Sleep | WakeKill', wakeKillSlice.title);
160 assertAlmostEquals(12622506.918, wakeKillSlice.start);
161 assertAlmostEquals(.936 - .918, wakeKillSlice.duration);