Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / tracing / tracks / thread_track_test.html
1 <!DOCTYPE html>
2 <!--
3 Copyright (c) 2013 The Chromium Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style license that can be
5 found in the LICENSE file.
6 -->
7
8 <link rel="import" href="/tracing/test_utils.html">
9 <link rel="import" href="/tracing/timeline_track_view.html">
10 <link rel="import" href="/tracing/trace_model/instant_event.html">
11 <link rel="import" href="/tracing/tracks/thread_track.html">
12 <link rel="import" href="/base/ui/dom_helpers.html">
13
14 <script>
15 'use strict';
16
17 tv.unittest.testSuite(function() {
18   var HighlightInstantEvent = tracing.trace_model.ThreadHighlightInstantEvent;
19   var Process = tracing.trace_model.Process;
20   var Selection = tracing.Selection;
21   var StackFrame = tracing.trace_model.StackFrame;
22   var Sample = tracing.trace_model.Sample;
23   var Thread = tracing.trace_model.Thread;
24   var ThreadSlice = tracing.trace_model.ThreadSlice;
25   var ThreadTrack = tracing.tracks.ThreadTrack;
26   var Viewport = tracing.TimelineViewport;
27   var newAsyncSlice = tracing.test_utils.newAsyncSlice;
28   var newAsyncSliceNamed = tracing.test_utils.newAsyncSliceNamed;
29   var newSliceNamed = tracing.test_utils.newSliceNamed;
30
31   test('selectionHitTestingWithThreadTrack', function() {
32     var model = new tracing.TraceModel();
33     var p1 = model.getOrCreateProcess(1);
34     var t1 = p1.getOrCreateThread(1);
35     t1.sliceGroup.pushSlice(new ThreadSlice('', 'a', 0, 1, {}, 4));
36     t1.sliceGroup.pushSlice(new ThreadSlice('', 'b', 0, 5.1, {}, 4));
37
38     var testEl = document.createElement('div');
39     testEl.appendChild(tv.ui.createScopedStyle('heading { width: 100px; }'));
40     testEl.style.width = '600px';
41
42     var viewport = new Viewport(testEl);
43     var drawingContainer = new tracing.tracks.DrawingContainer(viewport);
44     testEl.appendChild(drawingContainer);
45
46     var track = new ThreadTrack(viewport);
47     drawingContainer.appendChild(track);
48     drawingContainer.updateCanvasSizeIfNeeded_();
49     track.thread = t1;
50
51     var y = track.getBoundingClientRect().top;
52     var h = track.getBoundingClientRect().height;
53     var wW = 10;
54     var vW = drawingContainer.canvas.getBoundingClientRect().width;
55     var dt = new tracing.TimelineDisplayTransform();
56     dt.xSetWorldBounds(0, wW, vW);
57     track.viewport.setDisplayTransformImmediately(dt);
58
59     var selection = new Selection();
60     var x = (1.5 / wW) * vW;
61     track.addIntersectingItemsInRangeToSelection(x, x + 1, y, y + 1, selection);
62     assertEquals(t1.sliceGroup.slices[0], selection[0]);
63
64     var selection = new Selection();
65     track.addIntersectingItemsInRangeToSelection(
66         (1.5 / wW) * vW, (1.8 / wW) * vW,
67         y, y + h, selection);
68     assertEquals(t1.sliceGroup.slices[0], selection[0]);
69   });
70
71   test('filterThreadSlices', function() {
72     var model = new tracing.TraceModel();
73     var thread = new Thread(new Process(model, 7), 1);
74     thread.sliceGroup.pushSlice(newSliceNamed('a', 0, 0));
75     thread.asyncSliceGroup.push(newAsyncSliceNamed('a', 0, 5, t, t));
76
77     var t = new ThreadTrack(new tracing.TimelineViewport());
78     t.thread = thread;
79
80     assertEquals(t.tracks_.length, 2);
81     assertTrue(t.tracks_[0] instanceof tracing.tracks.AsyncSliceGroupTrack);
82     assertTrue(t.tracks_[1] instanceof tracing.tracks.SliceGroupTrack);
83   });
84
85   test('sampleThreadSlices', function() {
86     var model = new tracing.TraceModel();
87     var thread;
88     var cpu;
89     model.importTraces([], false, false, function() {
90       cpu = model.kernel.getOrCreateCpu(1);
91       thread = model.getOrCreateProcess(1).getOrCreateThread(2);
92
93       var fA = model.addStackFrame(new StackFrame(
94           undefined, 1, 'cat', 'a', 7));
95       var fAB = model.addStackFrame(new StackFrame(
96           fA, 2, 'cat', 'b', 7));
97       var fABC = model.addStackFrame(new StackFrame(
98           fAB, 3, 'cat', 'c', 7));
99       var fAD = model.addStackFrame(new StackFrame(
100           fA, 4, 'cat', 'd', 7));
101
102       model.samples.push(new Sample(undefined, thread, 'instructions_retired',
103                                     10, fABC, 10));
104       model.samples.push(new Sample(undefined, thread, 'instructions_retired',
105                                     20, fAB, 10));
106       model.samples.push(new Sample(undefined, thread, 'instructions_retired',
107                                     30, fAB, 10));
108       model.samples.push(new Sample(undefined, thread, 'instructions_retired',
109                                     40, fAD, 10));
110
111       model.samples.push(new Sample(undefined, thread, 'page_fault',
112                                     25, fAB, 10));
113       model.samples.push(new Sample(undefined, thread, 'page_fault',
114                                     35, fAD, 10));
115     });
116
117     var t = new ThreadTrack(new tracing.TimelineViewport());
118     t.thread = thread;
119     assertEquals(2, t.tracks_.length);
120
121     // Instructions retired
122     var t0 = t.tracks_[0];
123     assertTrue(t0.heading.indexOf('instructions_retired') != -1);
124     assertTrue(t0 instanceof tracing.tracks.SampleTrack);
125     assertTrue(4, t0.samples.length);
126     t0.samples.forEach(function(s) {
127       assertTrue(s instanceof tracing.trace_model.Sample);
128     });
129
130     // page_fault
131     var t1 = t.tracks_[1];
132     assertTrue(t1.heading.indexOf('page_fault') != -1);
133     assertTrue(t1 instanceof tracing.tracks.SampleTrack);
134     assertTrue(2, t1.samples.length);
135   });
136 });
137 </script>