blob: e6c3f4f6c2cfba3f492a91faf698827a8f1a0256 [file] [log] [blame]
Chris Craikb122baf2015-03-05 13:58:42 -08001<!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="/core/trace_model/trace_model.html">
9<link rel="import" href="/core/analysis/single_thread_time_slice_sub_view.html">
10<link rel="import" href="/extras/importer/linux_perf/linux_perf_importer.html">
11
12<script>
13'use strict';
14
15tv.b.unittest.testSuite(function() { // @suppress longLineCheck
16 function createBasicModel() {
17 var lines = [
18 'Android.launcher-584 [001] d..3 12622.506890: sched_switch: prev_comm=Android.launcher prev_pid=584 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=217 next_prio=120', // @suppress longLineCheck
19 ' Binder_1-217 [001] d..3 12622.506918: sched_switch: prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=D ==> next_comm=Android.launcher next_pid=584 next_prio=120', // @suppress longLineCheck
20 'Android.launcher-584 [001] d..4 12622.506936: sched_wakeup: comm=Binder_1 pid=217 prio=120 success=1 target_cpu=001', // @suppress longLineCheck
21 'Android.launcher-584 [001] d..3 12622.506950: sched_switch: prev_comm=Android.launcher prev_pid=584 prev_prio=120 prev_state=R+ ==> next_comm=Binder_1 next_pid=217 next_prio=120', // @suppress longLineCheck
22 ' Binder_1-217 [001] ...1 12622.507057: tracing_mark_write: B|128|queueBuffer', // @suppress longLineCheck
23 ' Binder_1-217 [001] ...1 12622.507175: tracing_mark_write: E',
24 ' Binder_1-217 [001] d..3 12622.507253: sched_switch: prev_comm=Binder_1 prev_pid=217 prev_prio=120 prev_state=S ==> next_comm=Android.launcher next_pid=584 next_prio=120' // @suppress longLineCheck
25 ];
26
27 return new tv.c.TraceModel(lines.join('\n'), false);
28 }
29
30 test('runningSlice', function() {
31 var m = createBasicModel();
32
33 var cpu = m.kernel.cpus[1];
34 var binderSlice = cpu.slices[0];
35 assert.equal(binderSlice.title, 'Binder_1');
36 var launcherSlice = cpu.slices[1];
37 assert.equal(launcherSlice.title, 'Android.launcher');
38
39
40 var thread = m.findAllThreadsNamed('Binder_1')[0];
41
42 var view = document.createElement('tv-c-single-thread-time-slice-sub-view');
43 var selection = new tv.c.Selection();
44 selection.push(thread.timeSlices[0]);
45 view.selection = selection;
46 this.addHTMLOutput(view);
47
48 // Clicking the analysis link should focus the Binder1's timeslice.
49 var didSelectionChangeHappen = false;
50 view.addEventListener('requestSelectionChange', function(e) {
51 assert.equal(e.selection.length, 1);
52 assert.equal(e.selection[0], binderSlice);
53 didSelectionChangeHappen = true;
54 });
55 view.shadowRoot.querySelector('tv-c-analysis-link').click();
56 assert.isTrue(didSelectionChangeHappen);
57 });
58
59 test('sleepingSlice', function() {
60 var m = createBasicModel();
61
62 var cpu = m.kernel.cpus[1];
63 var binderSlice = cpu.slices[0];
64 assert.equal(binderSlice.title, 'Binder_1');
65 var launcherSlice = cpu.slices[1];
66 assert.equal(launcherSlice.title, 'Android.launcher');
67
68
69 var thread = m.findAllThreadsNamed('Binder_1')[0];
70
71 var view = document.createElement('tv-c-single-thread-time-slice-sub-view');
72 var selection = new tv.c.Selection();
73 selection.push(thread.timeSlices[1]);
74 view.selection = selection;
75 this.addHTMLOutput(view);
76
77 // Clicking the analysis link should focus the Android.launcher slice
78 var didSelectionChangeHappen = false;
79 view.addEventListener('requestSelectionChange', function(e) {
80 assert.equal(e.selection.length, 1);
81 assert.equal(e.selection[0], launcherSlice);
82 didSelectionChangeHappen = true;
83 });
84 view.shadowRoot.querySelector('tv-c-analysis-link').click();
85 assert.isTrue(didSelectionChangeHappen);
86 });
87});
88</script>