Html程序  |  269行  |  10.48 KB

<!DOCTYPE html>
<html>
<!--
Copyright (c) 2012 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.
-->
<head>
<title>LinuxPerfImporter tests</title>
<script src="base.js"></script>
</head>
<body>
<script>
'use strict';

base.require('unittest');
base.require('test_utils');
base.require('linux_perf_importer');

function testLineRE() {
  var re = tracing._LinuxPerfImporterTestExports.lineRE;
  var x = re.exec('   <idle>-0     [001]  4467.843475: sched_switch: ' +
      'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
      'next_comm=SurfaceFlinger next_pid=178 next_prio=112');
  assertNotNull(x);
  assertEquals('<idle>-0', x[1]);
  assertEquals('001', x[2]);
  assertEquals('4467.843475', x[3]);
  assertEquals('sched_switch', x[4]);
  assertEquals('prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
      'next_comm=SurfaceFlinger next_pid=178 next_prio=112', x[5]);

  var x = re.exec('Binder Thread #-647   [001]   260.464294: sched_switch: ' +
      'prev_comm=Binder Thread # prev_pid=647 prev_prio=120 prev_state=D ==> ' +
      'next_comm=.android.chrome next_pid=1562 next_prio=120');
  assertNotNull(x);
}

function testLineREWithIRQInfo() {
  var re = tracing._LinuxPerfImporterTestExports.lineREWithIRQInfo;
  var x = re.exec('     systrace.sh-5441  [001] d...  1031.091570: ' +
        'sched_wakeup: comm=debugd pid=4978 prio=120 success=1 target_cpu=000');
  assertNotNull(x);
  assertEquals('systrace.sh-5441', x[1]);
  assertEquals('001', x[2]);
  assertEquals('1031.091570', x[3]);
  assertEquals('sched_wakeup', x[4]);
  assertEquals('comm=debugd pid=4978 prio=120 success=1 target_cpu=000', x[5]);
}

function testAutodetectLineCornerCases() {
  var line = 'systrace.sh-8170  [001] 15180.978813: sched_switch: ' +
             'prev_comm=systrace.sh prev_pid=8170 prev_prio=120 ' +
             'prev_state=x ==> next_comm=kworker/1:0 next_pid=7873 ' +
             'next_prio=120';
  var autoLineRE = tracing._LinuxPerfImporterTestExports.autoDetectLineRE(line);
  var lineRE = tracing._LinuxPerfImporterTestExports.lineRE;
  assertEquals(autoLineRE, lineRE, 'Mis-detected line format without IRQ info');
}

function testTraceEventClockSyncRE() {
  var re = tracing._LinuxPerfImporterTestExports.traceEventClockSyncRE;
  var x = re.exec('trace_event_clock_sync: parent_ts=19581477508');
  assertNotNull(x);
  assertEquals('19581477508', x[1]);

  var x = re.exec('trace_event_clock_sync: parent_ts=123.456');
  assertNotNull(x);
  assertEquals('123.456', x[1]);
}

