1 <!DOCTYPE html> 2 <html> 3 <!-- 4 Copyright (c) 2012 The Chromium Authors. All rights reserved. 5 Use of this source code is governed by a BSD-style license that can be 6 found in the LICENSE file. 7 --> 8 <head> 9 <title>importer.linux_perf.SchedParser tests</title> 10 <script src="../../base.js"></script> 11 </head> 12 <body> 13 <script> 14 'use strict'; 15 16 base.require('unittest'); 17 base.require('test_utils'); 18 base.require('importer.linux_perf_importer'); 19 20 function testSchedSwitchRE() { 21 var re = tracing.importer.linux_perf._SchedParserTestExports.schedSwitchRE; 22 var x = re.exec('prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ' + 23 '==> next_comm=SurfaceFlinger next_pid=178 next_prio=112'); 24 assertNotNull(x); 25 assertEquals('swapper', x[1]); 26 assertEquals('0', x[2]); 27 assertEquals('120', x[3]); 28 assertEquals('R', x[4]); 29 assertEquals('SurfaceFlinger', x[5]); 30 assertEquals('178', x[6]); 31 assertEquals('112', x[7]); 32 33 var x = re.exec('prev_comm=.android.chrome prev_pid=1562 prev_prio=120 ' + 34 'prev_state=R ==> next_comm=Binder Thread # next_pid=195 next_prio=120'); 35 assertNotNull(x); 36 assertEquals('.android.chrome', x[1]); 37 assertEquals('Binder Thread #', x[5]); 38 39 var x = re.exec('prev_comm=Binder Thread # prev_pid=1562 prev_prio=120 ' + 40 'prev_state=R ==> next_comm=.android.chrome next_pid=195 next_prio=120'); 41 assertNotNull(x); 42 assertEquals('Binder Thread #', x[1]); 43 assertEquals('.android.chrome', x[5]); 44 45 // explict test for prev_state of D|W 46 var x = re.exec('prev_comm=.android.chrome prev_pid=1562 prev_prio=120 ' + 47 'prev_state=D|W ==> next_comm=Binder Thread # next_pid=195 ' + 48 'next_prio=120'); 49 assertNotNull(x); 50 assertEquals('D|W', x[4]); 51 } 52 53 function testSchedWakeupRE() { 54 var re = tracing.importer.linux_perf._SchedParserTestExports.schedWakeupRE; 55 var x = re.exec( 56 'comm=SensorService pid=207 prio=112 success=1 target_cpu=000'); 57 assertNotNull(x); 58 assertEquals('SensorService', x[1]); 59 assertEquals('207', x[2]); 60 assertEquals('112', x[3]); 61 assertEquals('1', x[4]); 62 assertEquals('000', x[5]); 63 } 64 65 function testImportOneSequenceWithSchedWakeUp() { 66 67 var lines = [ 68 'ndroid.launcher-584 [001] d..3 12622.506890: sched_switch: ' + 69 'prev_comm=ndroid.launcher prev_pid=584 prev_prio=120 prev_state=R+ ' + 70 '==> next_comm=Binder_1 next_pid=217 next_prio=120', 71 72 ' Binder_1-217 [001] d..3 12622.506918: sched_switch: ' + 73 'prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=D ' + 74 '==> next_comm=ndroid.launcher next_pid=584 next_prio=120', 75 76 'ndroid.launcher-584 [001] d..4 12622.506936: sched_wakeup: ' + 77 'comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001', 78 79 'ndroid.launcher-584 [001] d..3 12622.506950: sched_switch: ' + 80 'prev_comm=ndroid.launcher prev_pid=584 prev_prio=120 prev_state=R+ ' + 81 '==> next_comm=Binder_1 next_pid=217 next_prio=120', 82 83 ' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: ' + 84 'B|128|queueBuffer', 85 86 ' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E', 87 88 ' Binder_1-217 [001] d..3 12622.507253: sched_switch: ' + 89 'prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=S ' + 90 '==> next_comm=ndroid.launcher next_pid=584 next_prio=120' 91 ]; 92 93 var m = new tracing.Model(lines.join('\n'), false); 94 assertEquals(0, m.importErrors.length); 95 96 var thread = m.findAllThreadsNamed('Binder_1')[0]; 97 var cpuSlices = thread.cpuSlices; 98 assertEquals(4, cpuSlices.length); 99 100 var runningSlice = cpuSlices[0]; 101 assertEquals('Running', runningSlice.title); 102 assertAlmostEquals(12622506.890, runningSlice.start); 103 assertAlmostEquals(.918 - .890, runningSlice.duration); 104 105 var sleepSlice = cpuSlices[1]; 106 assertEquals('Uninterruptible Sleep', sleepSlice.title); 107 assertAlmostEquals(12622506.918, sleepSlice.start); 108 assertAlmostEquals(.936 - .918, sleepSlice.duration); 109 110 var wakeupSlice = cpuSlices[2]; 111 assertEquals('Runnable', wakeupSlice.title); 112 assertAlmostEquals(12622506.936, wakeupSlice.start); 113 assertAlmostEquals(.950 - .936, wakeupSlice.duration); 114 assertEquals(584, wakeupSlice.args['wakeup from tid']); 115 116 var runningSlice2 = cpuSlices[3]; 117 assertEquals('Running', runningSlice2.title); 118 assertAlmostEquals(12622506.950, runningSlice2.start); 119 assertAlmostEquals(7.253 - 6.950, runningSlice2.duration); 120 } 121 122 </script> 123 </body> 124 </html> 125