Home | History | Annotate | Download | only in analysis
      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