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-different-lthi"
15 constructor="RasterTaskSubViewForTasksFromDifferentLTHI">
19 tvcm.onPolymerReady(function() {
20 tracing.registerAnalysisSubViewType(
22 function supported(selection) {
23 if (selection.length === 0)
27 for (var i = 0; i < selection.length; i++) {
28 var event = selection[i];
29 if (!(event instanceof tracing.trace_model.Slice))
32 var tile = cc.getTileFromRasterTaskSlice(selection[i]);
33 if (tile === undefined)
38 if (tile.containingSnapshot != tile0.containingSnapshot)
44 RasterTaskSubViewForTasksFromDifferentLTHI);
49 this.selection_ = undefined;
52 set selection(selection) {
53 this.selection_ = selection;
55 this.updateContents_();
58 updateContents_: function() {
59 this.textContent = '';
61 if (this.selection_.length === 0)
64 var results = new tracing.analysis.AnalysisResults();
65 this.appendChild(results);
67 var headerDiv = results.appendHeader('Multiple frames selected:');
69 // Get tasks by lthi id.
71 function getCurrentCostsForLTHI(lthi) {
73 if (costsByLTHI[id] === undefined) {
84 return costsByLTHI[id];
87 var totalDuration = 0;
88 var totalCpuDuration = 0;
89 var totalNumAnalyzeTasks = 0;
90 var totalNumRasterizeTasks = 0;
91 var hadCpuDurations = false;
93 var tilesThatWeHaveSeen = {};
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);
101 if (!tilesThatWeHaveSeen[tile.objectInstance.id]) {
102 tilesThatWeHaveSeen[tile.objectInstance.id] = true;
103 curCosts.numTiles += 1;
106 if (cc.isSliceDoingAnalysis(slice)) {
107 curCosts.numAnalysisTasks += 1;
108 totalNumAnalyzeTasks += 1;
110 curCosts.numRasterTasks += 1;
111 totalNumRasterizeTasks += 1;
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;
123 var costs = tvcm.dictionaryValues(costsByLTHI);
124 costs.sort(function(x,y) {
126 return y.cpuDuration - x.cpuDuration;
127 return y.duration - x.duration;
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)');
140 results.appendTableCell(table, hrow, 'CPU Duration (ms)');
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,
151 return new tracing.Selection(costs.tasks);
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');
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');
178 tvcm.ui.SortableTable.decorate(table);