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_same_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-same-lthi"
15     constructor="RasterTaskSubViewForTasksFromSameLTHI">
16   <script>
17   'use strict';
18   Polymer({
19     created: function() {
20       this.selection_ = undefined;
21     },
22
23     set selection(selection) {
24       this.selection_ = selection;
25
26       this.updateContents_();
27     },
28
29     updateContents_: function() {
30       this.textContent = '';
31
32       if (this.selection_.length === 0)
33         return;
34
35       var results = new tracing.analysis.AnalysisResults();
36       this.appendChild(results);
37
38       var headerDiv = results.appendHeader('Rasterization costs in ');
39
40       // LTHI link.
41       var lthi = cc.getTileFromRasterTaskSlice(
42           this.selection_[0]).containingSnapshot;
43       headerDiv.appendChild(results.createSelectionChangingLink(
44         lthi.userFriendlyName,
45         function() {
46           return new tracing.Selection([lthi]);
47         }));
48
49       // Get costs by layer.
50       var costsByLayerId = {};
51       function getCurrentCostsForLayerId(tile) {
52         var layerId = tile.layerId;
53         var lthi = tile.containingSnapshot;
54         var layer;
55         if (lthi.activeTree)
56           layer = lthi.activeTree.findLayerWithId(layerId);
57         if (layer === undefined && lthi.pendingTree)
58           layer = lthi.pendingTree.findLayerWithId(layerId);
59         if (costsByLayerId[layerId] === undefined) {
60           costsByLayerId[layerId] = {
61             layerId: layerId,
62             layer: layer,
63             numTiles: 0,
64             numAnalysisTasks: 0,
65             numRasterTasks: 0,
66             duration: 0,
67             cpuDuration: 0
68           }
69         }
70         return costsByLayerId[layerId];
71       }
72
73       var totalDuration = 0;
74       var totalCpuDuration = 0;
75       var totalNumAnalyzeTasks = 0;
76       var totalNumRasterizeTasks = 0;
77       var hadCpuDurations = false;
78
79       var tilesThatWeHaveSeen = {};
80
81       this.selection_.forEach(function(slice) {
82         var tile = cc.getTileFromRasterTaskSlice(slice);
83         var curCosts = getCurrentCostsForLayerId(tile);
84
85         if (!tilesThatWeHaveSeen[tile.objectInstance.id]) {
86           tilesThatWeHaveSeen[tile.objectInstance.id] = true;
87           curCosts.numTiles += 1;
88         }
89
90         if (cc.isSliceDoingAnalysis(slice)) {
91           curCosts.numAnalysisTasks += 1;
92           totalNumAnalyzeTasks += 1;
93         } else {
94           curCosts.numRasterTasks += 1;
95           totalNumRasterizeTasks += 1;
96         }
97         curCosts.duration += slice.duration;
98         totalDuration += slice.duration;
99         if (slice.cpuDuration !== undefined) {
100           curCosts.cpuDuration += slice.cpuDuration;
101           totalCpuDuration += slice.cpuDuration;
102           hadCpuDurations = true;
103         }
104       });
105
106       // Initial sort.
107       var costs = tvcm.dictionaryValues(costsByLayerId);
108       costs.sort(function(x,y) {
109         if (hadCpuDurations)
110           return y.cpuDuration - x.cpuDuration;
111         return y.duration - x.duration;
112       });
113
114       // Output.
115       var table = results.appendTable(
116           'analyze-rasterizatin-costs-table', hadCpuDurations ? 6 : 5);
117       var hrow = results.appendHeadRow(table);
118       results.appendTableCell(table, hrow, 'Layer');
119       results.appendTableCell(table, hrow, 'Num Tiles');
120       results.appendTableCell(table, hrow, 'Num Analysis Tasks');
121       results.appendTableCell(table, hrow, 'Num Rasterized Tiles');
122       results.appendTableCell(table, hrow, 'Wall Duration (ms)');
123       if (hadCpuDurations)
124         results.appendTableCell(table, hrow, 'CPU Duration (ms)');
125
126
127       // Body.
128       costs.forEach(function(costs) {
129         var layerId = costs.layerId;
130         var row = results.appendBodyRow(table);
131         var layerEl = results.appendTableCell(table, row, 'Layer ' + layerId);
132         if (costs.layer) {
133           layerEl.textContent = '';
134           layerEl.appendChild(results.createSelectionChangingLink(
135               'Layer ' + layerId,
136               function() {
137                 return new cc.LayerSelection(costs.layer);
138               }));
139         }
140         results.appendTableCell(table, row,  costs.numTiles);
141         results.appendTableCell(table, row,  costs.numAnalysisTasks);
142         results.appendTableCell(table, row,  costs.numRasterTasks);
143         results.appendTableCell(
144             table, row,  tracing.analysis.tsRound(costs.duration) + 'ms');
145         if (hadCpuDurations) {
146           results.appendTableCell(
147               table, row,  tracing.analysis.tsRound(costs.cpuDuration) + 'ms');
148         }
149       });
150
151       // Footer.
152       var frow = results.appendFootRow(table);
153       results.appendTableCell(table, frow, 'Totals')
154       results.appendTableCell(table, frow,  tvcm.dictionaryLength(tilesThatWeHaveSeen));
155       results.appendTableCell(table, frow,  totalNumAnalyzeTasks);
156       results.appendTableCell(table, frow,  totalNumRasterizeTasks);
157       results.appendTableCell(
158           table, frow, tracing.analysis.tsRound(totalDuration) + 'ms');
159       if (hadCpuDurations) {
160         results.appendTableCell(
161             table, frow, tracing.analysis.tsRound(totalCpuDuration) + 'ms');
162       }
163
164       tvcm.ui.SortableTable.decorate(table);
165     }
166   });
167   </script>
168 </polymer-element>