function testCanImport() {
  var lines = [
    '# tracer: nop',
    '#',
    '#           TASK-PID    CPU#    TIMESTAMP  FUNCTION',
    '#              | |       |          |         |',
    '          <idle>-0     [001]  4467.843475: sched_switch: ' +
        'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
        'next_comm=SurfaceFlinger next_pid=178 next_prio=112',

    '  SurfaceFlinger-178   [001]  4467.843536: sched_switch: ' +
        'prev_comm=SurfaceFlinger prev_pid=178 prev_prio=112 prev_state=S ' +
        '==> next_comm=kworker/u:2 next_pid=2844 next_prio=120',

    '     kworker/u:2-2844  [001]  4467.843567: sched_switch: ' +
        'prev_comm=kworker/u:2 prev_pid=2844 prev_prio=120 prev_state=S ' +
        '==> next_comm=swapper next_pid=0 next_prio=120',

    '          <idle>-0     [001]  4467.844208: sched_switch: ' +
          'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
          'next_comm=kworker/u:2 next_pid=2844 next_prio=120'
  ];
  assertTrue(tracing.LinuxPerfImporter.canImport(lines.join('\n')));

  var lines = [
    '          <idle>-0     [001]  4467.843475: sched_switch: ' +
            'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
            'next_comm=SurfaceFlinger next_pid=178 next_prio=112'
  ];
  assertTrue(tracing.LinuxPerfImporter.canImport(lines.join('\n')));

  var lines = [
    '          <idle>-0     [001]  4467.843475: sched_switch: ' +
              'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
              'next_comm=SurfaceFlinger next_pid=178 next_prio=112',

    '  SurfaceFlinger-178   [001]  4467.843536: sched_switch: ' +
              'prev_comm=SurfaceFlinger prev_pid=178 prev_prio=112 ' +
              'prev_state=S ==> next_comm=kworker/u:2 next_pid=2844 ' +
              'next_prio=120'
  ];
  assertTrue(tracing.LinuxPerfImporter.canImport(lines.join('\n')));

  var lines = [
    'SomeRandomText',
    'More random text'
  ];
  assertFalse(tracing.LinuxPerfImporter.canImport(lines.join('\n')));
}

function testCanImport34AndLater() {
  var lines = [
    '# tracer: nop',
    '#',
    '# entries-in-buffer/entries-written: 55191/55191   #P:2',
    '#',
    '#                              _-----=> irqs-off',
    '#                             / _----=> need-resched',
    '#                            | / _---=> hardirq/softirq',
    '#                            || / _--=> preempt-depth',
    '#                            ||| /     delay',
    '#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION',
    '#              | |       |   ||||       |         |',
    '     systrace.sh-5441  [001] d...  1031.091570: sched_wakeup: ' +
        'comm=debugd pid=4978 prio=120 success=1 target_cpu=000',
    '     systrace.sh-5441  [001] d...  1031.091584: sched_switch: ' +
        'prev_comm=systrace.sh prev_pid=5441 prev_prio=120 prev_state=x ' +
        '==> next_comm=chrome next_pid=5418 next_prio=120'
  ];
  assertTrue(tracing.LinuxPerfImporter.canImport(lines.join('\n')));

  var lines = [
    '     systrace.sh-5441  [001] d...  1031.091570: sched_wakeup: ' +
        'comm=debugd pid=4978 prio=120 success=1 target_cpu=000',
    '     systrace.sh-5441  [001] d...  1031.091584: sched_switch: ' +
        'prev_comm=systrace.sh prev_pid=5441 prev_prio=120 prev_state=x ' +
        '==> next_comm=chrome next_pid=5418 next_prio=120'
  ];
  assertTrue(tracing.LinuxPerfImporter.canImport(lines.join('\n')));
}

function testImportOneSequence() {
  var lines = [
    '          <idle>-0     [001]  4467.843475: sched_switch: ' +
                'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
                'next_comm=SurfaceFlinger next_pid=178 next_prio=112',

                '  SurfaceFlinger-178   [001]  4467.843536: sched_switch: ' +
                'prev_comm=SurfaceFlinger prev_pid=178 prev_prio=112 ' +
                'prev_state=S ==> next_comm=kworker/u:2 next_pid=2844 ' +
                'next_prio=120',

                '     kworker/u:2-2844  [001]  4467.843567: sched_switch: ' +
                'prev_comm=kworker/u:2 prev_pid=2844 prev_prio=120 ' +
                'prev_state=S ==> next_comm=swapper next_pid=0 next_prio=120'
  ];
  var m = new tracing.TimelineModel(lines.join('\n'), false);
  assertEquals(0, m.importErrors.length);

  var c = m.cpus[1];
  assertEquals(2, c.slices.length);

  assertEquals('SurfaceFlinger', c.slices[0].title);
  assertEquals(4467843.475, c.slices[0].start);
  assertAlmostEquals(.536 - .475, c.slices[0].duration);
}

