v8_log_importer_test.html revision 46b43bff003ceda46cf9a5d40a47f7674996d2e0
1<!DOCTYPE html> 2<!-- 3Copyright (c) 2013 The Chromium Authors. All rights reserved. 4Use of this source code is governed by a BSD-style license that can be 5found in the LICENSE file. 6--> 7 8<link rel="import" href="/tracing/core/test_utils.html"> 9<link rel="import" href="/tracing/extras/importer/v8/v8_log_importer.html"> 10 11<script> 12 13'use strict'; 14 15tr.b.unittest.testSuite(function() { 16 var V8LogImporter = tr.e.importer.v8.V8LogImporter; 17 18 function newModel(events) { 19 return tr.c.TestUtils.newModelWithEvents([events], { 20 shiftWorldToZero: false 21 }); 22 } 23 24 test('tickEventInSharedLibrary', function() { 25 var lines = [ 26 'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729', 27 'tick,0x99d8aae4,12158,0,0x0,5']; 28 var m = newModel(lines.join('\n')); 29 var p = m.processes[-32]; 30 var t = p.findAllThreadsNamed('V8')[0]; 31 assert.equal(t.samples.length, 1); 32 assert.equal(t.samples[0].title, 'V8 PC'); 33 assert.equal(t.samples[0].start, 12158 / 1000); 34 assert.equal(t.samples[0].leafStackFrame.title, '/usr/lib/libc++.1.dylib'); 35 }); 36 37 test('tickEventInGeneratedCode', function() { 38 var lines = [ 39 'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729', 40 'code-creation,Stub,2,0x5b60ce80,1259,"StringAddStub"', 41 'tick,0x5b60ce84,12158,0,0x0,5']; 42 var m = newModel(lines.join('\n')); 43 var p = m.processes[-32]; 44 var threads = p.findAllThreadsNamed('V8'); 45 var t = threads[0]; 46 assert.equal(t.samples.length, 1); 47 assert.equal(t.samples[0].leafStackFrame.title, 'StringAddStub'); 48 }); 49 50 test('tickEventInUknownCode', function() { 51 var lines = [ 52 'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729', 53 'code-creation,Stub,2,0x5b60ce80,1259,"StringAddStub"', 54 'tick,0x4,0xbff02f08,12158,0,0x0,5']; 55 var m = newModel(lines.join('\n')); 56 var p = m.processes[-32]; 57 var threads = p.findAllThreadsNamed('V8'); 58 var t = threads[0]; 59 assert.equal(t.samples.length, 1); 60 assert.equal(t.samples[0].leafStackFrame.title, 'Unknown'); 61 }); 62 63 test('tickEventWithStack', function() { 64 var lines = [ 65 'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck 66 'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304']; 67 var m = newModel(lines.join('\n')); 68 var p = m.processes[-32]; 69 var t = p.findAllThreadsNamed('V8')[0]; 70 assert.equal(t.samples.length, 1); 71 assert.deepEqual( 72 ['v8: InstantiateFunction native apinatives.js:26:29'], 73 t.samples[0].getUserFriendlyStackTrace()); 74 }); 75 76 test('twoTickEventsWithStack', function() { 77 var lines = [ 78 'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck 79 'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304', 80 'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304']; 81 var m = newModel(lines.join('\n')); 82 var p = m.processes[-32]; 83 var t = p.findAllThreadsNamed('V8')[0]; 84 assert.equal(t.samples.length, 2); 85 assert.equal(t.samples[0].start, 528674 / 1000); 86 assert.equal(t.samples[1].start, 536213 / 1000); 87 assert.deepEqual( 88 ['v8: InstantiateFunction native apinatives.js:26:29'], 89 t.samples[0].getUserFriendlyStackTrace()); 90 assert.deepEqual( 91 ['v8: InstantiateFunction native apinatives.js:26:29'], 92 t.samples[1].getUserFriendlyStackTrace()); 93 assert.equal(t.samples[0].leafStackFrame, 94 t.samples[1].leafStackFrame); 95 }); 96 97 test('twoTickEventsWithTwoStackFrames', function() { 98 var lines = [ 99 'code-creation,LazyCompile,0,0x2904d560,876,"Instantiate native apinatives.js:9:21",0x56b190c8,~', // @suppress longLineCheck 100 'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck 101 'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304,0x2904d6e8', 102 'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304,0x2904d6e8']; 103 var m = newModel(lines.join('\n')); 104 var p = m.processes[-32]; 105 var t = p.findAllThreadsNamed('V8')[0]; 106 assert.equal(t.samples.length, 2); 107 108 assert.equal(t.samples[0].start, 528674 / 1000); 109 assert.equal(t.samples[1].start, 536213 / 1000); 110 assert.deepEqual( 111 ['v8: InstantiateFunction native apinatives.js:26:29', 112 'v8: Instantiate native apinatives.js:9:21'], 113 t.samples[0].getUserFriendlyStackTrace()); 114 assert.deepEqual( 115 ['v8: InstantiateFunction native apinatives.js:26:29', 116 'v8: Instantiate native apinatives.js:9:21'], 117 t.samples[1].getUserFriendlyStackTrace()); 118 119 var childStackFrame = t.samples[0].leafStackFrame; 120 assert.equal(childStackFrame, t.samples[1].leafStackFrame); 121 assert.equal(childStackFrame.children.length, 0); 122 123 var parentStackFrame = childStackFrame.parentFrame; 124 assert.equal(parentStackFrame.children.length, 1); 125 assert.equal(childStackFrame, parentStackFrame.children[0]); 126 127 }); 128 129 test('threeTickEventsWithTwoStackFrames', function() { 130 var lines = [ 131 'code-creation,LazyCompile,0,0x2904d560,876,"Instantiate native apinatives.js:9:21",0x56b190c8,~', // @suppress longLineCheck 132 'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck 133 'tick,0x7fd7f75c,518328,0,0x81d86da8,2,0x2904d6e8', 134 'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304,0x2904d6e8', 135 'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304,0x2904d6e8']; 136 var m = newModel(lines.join('\n')); 137 var p = m.processes[-32]; 138 var threads = p.findAllThreadsNamed('V8'); 139 140 var t = threads[0]; 141 assert.equal(t.samples.length, 3); 142 assert.equal(t.samples[0].start, 518328 / 1000); 143 assert.equal(t.samples[1].start, 528674 / 1000); 144 assert.equal(t.samples[2].start, 536213 / 1000); 145 assert.deepEqual( 146 ['v8: Instantiate native apinatives.js:9:21'], 147 t.samples[0].getUserFriendlyStackTrace()); 148 assert.deepEqual( 149 ['v8: InstantiateFunction native apinatives.js:26:29', 150 'v8: Instantiate native apinatives.js:9:21'], 151 t.samples[1].getUserFriendlyStackTrace()); 152 assert.deepEqual( 153 ['v8: InstantiateFunction native apinatives.js:26:29', 154 'v8: Instantiate native apinatives.js:9:21'], 155 t.samples[2].getUserFriendlyStackTrace()); 156 157 var topLevelStackFrame = t.samples[0].leafStackFrame; 158 var childStackFrame = t.samples[1].leafStackFrame; 159 assert.equal(t.samples[2].leafStackFrame, childStackFrame); 160 assert.equal(topLevelStackFrame, childStackFrame.parentFrame); 161 assert.equal(topLevelStackFrame.children.length, 1); 162 assert.equal(childStackFrame.children.length, 0); 163 assert.equal(childStackFrame, topLevelStackFrame.children[0]); 164 }); 165 166 test('twoSubStacks', function() { 167 var lines = [ 168 'code-creation,LazyCompile,0,0x2904d560,876,"Instantiate native apinatives.js:9:21",0x56b190c8,~', // @suppress longLineCheck 169 'code-creation,LazyCompile,0,0x2905d0c0,1800,"InstantiateFunction native apinatives.js:26:29",0x56b19124,', // @suppress longLineCheck 170 'tick,0x7fd7f75c,518328,0,0x81d86da8,2,0x2904d6e8', 171 'tick,0x7fc6fe34,528674,0,0x3,0,0x2905d304,0x2904d6e8', 172 'tick,0x7fd2a534,536213,0,0x81d8d080,0,0x2905d304,0x2904d6e8', 173 'code-creation,Script,0,0x2906a7c0,792,"http://www.google.com/",0x5b12fe50,~', // @suppress longLineCheck 174 'tick,0xb6f51d30,794049,0,0xb6f7b368,2,0x2906a914', 175 'tick,0xb6f51d30,799146,0,0xb6f7b368,0,0x2906a914' 176 ]; 177 var m = newModel(lines.join('\n')); 178 var p = m.processes[-32]; 179 var threads = p.findAllThreadsNamed('V8'); 180 var t = threads[0]; 181 assert.equal(t.samples.length, 5); 182 183 assert.equal(t.samples[0].start, 518328 / 1000); 184 assert.equal(t.samples[1].start, 528674 / 1000); 185 assert.equal(t.samples[2].start, 536213 / 1000); 186 assert.equal(t.samples[3].start, 794049 / 1000); 187 assert.equal(t.samples[4].start, 799146 / 1000); 188 189 assert.deepEqual( 190 ['v8: Instantiate native apinatives.js:9:21'], 191 t.samples[0].getUserFriendlyStackTrace()); 192 assert.deepEqual( 193 ['v8: InstantiateFunction native apinatives.js:26:29', 194 'v8: Instantiate native apinatives.js:9:21'], 195 t.samples[1].getUserFriendlyStackTrace()); 196 assert.deepEqual( 197 ['v8: InstantiateFunction native apinatives.js:26:29', 198 'v8: Instantiate native apinatives.js:9:21'], 199 t.samples[2].getUserFriendlyStackTrace()); 200 assert.deepEqual(['v8: http://www.google.com/'], 201 t.samples[3].getUserFriendlyStackTrace()); 202 assert.deepEqual(['v8: http://www.google.com/'], 203 t.samples[4].getUserFriendlyStackTrace()); 204 205 var firsStackTopLevelStackFrame = t.samples[0].leafStackFrame; 206 var firsStackChildStackFrame = t.samples[1].leafStackFrame; 207 assert.equal(firsStackChildStackFrame, t.samples[2].leafStackFrame); 208 assert.equal(firsStackTopLevelStackFrame, 209 firsStackChildStackFrame.parentFrame); 210 assert.equal(firsStackTopLevelStackFrame.children.length, 1); 211 assert.equal(firsStackChildStackFrame.children.length, 0); 212 assert.equal(firsStackChildStackFrame, 213 firsStackTopLevelStackFrame.children[0]); 214 215 var secondStackStackFrame = t.samples[3].leafStackFrame; 216 assert.equal(secondStackStackFrame, t.samples[4].leafStackFrame); 217 assert.equal(secondStackStackFrame.children.length, 0); 218 assert.isUndefined(secondStackStackFrame.parentFrame); 219 }); 220 221 test('timerEventSliceCreation', function() { 222 var lines = ['timer-event,"V8.External",38189483,3']; 223 var m = newModel(lines.join('\n')); 224 var p = m.processes[-32]; 225 var threads = p.findAllThreadsNamed('V8 Timers'); 226 assert.isDefined(threads); 227 assert.equal(threads.length, 1); 228 var t = threads[0]; 229 assert.equal(t.sliceGroup.length, 1); 230 }); 231 232 test('processThreadCreation', function() { 233 var lines = ['timer-event,"V8.External",38189483,3']; 234 var m = newModel(lines.join('\n')); 235 assert.isDefined(m); 236 var p = m.processes[-32]; 237 assert.isDefined(p); 238 var threads = p.findAllThreadsNamed('V8 Timers'); 239 assert.isDefined(threads); 240 assert.equal(1, threads.length); 241 var t = threads[0]; 242 assert.equal('V8 Timers', t.name); 243 }); 244 245 test('canImport', function() { 246 assert.isTrue(V8LogImporter.canImport( 247 'timer-event,"V8.External",38189483,3')); 248 assert.isTrue(V8LogImporter.canImport('v8-version,4,3,66,0,0')); 249 assert.isFalse(V8LogImporter.canImport('')); 250 assert.isFalse(V8LogImporter.canImport([])); 251 }); 252}); 253</script> 254 255