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..dd5d25d585f46e9a3f7e80856db4996daabd62f9 |
--- /dev/null |
+++ b/tracing/tracing/value/chart_json_converter.html |
@@ -0,0 +1,75 @@ |
+<!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"> |
+<link rel="import" href="/tracing/value/legacy_unit_info.html"> |
+ |
+<script> |
+'use strict'; |
+tr.exportTo('tr.v', function() { |
+ 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 = tr.v.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> |