Javascript  |  75行  |  1.85 KB

// 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('ui');
base.require('analysis.single_counter_selection_analysis');

/**
 * @fileoverview Conains class for counter selections
 *
 */

base.exportTo('tracing.analysis', function() {

  /**
   *
   * @constructor
   * @extends {HTMLDivElement}
   */
  var CounterSelectionAnalysis =
      tracing.ui.define('counter-selection-analysis');
  CounterSelectionAnalysis.prototype = {
    __proto__: HTMLDivElement.prototype,

    decorate: function() {
      this.selection_ = undefined;
    },

    set selection(s) {
      if (s.getNumCounterHits() == 0)
        throw new Error('Expected at least 1 counter in selection');
      if (s.getNumSliceHits() != 0)
        throw new Error('Expected only counters in selection');

      this.selection_ = s;
      this.updateContents_();
    },

    get selection() {
      return this.selection_;
    },

    updateContents_: function() {
      this.textContent = '';

      if (!this.selection_.length)
        return;

      var counterHitsSelection =
          this.selection_.getCounterSampleHitsAsSelection();

      var counters = counterHitsSelection;
      var addedHeader = false;
      for (var i = 0; i < counters.length; i++) {
        var counterHit = counters[i];
        var childEl = new tracing.analysis.SingleCounterSelectionAnalysis();
        if (!addedHeader) {
          this.appendChild(childEl.createColumnTitleRow());
          addedHeader = true;
        }
        var childSelection = new tracing.Selection();
        childSelection.pushHit(counterHit);
        childEl.selection = childSelection;
        this.appendChild(childEl);
      }
    }
  };

  return {
    CounterSelectionAnalysis: CounterSelectionAnalysis
  };
});