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.
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">
14 <polymer-element name="raster-task-analysis-for-tasks-from-same-lthi"
15 constructor="RasterTaskSubViewForTasksFromSameLTHI">
20 this.selection_ = undefined;
23 set selection(selection) {
24 this.selection_ = selection;
26 this.updateContents_();
29 updateContents_: function() {
30 this.textContent = '';
32 if (this.selection_.length === 0)
35 var results = new tracing.analysis.AnalysisResults();
36 this.appendChild(results);
38 var headerDiv = results.appendHeader('Rasterization costs in ');
41 var lthi = cc.getTileFromRasterTaskSlice(
42 this.selection_[0]).containingSnapshot;
43 headerDiv.appendChild(results.createSelectionChangingLink(
44 lthi.userFriendlyName,
46 return new tracing.Selection([lthi]);
49 // Get costs by layer.
50 var costsByLayerId = {};
51 function getCurrentCostsForLayerId(tile) {
52 var layerId = tile.layerId;
53 var lthi = tile.containingSnapshot;
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] = {
70 return costsByLayerId[layerId];
73 var totalDuration = 0;
74 var totalCpuDuration = 0;
75 var totalNumAnalyzeTasks = 0;
76 var totalNumRasterizeTasks = 0;
77 var hadCpuDurations = false;
79 var tilesThatWeHaveSeen = {};
81 this.selection_.forEach(function(slice) {
82 var tile = cc.getTileFromRasterTaskSlice(slice);
83 var curCosts = getCurrentCostsForLayerId(tile);
85 if (!tilesThatWeHaveSeen[tile.objectInstance.id]) {
86 tilesThatWeHaveSeen[tile.objectInstance.id] = true;
87 curCosts.numTiles += 1;
90 if (cc.isSliceDoingAnalysis(slice)) {
91 curCosts.numAnalysisTasks += 1;
92 totalNumAnalyzeTasks += 1;
94 curCosts.numRasterTasks += 1;
95 totalNumRasterizeTasks += 1;
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;
107 var costs = tvcm.dictionaryValues(costsByLayerId);
108 costs.sort(function(x,y) {
110 return y.cpuDuration - x.cpuDuration;
111 return y.duration - x.duration;
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)');
124 results.appendTableCell(table, hrow, 'CPU Duration (ms)');
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);
133 layerEl.textContent = '';
134 layerEl.appendChild(results.createSelectionChangingLink(
137 return new cc.LayerSelection(costs.layer);
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');
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');
164 tvcm.ui.SortableTable.decorate(table);