Home | History | Annotate | Download | only in linux_perf
      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