blob: 1627c592669d8e30348e6bab41c4cace0065da9d [file] [edit]
<!DOCTYPE html>
<!--
Copyright 2016 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/value/histogram_grouping.html">
<link rel="import" href="/tracing/value/histogram_set.html">
<script>
'use strict';
tr.exportTo('tr.v', function() {
const IGNORE_GROUPING_KEYS = [
'name',
'storyTags',
'testPath',
];
class CSVBuilder {
/**
* @param {!tr.v.HistogramSet} histograms
*/
constructor(histograms) {
this.histograms_ = histograms;
this.table_ = [];
this.statisticsNames_ = new Set();
this.groupings_ = [];
}
build() {
this.prepare_();
this.buildHeader_();
this.buildTable_();
}
prepare_() {
for (const [key, grouping] of tr.v.HistogramGrouping.BY_KEY) {
if (IGNORE_GROUPING_KEYS.includes(key)) continue;
this.groupings_.push(grouping);
}
this.groupings_.push(new tr.v.GenericSetGrouping(
tr.v.d.RESERVED_NAMES.TRACE_URLS));
this.groupings_.sort((a, b) => a.key.localeCompare(b.key));
for (const hist of this.histograms_) {
for (const name of hist.statisticsNames) {
this.statisticsNames_.add(name);
}
}
this.statisticsNames_ = Array.from(this.statisticsNames_);
this.statisticsNames_.sort();
}
buildHeader_() {
const header = ['name', 'unit'];
for (const name of this.statisticsNames_) {
header.push(name);
}
for (const grouping of this.groupings_) {
header.push(grouping.key);
}
this.table_.push(header);
}
buildTable_() {
for (const hist of this.histograms_) {
const row = [hist.name, hist.unit.unitString];
this.table_.push(row);
for (const name of this.statisticsNames_) {
const stat = hist.getStatisticScalar(name);
if (stat) {
row.push(stat.value);
} else {
row.push('');
}
}
for (const grouping of this.groupings_) {
row.push(grouping.callback(hist));
}
}
}
toString() {
let str = '';
for (const row of this.table_) {
for (let i = 0; i < row.length; ++i) {
if (i > 0) {
str += ',';
}
let cell = '' + row[i];
cell = cell.replace(/\n/g, ' ');
if (cell.indexOf(',') >= 0 || cell.indexOf('"') >= 0) {
cell = '"' + cell.replace(/"/g, '""') + '"';
}
str += cell;
}
str += '\n';
}
return str;
}
}
return {
CSVBuilder,
};
});
</script>