Chromium Code Reviews| Index: tracing/tracing/value/chart_json_converter.html |
| diff --git a/tracing/tracing/value/chart_json_converter.html b/tracing/tracing/value/chart_json_converter.html |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..ce83d27e78e56f9a655057a6eb2c706903f46e6c |
| --- /dev/null |
| +++ b/tracing/tracing/value/chart_json_converter.html |
| @@ -0,0 +1,142 @@ |
| +<!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.html"> |
| + |
| +<script> |
| +'use strict'; |
| +tr.exportTo('tr.v', function() { |
| + var LEGACY_UNIT_INFO = new Map(); |
| + LEGACY_UNIT_INFO.set('%', {name: 'normalizedPercentage'}); |
|
eakuefner
2016/11/18 21:37:11
can you move this out into its own module?
the ut
|
| + LEGACY_UNIT_INFO.set('', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('Celsius', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('Hz', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('KB', {name: 'sizeInBytes', conversionFactor: 1024}); |
| + LEGACY_UNIT_INFO.set('MB', { |
| + name: 'sizeInBytes', |
| + conversionFactor: 1024 * 1024, |
| + }); |
| + LEGACY_UNIT_INFO.set('ObjectsAt30FPS', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('available_kB', { |
| + name: 'sizeInBytes', |
| + conversionFactor: 1024, |
| + }); |
| + LEGACY_UNIT_INFO.set('bit/s', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('bytes', {name: 'sizeInBytes'}); |
| + LEGACY_UNIT_INFO.set('chars/s', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('commit_count', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('count', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('coverage%', {name: 'normalizedPercentage'}); |
| + LEGACY_UNIT_INFO.set('dB', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('files', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('fps', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('frame_count', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('frame_time', {name: 'timeDurationInMs'}); |
| + LEGACY_UNIT_INFO.set('frames', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('frames-per-second', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('garbage_collections', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('idle%', {name: 'normalizedPercentage'}); |
| + LEGACY_UNIT_INFO.set('janks', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('kb', {name: 'sizeInBytes', conversionFactor: 1024}); |
| + LEGACY_UNIT_INFO.set('lines', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('mWh', {name: 'energyInJoules', conversionFactor: 3.6}); |
| + LEGACY_UNIT_INFO.set('milliseconds', {name: 'timeDurationInMs'}); |
| + LEGACY_UNIT_INFO.set('milliseconds-per-frame', {name: 'timeDurationInMs'}); |
| + LEGACY_UNIT_INFO.set('minutes', { |
| + name: 'timeDurationInMs', |
| + conversionFactor: 60e3, |
| + }); |
| + LEGACY_UNIT_INFO.set('mips', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('mpixels_sec', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('ms', {name: 'timeDurationInMs'}); |
| + LEGACY_UNIT_INFO.set('mtri_sec', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('mvtx_sec', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('objects (bigger is better)', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('packets', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('percent', {name: 'normalizedPercentage'}); |
| + LEGACY_UNIT_INFO.set('points', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('ports', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('reduction%', {name: 'normalizedPercentage'}); |
| + LEGACY_UNIT_INFO.set('relocs', {name: 'count'}); |
| + LEGACY_UNIT_INFO.set('runs/s', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('runs_per_s', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('runs_per_second', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('score (bigger is better)', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('score', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('score_(bigger_is_better)', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('seconds', { |
| + name: 'timeDurationInMs', |
| + conversionFactor: 1e3, |
| + }); |
| + LEGACY_UNIT_INFO.set('tokens/s', {name: 'unitlessNumber'}); |
| + LEGACY_UNIT_INFO.set('us', { |
| + name: 'timeDurationInMs', |
| + conversionFactor: 1e-3, |
| + }); |
| + |
| + class ChartJsonConverter { |
| + /** |
| + * Parses Values from |charts|, converts them to Histograms, and adds those |
| + * to |histograms|. |
| + * |
| + * @param {!Array.<!Object>} charts |
| + * @param {!tr.v.HistogramSet} histograms |
| + */ |
| + static convertChartJson(charts, histograms) { |
| + tr.b.iterItems(charts.charts, (name, pageValues) => { |
| + if (name === 'trace') return; |
| + |
| + tr.b.iterItems(pageValues, (storyName, value) => { |
| + if (storyName === 'summary') return; |
| + |
| + var unitInfo = LEGACY_UNIT_INFO.get(value.units) || {}; |
| + var unitName = unitInfo.name || 'unitlessNumber'; |
| + var unitNameSuffix = tr.b.Unit.nameSuffixForImprovementDirection( |
| + ChartJsonConverter.convertImprovementDirection( |
| + value.improvement_direction)); |
| + var conversionFactor = unitInfo.conversionFactor || 1; |
| + |
| + var hist = new tr.v.Histogram( |
| + value.name, |
| + tr.b.Unit.byName[unitName + unitNameSuffix], |
| + tr.v.HistogramBinBoundaries.SINGULAR); |
| + hist.description = value.description || ''; |
| + histograms.addHistogram(hist); |
| + |
| + var iterationInfo = new tr.v.d.IterationInfo(); |
| + iterationInfo.addInfo({ |
| + storyDisplayName: storyName, |
| + legacyTIRLabel: value.tir_label, |
| + benchmarkName: charts.benchmark_name, |
| + }); |
| + iterationInfo.addToValue(hist); |
| + |
| + if (value.type === 'list_of_scalar_values') { |
| + for (var sample of value.values) { |
| + hist.addSample(sample * conversionFactor); |
| + } |
| + } else if (value.type === 'scalar') { |
| + hist.addSample(value.value * conversionFactor); |
| + } |
| + }); |
| + }); |
| + } |
| + |
| + static convertImprovementDirection(improvementDirection) { |
| + switch (improvementDirection) { |
| + case 'down': return tr.b.ImprovementDirection.SMALLER_IS_BETTER; |
| + case 'up': return tr.b.ImprovementDirection.BIGGER_IS_BETTER; |
| + default: return tr.b.ImprovementDirection.DONT_CARE; |
| + } |
| + } |
| + } |
| + |
| + return { |
| + ChartJsonConverter, |
| + }; |
| +}); |
| +</script> |