// 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.util');
/**
* @fileoverview Conains classes for single slice selection.
*/
base.exportTo('tracing.analysis', function() {
/**
*
* @constructor
* @extends {HTMLDivElement}
*/
var SingleSliceSelectionAnalysis =
tracing.ui.define('single-slice-selection');
SingleSliceSelectionAnalysis.prototype = {
__proto__: HTMLDivElement.prototype,
decorate: function() {
this.selection_ = undefined;
this.verticalDisplay_ = false;
},
get selection() {
return this.selection_;
},
set selection(selection) {
if (selection.getNumCounterHits() != 0)
throw new Error('Expected only slices in selection');
if (selection.getNumSliceHits() != 1)
throw new Error('Expected only 1 slice in selection');
this.selection_ = selection;
this.updateContents_();
},
get verticalDisplay() {
return this.verticalDisplay_;
},
set verticalDisplay(b) {
this.verticalDisplay_ = b;
this.updateContents_();
},
updateContents_: function() {
this.textContent = '';
if (!this.selection_.length)
return;
var hit = this.selection_[0];
var slice = hit.slice;
if (this.verticalDisplay) {
this.appendDataRow_('Title', slice.title);
this.appendDataRow_('Category', slice.category);
this.appendDataRow_('Start Time',
tracing.analysis.tsRound(slice.start));
this.appendDataRow_('Duration',
tracing.analysis.tsRound(slice.duration));
}else {
var rowEl = document.createElement('div');
rowEl.classList.add('analysis-table-row');
this.appendData_(rowEl, slice.category);
this.appendData_(rowEl, tracing.analysis.tsRound(slice.start));
this.appendData_(rowEl, tracing.analysis.tsRound(slice.duration));
this.appendChild(rowEl);
}
var n = 0;
for (var name in slice.args) {
n += 1;
}
if (n > 0) {
var el = document.createElement('div');
el.classList.add('analysis-table-row');
this.appendData_(el, 'Args');
this.appendChild(el);
for (var name in slice.args) {
this.appendDataRow_(name, slice.args[name]);
}
}
},
appendDataRow_: function(title, value) {
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');
if (value == false && value != 0)
value = '-';
el.textContent = value;
rowEl.appendChild(el);
this.appendChild(rowEl);
},
appendData_: function(rowEl, value) {
var el = document.createElement('span');
el.classList.add('analysis-table-cell');
if (value == false)
value = '-';
el.textContent = value;
rowEl.appendChild(el);
},
createColumnTitleRow: function() {
if (this.verticalDisplay)
throw new error('Cannot mix vertical and horizontal displays.');
this.textContent = '';
var row = document.createElement('div');
row.classList.add('analysis-table-row');
row.classList.add('column-title-row');
this.createAndAppendSpan_(row, 'Slice Category');
this.createAndAppendSpan_(row, 'Start Time');
this.createAndAppendSpan_(row, 'Duration ms');
return row;
},
createAndAppendSpan_: function(row, content) {
var el = document.createElement('span');
el.textContent = content;
row.appendChild(el);
},
};
return {
SingleSliceSelectionAnalysis: SingleSliceSelectionAnalysis
};
});