Fix format produced by chart data recorder. - dashboard wants a dictionary of dictionaries indexed by name of the measurement - the uploading logic already serializes the chart data together w/ metadata, recorder should return Python data structure R=etiennej@chromium.org Review URL: https://codereview.chromium.org/1422983002 . Cr-Mirrored-From: https://github.com/domokit/mojo Cr-Mirrored-Commit: dd48bf5ed9763b8b01a495046f73610c6b8e3d88
diff --git a/devtoolslib/perf_dashboard.py b/devtoolslib/perf_dashboard.py index 68d87a3..defb54d 100644 --- a/devtoolslib/perf_dashboard.py +++ b/devtoolslib/perf_dashboard.py
@@ -10,7 +10,6 @@ See http://www.chromium.org/developers/speed-infra/performance-dashboard/sending-data-to-the-performance-dashboard. """ -from collections import defaultdict import httplib import json import pprint @@ -28,18 +27,19 @@ """ def __init__(self, benchmark_name): - self.charts = defaultdict(list) + self.charts = {} self.benchmark_name = benchmark_name def record_scalar(self, chart_name, value_name, units, value): """Records a single measurement value of a scalar type.""" - self.charts[chart_name].append({ + if chart_name not in self.charts: + self.charts[chart_name] = {} + self.charts[chart_name][value_name] = { 'type': 'scalar', - 'name': value_name, 'units': units, - 'value': value}) + 'value': value} - def get_json(self): + def get_chart_data(self): """Returns the JSON string representing the recorded chart data, wrapping it with the required meta data.""" chart_data = { @@ -47,7 +47,7 @@ 'benchmark_name': self.benchmark_name, 'charts': self.charts } - return json.dumps(chart_data) + return chart_data def add_argparse_server_arguments(parser):
diff --git a/devtoolslib/perf_dashboard_unittest.py b/devtoolslib/perf_dashboard_unittest.py index b9c3b17..98714c9 100644 --- a/devtoolslib/perf_dashboard_unittest.py +++ b/devtoolslib/perf_dashboard_unittest.py
@@ -5,7 +5,6 @@ """Tests for the Chromium Performance Dashboard data format implementation.""" import imp -import json import os.path import sys import unittest @@ -24,7 +23,7 @@ def test_empty(self): """Tests chart data with no charts.""" recorder = ChartDataRecorder('benchmark') - result = json.loads(recorder.get_json()) + result = recorder.get_chart_data() self.assertEquals({ 'format_version': '1.0', 'benchmark_name': 'benchmark', @@ -36,7 +35,7 @@ recorder.record_scalar('chart', 'val1', 'ms', 1) recorder.record_scalar('chart', 'val2', 'ms', 2) - result = json.loads(recorder.get_json()) + result = recorder.get_chart_data() self.assertEquals('1.0', result['format_version']) self.assertEquals('benchmark', result['benchmark_name']) @@ -45,14 +44,12 @@ self.assertEquals(2, len(charts['chart'])) self.assertEquals({ 'type': 'scalar', - 'name': 'val1', 'units': 'ms', - 'value': 1}, charts['chart'][0]) + 'value': 1}, charts['chart']['val1']) self.assertEquals({ 'type': 'scalar', - 'name': 'val2', 'units': 'ms', - 'value': 2}, charts['chart'][1]) + 'value': 2}, charts['chart']['val2']) def test_two_charts(self): """Tests chart data with two samples over two charts.""" @@ -60,7 +57,7 @@ recorder.record_scalar('chart1', 'val1', 'ms', 1) recorder.record_scalar('chart2', 'val2', 'ms', 2) - result = json.loads(recorder.get_json()) + result = recorder.get_chart_data() self.assertEquals('1.0', result['format_version']) self.assertEquals('benchmark', result['benchmark_name']) @@ -69,12 +66,10 @@ self.assertEquals(1, len(charts['chart1'])) self.assertEquals({ 'type': 'scalar', - 'name': 'val1', 'units': 'ms', - 'value': 1}, charts['chart1'][0]) + 'value': 1}, charts['chart1']['val1']) self.assertEquals(1, len(charts['chart2'])) self.assertEquals({ 'type': 'scalar', - 'name': 'val2', 'units': 'ms', - 'value': 2}, charts['chart2'][0]) + 'value': 2}, charts['chart2']['val2'])
diff --git a/mojo_benchmark b/mojo_benchmark index 8413490..ff50689 100755 --- a/mojo_benchmark +++ b/mojo_benchmark
@@ -6,11 +6,12 @@ """Runner for Mojo application benchmarks.""" import argparse +import json import logging -import sys -import time import os.path import re +import sys +import time from devtoolslib import shell_arguments from devtoolslib import shell_config @@ -244,7 +245,8 @@ exit_code = 1 if script_args.chart_data_output_file: - script_args.chart_data_output_file.write(chart_data_recorder.get_json()) + script_args.chart_data_output_file.write( + json.dumps(chart_data_recorder.get_chart_data())) script_args.chart_data_output_file.write('\n') return exit_code