| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| 'use strict'; |
| |
| base.require('analysis.single_slice_selection_analysis'); |
| base.require('analysis.slice_group_selection_analysis'); |
| |
| /** |
| * @fileoverview Conains classes for slice selectionsByTitle. |
| * |
| */ |
| |
| base.exportTo('tracing.analysis', function() { |
| |
| /** |
| * |
| * @constructor |
| * @extends {HTMLDivElement} |
| */ |
| var SliceSelectionAnalysis = tracing.ui.define('slice-selection-analysis'); |
| SliceSelectionAnalysis.prototype = { |
| __proto__: HTMLDivElement.prototype, |
| |
| decorate: function() { |
| this.selection_ = undefined; |
| }, |
| |
| set selection(s) { |
| if (s.getNumSliceHits() == 0) |
| throw new Error('Expected at least 1 slice in selection'); |
| |
| if (s.getNumCounterHits() != 0) |
| throw new Error('Expected only slices in selection'); |
| |
| this.selection_ = s; |
| this.updateContents_(); |
| }, |
| |
| get selection() { |
| return this.selection_; |
| }, |
| |
| set verticalDisplay(bool) { |
| this.verticalDisplay_ = bool; |
| }, |
| |
| get verticalDisplay() { |
| return this.verticalDisplay_; |
| }, |
| |
| updateContents_: function() { |
| |
| this.textContent = ''; |
| if (!this.selection_.length) |
| return; |
| |
| var sliceHitsSelection = this.selection_.getSliceHitsAsSelection(); |
| |
| if (sliceHitsSelection.length == 1) { |
| var childEl = new tracing.analysis.SingleSliceSelectionAnalysis(); |
| childEl.verticalDisplay_ = true; |
| childEl.selection = sliceHitsSelection; |
| this.appendChild(childEl); |
| } else if (sliceHitsSelection.length > 1) { |
| var selectionsByTitle = this.buildSelectionsByTitleByTitle_( |
| this.selection_); |
| /* |
| * Create selectionsByTitle of slice hits organized by title |
| * and for each selection of hits, create a group analysis |
| * and append accordingly. |
| */ |
| |
| // Initialize varibales for summary of groups. |
| var allGroupsDuration = 0; |
| var allGroupsOccurrences = 0; |
| var allGroupsEnd = undefined; |
| var allGroupsStart = undefined; |
| |
| var addedHeader = false; |
| for (var groupTitle in selectionsByTitle) { |
| var childEl = new tracing.analysis.SliceGroupSelectionAnalysis(); |
| if (!addedHeader) { |
| this.appendChild(childEl.createColumnTitleRow()); |
| addedHeader = true; |
| } |
| childEl.selection = selectionsByTitle[groupTitle]; |
| |
| this.appendChild(childEl); |
| |
| allGroupsDuration += childEl.roundedSelectionDuration; |
| allGroupsOccurrences += childEl.occurrences; |
| if (allGroupsEnd == undefined || |
| childEl.selectionEndTime > allGroupsEnd) { |
| allGroupsEnd = childEl.selectionEndTime; |
| } |
| if (allGroupsStart == undefined || |
| childEl.selectionStartTime < allGroupsStart) { |
| allGroupsStart = childEl.selectionStartTime; |
| } |
| } |
| |
| // Construct and append the groups summary. |
| var groupSummaryEl = document.createElement('group-totals-summary'); |
| this.appendDataRow_(groupSummaryEl, 'Totals', |
| tracing.analysis.tsRound(allGroupsDuration), allGroupsOccurrences); |
| this.appendDataRow_(groupSummaryEl, 'Selection Start', |
| tracing.analysis.tsRound(allGroupsStart)); |
| this.appendDataRow_(groupSummaryEl, 'Selection End', |
| tracing.analysis.tsRound(allGroupsEnd)); |
| this.appendChild(groupSummaryEl); |
| } |
| }, |
| |
| buildSelectionsByTitleByTitle_: function(sliceHits) { |
| var selectionsByTitle = {}; |
| for (var i = 0; i < sliceHits.length; i++) { |
| var sliceHit = sliceHits[i]; |
| var title = sliceHit.slice.title; |
| if (!selectionsByTitle[title]) |
| selectionsByTitle[title] = new tracing.Selection(); |
| selectionsByTitle[title].pushHit(sliceHit); |
| } |
| return selectionsByTitle; |
| }, |
| |
| appendDataRow_: function(parentContainer, title, value, |
| additional_valueCell) { |
| var rowEl = document.createElement('div'); |
| rowEl.classList.add('analysis-table-row'); |
| |
| var el = document.createElement('span'); |
| el.classList.add('analysis-table-row-title'); |
| el.textContent = title; |
| rowEl.appendChild(el); |
| |
| el = document.createElement('span'); |
| el.classList.add('analysis-table-cell'); |
| el.textContent = value; |
| rowEl.appendChild(el); |
| |
| if (additional_valueCell) { |
| el = document.createElement('span'); |
| el.classList.add('analyis-table-cell'); |
| el.textContent = additional_valueCell; |
| rowEl.appendChild(el); |
| } |
| parentContainer.appendChild(rowEl); |
| } |
| |
| }; |
| |
| return { |
| SliceSelectionAnalysis: SliceSelectionAnalysis |
| }; |
| |
| }); |