blob: 5761f98e94c7ae2fb1a71477f807a624bcab19a0 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright (c) 2013 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.
-->
<link rel="import" href="/tracing/core/test_utils.html">
<link rel="import" href="/tracing/extras/importer/linux_perf/ftrace_importer.html">
<script>
'use strict';
tr.b.unittest.testSuite(function() { // @suppress longLineCheck
test('schedSwitchRE', function() {
var re = tr.e.importer.linux_perf._SchedParserTestExports.schedSwitchRE;
var x = re.exec('prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ' +
'==> next_comm=SurfaceFlinger next_pid=178 next_prio=112');
assert.isNotNull(x);
assert.equal(x[1], 'swapper');
assert.equal(x[2], '0');
assert.equal(x[3], '120');
assert.equal(x[4], 'R');
assert.equal(x[5], 'SurfaceFlinger');
assert.equal(x[6], '178');
assert.equal(x[7], '112');
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
assert.isNotNull(x);
assert.equal(x[1], '.android.chrome');
assert.equal(x[5], 'Binder Thread #');
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
assert.isNotNull(x);
assert.equal(x[1], 'Binder Thread #');
assert.equal(x[5], '.android.chrome');
// explicit test for prev_state of D|W
var x = re.exec('prev_comm=.android.chrome prev_pid=1562 prev_prio=120 ' +
'prev_state=D|W ==> next_comm=Binder Thread # next_pid=195 ' +
'next_prio=120');
assert.isNotNull(x);
assert.equal(x[4], 'D|W');
});
test('schedWakeupRE', function() {
var re = tr.e.importer.linux_perf._SchedParserTestExports.schedWakeupRE;
var x = re.exec(
'comm=SensorService pid=207 prio=112 success=1 target_cpu=000');
assert.isNotNull(x);
assert.equal(x[1], 'SensorService');
assert.equal(x[2], '207');
assert.equal(x[3], '112');
assert.equal(x[4], '1');
assert.equal(x[5], '000');
});
test('importOneSequenceWithSchedWakeUp', function() {
var lines = [
'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
' 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
'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001', // @suppress longLineCheck
'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
' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: B|128|queueBuffer', // @suppress longLineCheck
' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
' 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
];
var m = new tr.Model(lines.join('\n'), false);
assert.isFalse(m.hasImportWarnings);
var thread = m.findAllThreadsNamed('Binder_1')[0];
var timeSlices = thread.timeSlices;
assert.equal(timeSlices.length, 4);
var runningSlice = timeSlices[0];
assert.equal(runningSlice.title, 'Running');
assert.closeTo(12622506.890, runningSlice.start, 1e-5);
assert.closeTo(.918 - .890, runningSlice.duration, 1e-5);
var sleepSlice = timeSlices[1];
assert.equal(sleepSlice.title, 'Uninterruptible Sleep');
assert.closeTo(12622506.918, sleepSlice.start, 1e-5);
assert.closeTo(.936 - .918, sleepSlice.duration, 1e-5);
var wakeupSlice = timeSlices[2];
assert.equal(wakeupSlice.title, 'Runnable');
assert.closeTo(12622506.936, wakeupSlice.start, 1e-5);
assert.closeTo(.950 - .936, wakeupSlice.duration, 1e-5);
assert.equal(wakeupSlice.args['wakeup from tid'], 584);
var runningSlice2 = timeSlices[3];
assert.equal(runningSlice2.title, 'Running');
assert.closeTo(12622506.950, runningSlice2.start, 1e-5);
assert.closeTo(7.253 - 6.950, runningSlice2.duration, 1e-5);
});
test('importWithUnknownSleepState', function() {
var lines = [
'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
' 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
'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001', // @suppress longLineCheck
'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
' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: B|128|queueBuffer', // @suppress longLineCheck
' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
' 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
];
var m;
assert.doesNotThrow(function() {
var io = new tr.ImportOptions();
io.showImportWarnings = false;
m = new tr.Model(lines.join('\n'), io);
});
assert.isTrue(m.hasImportWarnings);
assert.equal(m.importWarnings[0].message, 'Unrecognized sleep state: F|O');
var thread = m.findAllThreadsNamed('Binder_1')[0];
var timeSlices = thread.timeSlices;
assert.equal(timeSlices[1].title, 'UNKNOWN');
});
test('importWithUninterruptibleSleep', function() {
var lines = [
'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',
' Binder_1-217 [001] d..3 12622.506918: sched_switch: ' +
'prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=D|K ' +
'==> next_comm=ndroid.launcher next_pid=584 next_prio=120',
'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: ' +
'comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001',
'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',
' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: ' +
'B|128|queueBuffer',
' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
' 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'
];
var m = new tr.Model(lines.join('\n'), false);
assert.isFalse(m.hasImportWarnings);
var thread = m.findAllThreadsNamed('Binder_1')[0];
var timeSlices = thread.timeSlices;
assert.equal(timeSlices.length, 4);
var wakeKillSlice = timeSlices[1];
assert.equal(wakeKillSlice.title, 'Uninterruptible Sleep | WakeKill');
assert.closeTo(12622506.918, wakeKillSlice.start, 1e-5);
assert.closeTo(.936 - .918, wakeKillSlice.duration, 1e-5);
});
});
</script>