function testImportOneSequenceWithSpacyThreadName() {
  var lines = [
    '          <idle>-0     [001]  4467.843475: sched_switch: ' +
                'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ==> ' +
                'next_comm=Surface Flinger  next_pid=178 next_prio=112',

                'Surface Flinger -178   [001]  4467.843536: sched_switch: ' +
                'prev_comm=Surface Flinger  prev_pid=178 prev_prio=112 ' +
                'prev_state=S ==> next_comm=kworker/u:2 next_pid=2844 ' +
                'next_prio=120',

                '     kworker/u:2-2844  [001]  4467.843567: sched_switch: ' +
                'prev_comm=kworker/u:2 prev_pid=2844 prev_prio=120 ' +
                'prev_state=S ==> next_comm=swapper next_pid=0 next_prio=120'
  ];
  var m = new tracing.TimelineModel(lines.join('\n'), false);
  assertEquals(0, m.importErrors.length);

  var c = m.cpus[1];
  assertEquals(2, c.slices.length);

  assertEquals('Surface Flinger ', c.slices[0].title);
  assertEquals(4467843.475, c.slices[0].start);
  assertAlmostEquals(.536 - .475, c.slices[0].duration);
}

function testImportWithNewline() {
  var lines = [
    ''
  ];
  var m = new tracing.TimelineModel(lines.join('\n'));
  assertEquals(0, m.importErrors.length);
}

function testClockSync() {
  var lines = [
    '          <idle>-0     [001]  4467.843475: sched_switch: ' +
                  'prev_comm=swapper prev_pid=0 prev_prio=120 prev_state=R ' +
                  '==> next_comm=SurfaceFlinger next_pid=178 next_prio=112',
    '  SurfaceFlinger-178   [001]  4467.843536: sched_switch: ' +
                  'prev_comm=SurfaceFlinger prev_pid=178 prev_prio=112 ' +
                  'prev_state=S ==> next_comm=kworker/u:2 next_pid=2844 ' +
                  'next_prio=120',
    '     kworker/u:2-2844  [001]  4467.843567: sched_switch: ' +
                  'prev_comm=kworker/u:2 prev_pid=2844 prev_prio=120 ' +
                  'prev_state=S ==> next_comm=swapper next_pid=0 ' +
                  'next_prio=120',
    '     kworker/u:2-2844  [001]  4467.843000: 0: ' +
                  'trace_event_clock_sync: parent_ts=0.1'
  ];
  var m = new tracing.TimelineModel(lines.join('\n'), false);
  assertEquals(0, m.importErrors.length);

  var c = m.cpus[1];
  assertEquals(2, c.slices.length);

  assertAlmostEquals((467.843475 - (467.843 - 0.1)) * 1000, c.slices[0].start);
}

function testClockSyncMarkWrite() {
  var lines = [
    'systrace.sh-8170  [001] 15180.978813: sched_switch: ' +
              'prev_comm=systrace.sh prev_pid=8170 prev_prio=120 ' +
              'prev_state=x ==> next_comm=kworker/1:0 next_pid=7873 ' +
              'next_prio=120',
    ' kworker/1:0-7873  [001] 15180.978836: sched_switch: ' +
              'prev_comm=kworker/1:0 prev_pid=7873 prev_prio=120 ' +
              'prev_state=S ==> next_comm=debugd next_pid=4404 next_prio=120',
    '     debugd-4404  [001] 15180.979010: sched_switch: prev_comm=debugd ' +
              'prev_pid=4404 prev_prio=120 prev_state=S ==> ' +
              'next_comm=dbus-daemon next_pid=510 next_prio=120',
    'systrace.sh-8182  [000] 15186.203900: tracing_mark_write: ' +
              'trace_event_clock_sync: parent_ts=0'
  ];
  var m = new tracing.TimelineModel(lines.join('\n'), false);
  assertEquals(0, m.importErrors.length);

  var c = m.cpus[1];
  assertEquals(2, c.slices.length);

  assertAlmostEquals((15180.978813 - 0) * 1000, c.slices[0].start);
}


function testImportWithoutClockSyncDeletesEverything() {
}

</script>
</body>
</html>