| <!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 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> |