blob: a2e80c29966a9c6a86789ce67ee3304398887636 [file] [log] [blame]
<!DOCTYPE html>
<!--
Copyright 2015 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.
-->
<link rel="import" href="/tracing/base/statistics.html">
<link rel="import" href="/tracing/base/unit.html">
<link rel="import" href="/tracing/ui/base/grouping_table.html">
<link rel="import" href="/tracing/ui/base/grouping_table_groupby_picker.html">
<link rel="import" href="/tracing/ui/base/table.html">
<link rel="import" href="/tracing/ui/side_panel/side_panel.html">
<link rel="import" href="/tracing/ui/side_panel/side_panel_registry.html">
<link rel="import" href="/tracing/value/numeric.html">
<link rel="import" href="/tracing/value/ui/scalar_span.html">
<dom-module id='tr-ui-sp-file-size-stats-side-panel'>
<template>
<style>
:host {
display: flex;
flex-direction: column;
}
toolbar {
align-items: center;
background-color: rgb(236, 236, 236);
border-bottom: 1px solid #8e8e8e;
display: flex;
flex-direction: row;
flex-direction: row;
flex: 0 0 auto;
font-size: 12px;
padding: 0 10px 0 10px;
}
table-container {
display: flex;
min-height: 0px;
overflow-y: auto;
}
</style>
<toolbar>
<span><b>Group by:</b></span>
<tr-ui-b-grouping-table-groupby-picker id="picker">
</tr-ui-b-grouping-table-groupby-picker>
</toolbar>
<table-container>
<tr-ui-b-grouping-table id="table"></tr-ui-b-grouping-table>
</table-container>
</template>
</dom-module>
<script>
'use strict';
(function() {
Polymer({
is: 'tr-ui-sp-file-size-stats-side-panel',
behaviors: [tr.ui.behaviors.SidePanel],
ready: function() {
this.model_ = undefined;
this.selection_ = new tr.model.EventSet();
this.$.picker.settingsKey = 'tr-ui-sp-file-size-stats-side-panel-picker';
this.$.picker.possibleGroups = [
{
key: 'phase', label: 'Event Type',
dataFn: function(eventStat) { return eventStat.phase; }
},
{
key: 'category', label: 'Category',
dataFn: function(eventStat) { return eventStat.category; }
},
{
key: 'title', label: 'Title',
dataFn: function(eventStat) { return eventStat.title; }
}
];
this.$.picker.defaultGroupKeys = ['phase', 'title'];
this.$.picker.addEventListener('current-groups-changed',
this.updateContents_.bind(this));
},
get textLabel() {
return 'File Size Stats';
},
supportsModel: function(m) {
if (!m) {
return {
supported: false,
reason: 'No stats were collected for this file.'
};
}
if (m.stats.allTraceEventStats.length === 0) {
return {
supported: false,
reason: 'No stats were collected for this file.'
};
}
return {
supported: true
};
},
get model() {
return this.model_;
},
set model(model) {
this.model_ = model;
this.updateContents_();
},
get rangeOfInterest() {
return this.rangeOfInterest_;
},
set rangeOfInterest(rangeOfInterest) {
this.rangeOfInterest_ = rangeOfInterest;
},
get selection() {
return this.selection_;
},
set selection(selection) {
this.selection_ = selection;
},
createColumns_: function(stats) {
var columns = [
{
title: 'Title',
value: function(row) {
var titleEl = document.createElement('span');
Polymer.dom(titleEl).textContent = row.title;
titleEl.style.textOverflow = 'ellipsis';
return titleEl;
},
cmp: function(a, b) {
return a.title.localeCompare(b.title);
},
width: '400px'
},
{
title: 'Num Events',
align: tr.ui.b.TableFormat.ColumnAlignment.RIGHT,
value: function(row) {
return row.rowStats.numEvents;
},
cmp: function(a, b) {
return a.rowStats.numEvents - b.rowStats.numEvents;
},
width: '80px'
}
];
if (stats && stats.hasEventSizesinBytes) {
columns.push({
title: 'Bytes',
align: tr.ui.b.TableFormat.ColumnAlignment.RIGHT,
value: function(row) {
var value = new tr.v.ScalarNumeric(tr.b.Unit.byName.sizeInBytes,
row.rowStats.totalEventSizeinBytes);
var spanEl = tr.v.ui.createScalarSpan(value);
return spanEl;
},
cmp: function(a, b) {
return a.rowStats.totalEventSizeinBytes -
b.rowStats.totalEventSizeinBytes;
},
width: '80px'
});
}
return columns;
},
updateContents_: function() {
var table = this.$.table;
var columns = this.createColumns_(this.model.stats);
table.rowStatsConstructor = function ModelStatsRowStats(row) {
var sum = tr.b.Statistics.sum(row.data, function(x) {
return x.numEvents;
});
var totalEventSizeinBytes = tr.b.Statistics.sum(row.data, function(x) {
return x.totalEventSizeinBytes;
});
return {
numEvents: sum,
totalEventSizeinBytes: totalEventSizeinBytes
};
};
table.tableColumns = columns;
table.sortColumnIndex = 1;
table.sortDescending = true;
table.selectionMode = tr.ui.b.TableFormat.SelectionMode.ROW;
table.groupBy = this.$.picker.currentGroups.map(function(group) {
return group.dataFn;
});
if (!this.model) {
table.dataToGroup = [];
} else {
table.dataToGroup = this.model.stats.allTraceEventStats;
}
this.$.table.rebuild();
}
});
tr.ui.side_panel.SidePanelRegistry.register(function() {
return document.createElement('tr-ui-sp-file-size-stats-side-panel');
});
})();
</script>