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.AndroidParser 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 testAndroidUserlandImport() { 21 var lines = [ 22 'SurfaceFlinger-4831 [001] ...1 80909.598554: tracing_mark_write: B|4829|onMessageReceived', 23 'SurfaceFlinger-4831 [001] ...1 80909.598572: tracing_mark_write: B|4829|handleMessageInvalidate', 24 'SurfaceFlinger-4831 [001] ...1 80909.598590: tracing_mark_write: B|4829|latchBuffer', 25 'SurfaceFlinger-4831 [001] ...1 80909.598604: tracing_mark_write: E', 26 'SurfaceFlinger-4831 [001] ...1 80909.598627: tracing_mark_write: B|4829|latchBuffer', 27 'SurfaceFlinger-4831 [001] ...1 80909.598651: tracing_mark_write: B|4829|updateTexImage', 28 'SurfaceFlinger-4831 [001] ...1 80909.598675: tracing_mark_write: B|4829|acquireBuffer', 29 'SurfaceFlinger-4831 [001] ...1 80909.598695: tracing_mark_write: B|4829|' + 30 'com.android.launcher/com.android.launcher2.Launcher: 0', 31 'SurfaceFlinger-4831 [001] ...1 80909.598709: tracing_mark_write: E', 32 'SurfaceFlinger-4831 [001] ...1 80909.598733: tracing_mark_write: C|4829|' + 33 'com.android.launcher/com.android.launcher2.Launcher|0', 34 'SurfaceFlinger-4831 [001] ...1 80909.598746: tracing_mark_write: E', 35 'SurfaceFlinger-4831 [001] ...1 80909.598844: tracing_mark_write: B|4829|releaseBuffer', 36 'SurfaceFlinger-4831 [001] ...1 80909.598862: tracing_mark_write: B|4829|' + 37 'com.android.launcher/com.android.launcher2.Launcher: 2', 38 'SurfaceFlinger-4831 [001] ...1 80909.598876: tracing_mark_write: E', 39 'SurfaceFlinger-4831 [001] ...1 80909.598892: tracing_mark_write: E', 40 'SurfaceFlinger-4831 [001] ...1 80909.598925: tracing_mark_write: E', 41 'SurfaceFlinger-4831 [001] ...1 80909.598955: tracing_mark_write: E', 42 'SurfaceFlinger-4831 [001] ...1 80909.598988: tracing_mark_write: B|4829|latchBuffer', 43 'SurfaceFlinger-4831 [001] ...1 80909.599001: tracing_mark_write: E', 44 'SurfaceFlinger-4831 [001] ...1 80909.599021: tracing_mark_write: B|4829|latchBuffer', 45 'SurfaceFlinger-4831 [001] ...1 80909.599036: tracing_mark_write: E', 46 'SurfaceFlinger-4831 [001] ...1 80909.599068: tracing_mark_write: E', 47 'SurfaceFlinger-4831 [001] ...1 80909.599087: tracing_mark_write: E', 48 'SurfaceFlinger-4831 [001] ...1 80909.599104: tracing_mark_write: E' 49 ]; 50 var m = new tracing.Model(lines.join('\n'), false); 51 assertEquals(0, m.importErrors.length); 52 53 var threads = m.getAllThreads(); 54 assertEquals(1, threads.length); 55 56 var thread = threads[0]; 57 assertEquals(4829, thread.parent.pid); 58 assertEquals(4831, thread.tid); 59 assertEquals('SurfaceFlinger', thread.name); 60 assertEquals(11, thread.slices.length); 61 } 62 63 function testAndroidUserlandImportWithSpacesInThreadName() { 64 var lines = [ 65 'Surface Flinger -4831 [001] ...1 80909.598590: tracing_mark_write: B|4829|latchBuffer', 66 'Surface Flinger -4831 [001] ...1 80909.598604: tracing_mark_write: E', 67 ]; 68 var m = new tracing.Model(lines.join('\n'), false); 69 assertEquals(0, m.importErrors.length); 70 71 var threads = m.getAllThreads(); 72 assertEquals(1, threads.length); 73 74 var thread = threads[0]; 75 assertEquals(4829, thread.parent.pid); 76 assertEquals(4831, thread.tid); 77 assertEquals('Surface Flinger ', thread.name); 78 assertEquals(1, thread.slices.length); 79 } 80 81 function testAndroidUserlandLegacyKernelImport() { 82 var lines = [ 83 'SurfaceFlinger-4831 [001] ...1 80909.598554: 0: B|4829|onMessageReceived', 84 'SurfaceFlinger-4831 [001] ...1 80909.598572: 0: B|4829|handleMessageInvalidate', 85 'SurfaceFlinger-4831 [001] ...1 80909.598590: 0: B|4829|latchBuffer', 86 'SurfaceFlinger-4831 [001] ...1 80909.598604: 0: E', 87 'SurfaceFlinger-4831 [001] ...1 80909.598627: 0: B|4829|latchBuffer', 88 'SurfaceFlinger-4831 [001] ...1 80909.598651: 0: B|4829|updateTexImage', 89 'SurfaceFlinger-4831 [001] ...1 80909.598675: 0: B|4829|acquireBuffer', 90 'SurfaceFlinger-4831 [001] ...1 80909.598695: 0: B|4829|' + 91 'com.android.launcher/com.android.launcher2.Launcher: 0', 92 'SurfaceFlinger-4831 [001] ...1 80909.598709: 0: E', 93 'SurfaceFlinger-4831 [001] ...1 80909.598733: 0: C|4829|' + 94 'com.android.launcher/com.android.launcher2.Launcher|0', 95 'SurfaceFlinger-4831 [001] ...1 80909.598746: 0: E', 96 'SurfaceFlinger-4831 [001] ...1 80909.598844: 0: B|4829|releaseBuffer', 97 'SurfaceFlinger-4831 [001] ...1 80909.598862: 0: B|4829|' + 98 'com.android.launcher/com.android.launcher2.Launcher: 2', 99 'SurfaceFlinger-4831 [001] ...1 80909.598876: 0: E', 100 'SurfaceFlinger-4831 [001] ...1 80909.598892: 0: E', 101 'SurfaceFlinger-4831 [001] ...1 80909.598925: 0: E', 102 'SurfaceFlinger-4831 [001] ...1 80909.598955: 0: E', 103 'SurfaceFlinger-4831 [001] ...1 80909.598988: 0: B|4829|latchBuffer', 104 'SurfaceFlinger-4831 [001] ...1 80909.599001: 0: E', 105 'SurfaceFlinger-4831 [001] ...1 80909.599021: 0: B|4829|latchBuffer', 106 'SurfaceFlinger-4831 [001] ...1 80909.599036: 0: E', 107 'SurfaceFlinger-4831 [001] ...1 80909.599068: 0: E', 108 'SurfaceFlinger-4831 [001] ...1 80909.599087: 0: E', 109 'SurfaceFlinger-4831 [001] ...1 80909.599104: 0: E' 110 ]; 111 var m = new tracing.Model(lines.join('\n'), false); 112 assertEquals(0, m.importErrors.length); 113 114 var threads = m.getAllThreads(); 115 assertEquals(1, threads.length); 116 117 var thread = threads[0]; 118 assertEquals(4829, thread.parent.pid); 119 assertEquals(4831, thread.tid); 120 assertEquals('SurfaceFlinger', thread.name); 121 assertEquals(11, thread.slices.length); 122 } 123 124 function testAndroidUserlandChromiumImport() { 125 var lines = [ 126 'SandboxedProces-2894 [001] ...1 253.780659: tracing_mark_write: B|2867|' + 127 'DoWorkLoop|arg1=1|cat1', 128 'SandboxedProces-2894 [001] ...1 253.780671: tracing_mark_write: B|2867|' + 129 'DeferOrRunPendingTask|source=test=test;task=xyz|cat2', 130 'SandboxedProces-2894 [001] ...1 253.780671: tracing_mark_write: E|2867|' + 131 'DeferOrRunPendingTask||cat1', 132 'SandboxedProces-2894 [001] ...1 253.780686: tracing_mark_write: B|2867|' + 133 'MessageLoop::RunTask|source=ipc/ipc_sync_message_filter.cc:Send|cat2', 134 'SandboxedProces-2894 [001] ...1 253.780700: tracing_mark_write: E|2867|' + 135 'MessageLoop::RunTask||cat1', 136 'SandboxedProces-2894 [001] ...1 253.780750: tracing_mark_write: C|2867|' + 137 'counter1|10|cat1', 138 'SandboxedProces-2894 [001] ...1 253.780859: tracing_mark_write: E|2867|' + 139 'DoWorkLoop|arg2=2|cat2' 140 ]; 141 var m = new tracing.Model(lines.join('\n'), false); 142 assertEquals(0, m.importErrors.length); 143 144 var threads = m.getAllThreads(); 145 assertEquals(1, threads.length); 146 147 var thread = threads[0]; 148 assertEquals(2867, thread.parent.pid); 149 assertEquals(2894, thread.tid); 150 assertEquals('SandboxedProces', thread.name); 151 assertEquals(3, thread.slices.length); 152 153 assertEquals('test=test', thread.slices[0].args['source']); 154 assertEquals('cat2', thread.slices[0].category); 155 assertEquals('DeferOrRunPendingTask', thread.slices[0].title); 156 assertEquals('xyz', thread.slices[0].args['task']); 157 assertEquals('ipc/ipc_sync_message_filter.cc:Send', thread.slices[1].args['source']); 158 assertEquals('1', thread.slices[2].args['arg1']); 159 assertEquals('2', thread.slices[2].args['arg2']); 160 161 var counters = m.getAllCounters(); 162 assertEquals(1, counters.length); 163 assertEquals('cat1', counters[0].category); 164 assertEquals('counter1', counters[0].name); 165 assertEquals(1, counters[0].numSamples); 166 assertEquals(10, counters[0].getSampleValue(0, 0)); 167 } 168 169 </script> 170 </body> 171 </html> 172