Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / trace-viewer / trace_viewer / cc / raster_task_sub_view_for_tasks_from_different_lthi.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 <link rel="import" href="/cc/raster_task.html">
8 <link rel="import" href="/cc/selection.html">
9 <link rel="import" href="/tracing/analysis/analysis_results.html">
10 <link rel="import" href="/tracing/analysis/analysis_sub_view.html">
11 <link rel="import" href="/tracing/analysis/util.html">
12 <link rel="import" href="/tvcm/ui/sortable_table.html">
13
14 <polymer-element name="raster-task-analysis-for-tasks-from-different-lthi"
15     constructor="RasterTaskSubViewForTasksFromDifferentLTHI">
16   <script>
17   'use strict';
18
19   tvcm.onPolymerReady(function() {
20     tracing.registerAnalysisSubViewType(
21       1,
22       function supported(selection) {
23         if (selection.length === 0)
24           return false;
25
26         var tile0;
27         for (var i = 0; i < selection.length; i++) {
28           var event = selection[i];
29           if (!(event instanceof tracing.trace_model.Slice))
30             return false;
31
32           var tile = cc.getTileFromRasterTaskSlice(selection[i]);
33           if (tile === undefined)
34             return false;
35           if (i === 0) {
36             tile0 = tile;
37           } else {
38             if (tile.containingSnapshot != tile0.containingSnapshot)
39               return true;
40           }
41         }
42         return false;
43       },
44       RasterTaskSubViewForTasksFromDifferentLTHI);
45   });
46
47   Polymer({
48     created: function() {
49       this.selection_ = undefined;
50     },
51
52     set selection(selection) {
53       this.selection_ = selection;
54
55       this.updateContents_();
56     },
57
58     updateContents_: function() {
59       this.textContent = '';
60
61       if (this.selection_.length === 0)
62         return;
63
64       var results = new tracing.analysis.AnalysisResults();
65       this.appendChild(results);
66
67       var headerDiv = results.appendHeader('Multiple frames selected:');
68
69       // Get tasks by lthi id.
70       var costsByLTHI = {};
71       function getCurrentCostsForLTHI(lthi) {
72         var id = lthi.guid;
73         if (costsByLTHI[id] === undefined) {
74           costsByLTHI[id] = {
75             lthi: lthi,
76             tasks: [],
77             numTiles: 0,
78             numAnalysisTasks: 0,
79             numRasterTasks: 0,
80             duration: 0,
81             cpuDuration: 0
82           }
83         }
84         return costsByLTHI[id];
85       }
86
87       var totalDuration = 0;
88       var totalCpuDuration = 0;
89       var totalNumAnalyzeTasks = 0;
90       var totalNumRasterizeTasks = 0;
91       var hadCpuDurations = false;
92
93       var tilesThatWeHaveSeen = {};
94
95       this.selection_.forEach(function(slice) {
96         var tile = cc.getTileFromRasterTaskSlice(slice);
97         var lthi = tile.containingSnapshot;
98         var curCosts = getCurrentCostsForLTHI(lthi);
99         curCosts.tasks.push(slice);
100
101         if (!tilesThatWeHaveSeen[tile.objectInstance.id]) {
102           tilesThatWeHaveSeen[tile.objectInstance.id] = true;
103           curCosts.numTiles += 1;
104         }
105
106         if (cc.isSliceDoingAnalysis(slice)) {
107           curCosts.numAnalysisTasks += 1;
108           totalNumAnalyzeTasks += 1;
109         } else {
110           curCosts.numRasterTasks += 1;
111           totalNumRasterizeTasks += 1;
112         }
113         curCosts.duration += slice.duration;
114         totalDuration += slice.duration;
115         if (slice.cpuDuration !== undefined) {
116           curCosts.cpuDuration += slice.cpuDuration;
117           totalCpuDuration += slice.cpuDuration;
118           hadCpuDurations = true;
119         }
120       });
121
122       // Initial sort.
123       var costs = tvcm.dictionaryValues(costsByLTHI);
124       costs.sort(function(x,y) {
125         if (hadCpuDurations)
126           return y.cpuDuration - x.cpuDuration;
127         return y.duration - x.duration;
128       });
129
130       // Output.
131       var table = results.appendTable(
132           'analyze-rasterizatin-costs-table', hadCpuDurations ? 6 : 5);
133       var hrow = results.appendHeadRow(table);
134       results.appendTableCell(table, hrow, 'Frame');
135       results.appendTableCell(table, hrow, 'Num Tiles');
136       results.appendTableCell(table, hrow, 'Num Analysis Tasks');
137       results.appendTableCell(table, hrow, 'Num Rasterized Tiles');
138       results.appendTableCell(table, hrow, 'Wall Duration (ms)');
139       if (hadCpuDurations)
140         results.appendTableCell(table, hrow, 'CPU Duration (ms)');
141
142
143       // Body.
144       costs.forEach(function(costs) {
145         var row = results.appendBodyRow(table);
146         var lthiEl = results.appendTableCell(table, row, '');
147         lthiEl.textContent = '';
148         lthiEl.appendChild(results.createSelectionChangingLink(
149           costs.lthi.userFriendlyName,
150           function() {
151             return new tracing.Selection(costs.tasks);
152           }));
153
154         results.appendTableCell(table, row,  costs.numTiles);
155         results.appendTableCell(table, row,  costs.numAnalysisTasks);
156         results.appendTableCell(table, row,  costs.numRasterTasks);
157         results.appendTableCell(
158             table, row,  tracing.analysis.tsRound(costs.duration) + 'ms');
159         if (hadCpuDurations) {
160           results.appendTableCell(
161               table, row,  tracing.analysis.tsRound(costs.cpuDuration) + 'ms');
162         }
163       });
164
165       // Footer.
166       var frow = results.appendFootRow(table);
167       results.appendTableCell(table, frow, 'Totals')
168       results.appendTableCell(table, frow,  tvcm.dictionaryLength(tilesThatWeHaveSeen));
169       results.appendTableCell(table, frow,  totalNumAnalyzeTasks);
170       results.appendTableCell(table, frow,  totalNumRasterizeTasks);
171       results.appendTableCell(
172           table, frow, tracing.analysis.tsRound(totalDuration) + 'ms');
173       if (hadCpuDurations) {
174         results.appendTableCell(
175             table, frow, tracing.analysis.tsRound(totalCpuDuration) + 'ms');
176       }
177
178       tvcm.ui.SortableTable.decorate(table);
179     }
180   });
181   </script>
182 </polymer-element>