| <!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="/core/test_utils.html"> |
| <link rel="import" href="/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() { |
| m = new tr.Model(lines.join('\n'), false); |
| }); |
| 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> |
| |