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.linux_perf_importer');
966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
1066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennisbase.unittest.testSuite('tracing.importer.linux_perf.kfunc_parser', function() {
1166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  test('kernelFunctionParser', function() {
1266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var lines = [
1366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906759: graph_ent: func=sys_write',
1466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906769: graph_ret: func=sys_write',
1566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906785: graph_ent: func=sys_write',
1666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ...1  3431.906798: tracing_mark_write: B|' +
1766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis          '127|dequeueBuffer',
1866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906802: graph_ret: func=sys_write',
1966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906842: graph_ent: func=sys_write',
2066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ...1  3431.906849: tracing_mark_write: E',
2166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906853: graph_ret: func=sys_write',
2266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906896: graph_ent: func=sys_write',
2366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis      'Binder_2-127  ( 127) [001] ....  3431.906906: graph_ret: func=sys_write'
2466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    ];
2566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var m = new tracing.TraceModel(lines.join('\n'), false);
2666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(0, m.importErrors.length);
2766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
2866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var process = m.processes[127];
2966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertNotNull(process);
3066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var thread = process.threads[127];
3266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertNotNull(thread);
3366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    var slices = thread.sliceGroup.slices;
3566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals(7, thread.sliceGroup.length);
3666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
3766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    // Slice 0 is an un-split sys_write
3866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('sys_write', slices[0].title);
3966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    // Slices 1 & 2 are a split sys_write
4166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('sys_write', slices[1].title);
4266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('sys_write (cont.)', slices[2].title);
4366a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4466a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    // Slices 3 & 5 are a split sys_write with the dequeueBuffer in between
4566a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('sys_write', slices[3].title);
4666a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('dequeueBuffer', slices[4].title);
4766a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('sys_write (cont.)', slices[5].title);
4866a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis
4966a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    // Slice 6 is another un-split sys_write
5066a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis    assertEquals('sys_write', slices[6].title);
5166a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis  });
5266a37686207944273ced825e0e8b6b6375f8c3deJamie Gennis});
53