Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(608)

Side by Side Diff: tools/telemetry/telemetry/internal/results/html_output_formatter.py

Issue 1309143006: [Telemetry] Update the ConfindenceInterval calculation in results.html to use (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 import datetime 5 import datetime
6 import json 6 import json
7 import logging 7 import logging
8 import os 8 import os
9 import re 9 import re
10 10
11 from catapult_base import cloud_storage 11 from catapult_base import cloud_storage
12 from telemetry.core import util 12 from telemetry.core import util
13 from telemetry.internal.results import chart_json_output_formatter 13 from telemetry.internal.results import chart_json_output_formatter
14 from telemetry.internal.results import output_formatter 14 from telemetry.internal.results import output_formatter
15 from telemetry import value as value_module 15 from telemetry import value as value_module
16 from telemetry.value import list_of_scalar_values
16 17
17 18
18 _TEMPLATE_HTML_PATH = os.path.join( 19 _TEMPLATE_HTML_PATH = os.path.join(
19 util.GetTelemetryDir(), 'support', 'html_output', 'results-template.html') 20 util.GetTelemetryDir(), 'support', 'html_output', 'results-template.html')
20 _JS_PLUGINS = [os.path.join('flot', 'jquery.flot.min.js'), 21 _JS_PLUGINS = [os.path.join('flot', 'jquery.flot.min.js'),
21 os.path.join('WebKit', 'PerformanceTests', 'resources', 22 os.path.join('WebKit', 'PerformanceTests', 'resources',
22 'jquery.tablesorter.min.js'), 23 'jquery.tablesorter.min.js'),
23 os.path.join('WebKit', 'PerformanceTests', 'resources', 24 os.path.join('WebKit', 'PerformanceTests', 'resources',
24 'statistics.js')] 25 'statistics.js')]
25 _UNIT_JSON = os.path.join( 26 _UNIT_JSON = os.path.join(
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 logging.warn('Failed to extract previous results from HTML output') 86 logging.warn('Failed to extract previous results from HTML output')
86 return [] 87 return []
87 return json.loads(m.group(1))[:512] 88 return json.loads(m.group(1))[:512]
88 89
89 def _SaveResults(self, results): 90 def _SaveResults(self, results):
90 self._output_stream.seek(0) 91 self._output_stream.seek(0)
91 self._output_stream.write(results) 92 self._output_stream.write(results)
92 self._output_stream.truncate() 93 self._output_stream.truncate()
93 94
94 def _PrintPerfResult(self, measurement, trace, values, units, 95 def _PrintPerfResult(self, measurement, trace, values, units,
95 result_type='default'): 96 result_type='default', std=None):
96 metric_name = measurement 97 metric_name = measurement
97 if trace != measurement: 98 if trace != measurement:
98 metric_name += '.' + trace 99 metric_name += '.' + trace
99 self._result['tests'].setdefault(self._test_name, {}) 100 self._result['tests'].setdefault(self._test_name, {})
100 self._result['tests'][self._test_name].setdefault('metrics', {}) 101 self._result['tests'][self._test_name].setdefault('metrics', {})
101 self._result['tests'][self._test_name]['metrics'][metric_name] = { 102 metric_data = {
102 'current': values, 103 'current': values,
103 'units': units, 104 'units': units,
104 'important': result_type == 'default' 105 'important': result_type == 'default'
105 } 106 }
107 if std is not None:
108 metric_data['std'] = std
109 self._result['tests'][self._test_name]['metrics'][metric_name] = metric_data
106 110
107 def _TranslateChartJson(self, chart_json_dict): 111 def _TranslateChartJson(self, chart_json_dict):
108 dummy_dict = dict() 112 dummy_dict = dict()
109 113
110 for chart_name, traces in chart_json_dict['charts'].iteritems(): 114 for chart_name, traces in chart_json_dict['charts'].iteritems():
111 for trace_name, value_dict in traces.iteritems(): 115 for trace_name, value_dict in traces.iteritems():
112 # TODO(eakuefner): refactor summarization so we don't have to jump 116 # TODO(eakuefner): refactor summarization so we don't have to jump
113 # through hoops like this. 117 # through hoops like this.
114 if 'page_id' in value_dict: 118 if 'page_id' in value_dict:
115 del value_dict['page_id'] 119 del value_dict['page_id']
116 result_type = 'nondefault' 120 result_type = 'nondefault'
117 else: 121 else:
118 result_type = 'default' 122 result_type = 'default'
119 123
120 # Note: we explicitly ignore TraceValues because Buildbot did. 124 # Note: we explicitly ignore TraceValues because Buildbot did.
121 if value_dict['type'] == 'trace': 125 if value_dict['type'] == 'trace':
122 continue 126 continue
123 value = value_module.Value.FromDict(value_dict, dummy_dict) 127 value = value_module.Value.FromDict(value_dict, dummy_dict)
124 128
125 perf_value = value.GetBuildbotValue() 129 perf_value = value.GetBuildbotValue()
126 130
127 if trace_name == 'summary': 131 if trace_name == 'summary':
128 trace_name = chart_name 132 trace_name = chart_name
129 133
134 std = None
135 if isinstance(value, list_of_scalar_values.ListOfScalarValues):
136 std = value.std
137
130 self._PrintPerfResult(chart_name, trace_name, perf_value, 138 self._PrintPerfResult(chart_name, trace_name, perf_value,
131 value.units, result_type) 139 value.units, result_type, std)
132 140
133 @property 141 @property
134 def _test_name(self): 142 def _test_name(self):
135 return self._metadata.name 143 return self._metadata.name
136 144
137 def GetResults(self): 145 def GetResults(self):
138 return self._result 146 return self._result
139 147
140 def GetCombinedResults(self): 148 def GetCombinedResults(self):
141 all_results = list(self._existing_results) 149 all_results = list(self._existing_results)
(...skipping 25 matching lines...) Expand all
167 print 175 print
168 print ('View online at ' 176 print ('View online at '
169 'http://storage.googleapis.com/chromium-telemetry/%s' 177 'http://storage.googleapis.com/chromium-telemetry/%s'
170 % file_name) 178 % file_name)
171 except cloud_storage.PermissionError as e: 179 except cloud_storage.PermissionError as e:
172 logging.error('Cannot upload profiling files to cloud storage due to ' 180 logging.error('Cannot upload profiling files to cloud storage due to '
173 ' permission error: %s' % e.message) 181 ' permission error: %s' % e.message)
174 print 182 print
175 print 'View result at file://%s' % os.path.abspath( 183 print 'View result at file://%s' % os.path.abspath(
176 self._output_stream.name) 184 self._output_stream.name)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698