166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Copyright (c) 2013 The Chromium Authors. All rights reserved.
266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// Use of this source code is governed by a BSD-style license that can be
366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis// found in the LICENSE file.
466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis'use strict';
666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.test_utils');
866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.require('tracing.importer.v8_log_importer');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.importer.v8_log_importer', function() {
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  var V8LogImporter = tracing.importer.V8LogImporter;
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('tickEventInSharedLibrary', function() {
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var lines = [
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729',
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'tick,0x99d8aae4,0xbff02f08,12158,0,0x0,5'];
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var m = new tracing.TraceModel(lines.join('\n'));
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var p = m.processes[-32];
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var threads = p.findAllThreadsNamed('V8 PC');
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var t = threads[0];
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(1, t.samples.length);
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('/usr/lib/libc++.1.dylib', t.samples[0].title);
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('tickEventInGeneratedCode', function() {
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var lines = [
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729',
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'code-creation,Stub,2,0x5b60ce80,1259,"StringAddStub"',
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'tick,0x5b60ce84,0xbff02f08,12158,0,0x0,5'];
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var m = new tracing.TraceModel(lines.join('\n'));
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var p = m.processes[-32];
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var threads = p.findAllThreadsNamed('V8 PC');
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var t = threads[0];
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(1, t.samples.length);
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('StringAddStub', t.samples[0].title);
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('tickEventInUknownCode', function() {
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var lines = [
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'shared-library,"/usr/lib/libc++.1.dylib",0x99d8aae0,0x99dce729',
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'code-creation,Stub,2,0x5b60ce80,1259,"StringAddStub"',
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'tick,0x4,0xbff02f08,12158,0,0x0,5'];
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var m = new tracing.TraceModel(lines.join('\n'));
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var p = m.processes[-32];
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var threads = p.findAllThreadsNamed('V8 PC');
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var t = threads[0];
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(1, t.samples.length);
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('UnknownCode', t.samples[0].title);
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('timerEventSliceCreation', function() {
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var lines = ['timer-event,"V8.External",38189483,3'];
5366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var m = new tracing.TraceModel(lines.join('\n'));
5466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var p = m.processes[-32];
5566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var threads = p.findAllThreadsNamed('V8 Timers');
5666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertNotUndefined(threads);
5766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(threads.length, 1);
5866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var t = threads[0];
5966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(t.sliceGroup.length, 1);
6066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
6166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
6266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('processThreadCreation', function() {
6366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var lines = ['timer-event,"V8.External",38189483,3'];
6466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var m = new tracing.TraceModel(lines.join('\n'));
6566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertNotUndefined(m);
6666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var p = m.processes[-32];
6766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertNotUndefined(p);
6866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var threads = p.findAllThreadsNamed('V8 Timers');
6966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertNotUndefined(threads);
7066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(threads.length, 1);
7166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var t = threads[0];
7266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(t.name, 'V8 Timers');
7366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
7466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
7566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('canImport', function() {
7666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertTrue(V8LogImporter.canImport(
7766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis        'timer-event,"V8.External",38189483,3'));
7866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertFalse(V8LogImporter.canImport(''));
7966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertFalse(V8LogImporter.canImport([]));
8066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
8166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
82