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 8 <link rel="import" href="/tracing/base/base.html"> 9 <link rel="import" href="/tracing/ui/analysis/analysis_sub_view.html"> 10 <link rel="import" href="/tracing/ui/analysis/multi_event_details_table.html"> 11 <link rel="import" href="/tracing/ui/analysis/multi_event_summary_table.html"> 12 <link rel="import" href="/tracing/ui/analysis/selection_summary_table.html"> 13 <link rel="import" href="/tracing/ui/base/table.html"> 14 <link rel="import" href="/tracing/ui/base/ui.html"> 15 16 <dom-module id='tr-ui-a-multi-event-sub-view'> 17 <template> 18 <style> 19 :host { 20 display: flex; 21 overflow: auto; 22 } 23 #content { 24 display: flex; 25 flex-direction: column; 26 flex: 0 1 auto; 27 align-self: stretch; 28 } 29 #content > * { 30 flex: 0 0 auto; 31 align-self: stretch; 32 } 33 tr-ui-a-multi-event-summary-table { 34 border-bottom: 1px solid #aaa; 35 } 36 37 tr-ui-a-selection-summary-table { 38 margin-top: 1.25em; 39 border-top: 1px solid #aaa; 40 background-color: #eee; 41 font-weight: bold; 42 margin-bottom: 1.25em; 43 border-bottom: 1px solid #aaa; 44 } 45 </style> 46 <div id="content"></div> 47 </template> 48 </dom-module> 49 <script> 50 'use strict'; 51 52 Polymer({ 53 is: 'tr-ui-a-multi-event-sub-view', 54 behaviors: [tr.ui.analysis.AnalysisSubView], 55 56 created: function() { 57 this.currentSelection_ = undefined; 58 this.eventsHaveDuration_ = true; 59 this.eventsHaveSubRows_ = true; 60 }, 61 62 set selection(selection) { 63 if (selection.length <= 1) 64 throw new Error('Only supports multiple items'); 65 this.setSelectionWithoutErrorChecks(selection); 66 }, 67 68 get selection() { 69 return this.currentSelection_; 70 }, 71 72 setSelectionWithoutErrorChecks: function(selection) { 73 this.currentSelection_ = selection; 74 this.updateContents_(); 75 }, 76 77 get eventsHaveDuration() { 78 return this.eventsHaveDuration_; 79 }, 80 81 set eventsHaveDuration(eventsHaveDuration) { 82 this.eventsHaveDuration_ = eventsHaveDuration; 83 this.updateContents_(); 84 }, 85 86 get eventsHaveSubRows() { 87 return this.eventsHaveSubRows_; 88 }, 89 90 set eventsHaveSubRows(eventsHaveSubRows) { 91 this.eventsHaveSubRows_ = eventsHaveSubRows; 92 this.updateContents_(); 93 }, 94 95 updateContents_: function() { 96 var selection = this.currentSelection_; 97 98 Polymer.dom(this.$.content).textContent = ''; 99 if (!selection) 100 return; 101 102 var eventsByTitle = selection.getEventsOrganizedByTitle(); 103 var numTitles = tr.b.dictionaryLength(eventsByTitle); 104 105 var summaryTableEl = document.createElement( 106 'tr-ui-a-multi-event-summary-table'); 107 summaryTableEl.configure({ 108 showTotals: numTitles > 1, 109 eventsByTitle: eventsByTitle, 110 eventsHaveDuration: this.eventsHaveDuration_, 111 eventsHaveSubRows: this.eventsHaveSubRows_ 112 }); 113 Polymer.dom(this.$.content).appendChild(summaryTableEl); 114 115 var selectionSummaryTableEl = document.createElement( 116 'tr-ui-a-selection-summary-table'); 117 selectionSummaryTableEl.selection = this.currentSelection_; 118 Polymer.dom(this.$.content).appendChild(selectionSummaryTableEl); 119 120 if (numTitles === 1) { 121 var detailsTableEl = document.createElement( 122 'tr-ui-a-multi-event-details-table'); 123 detailsTableEl.eventsHaveDuration = this.eventsHaveDuration_; 124 detailsTableEl.eventsHaveSubRows = this.eventsHaveSubRows_; 125 detailsTableEl.selection = selection; 126 Polymer.dom(this.$.content).appendChild(detailsTableEl); 127 } 128 } 129 }); 130 </script> 131