Define measurements as a tuple of name and spec. Measurements specs are lengthy. This patch gives each measurement a name which is used for display purposes and for labeling the data uploaded to perf dashboard. R=qsr@chromium.org Review URL: https://codereview.chromium.org/1414353006 . Cr-Mirrored-From: https://github.com/domokit/mojo Cr-Mirrored-Commit: 077e43dc6ec22a87fb2f26db2894196c47e5250d
diff --git a/mojo_benchmark b/mojo_benchmark index 69a2086..249f26b 100755 --- a/mojo_benchmark +++ b/mojo_benchmark
@@ -31,16 +31,33 @@ # List of measurements to make. 'measurements': [ - '<measurement type>/<event category>/<event name>', + { + 'name': my_measurement, + 'spec': spec, + }, + (...) ] } +For each measurement, 'name' is a label used for presentation purposes. 'spec' +defines the measurement. + Available measurement types are: - - 'time_until' - time until the first occurence of the targeted event - - 'avg_duration' - average duration of the targeted event - - 'percentile_duration' - value at XXth percentile of the targeted event where - XX is from the measurement spec, i.e. .../<event name>/0.XX +'time_until' - time until the first occurence of the targeted event. The spec +takes the following format: + + 'time_until/category/event' + +'avg_duration' - average duration of the targeted event. The spec takes the +following format: + + 'avg_duration/category/event' + +'percentile_duration' - value at the given percentile of the targeted event. The +spec takes the following format: + + 'percentile_duration/category/event/percentile' |benchmark_list_file| may reference the |target_os| global that will be any of ['android', 'linux'], indicating the system on which the benchmarks are to be @@ -66,7 +83,7 @@ _MEASUREMENT_RESULT_FORMAT = r""" ^ # Beginning of the line. measurement: # Hard-coded tag. -\s+(\S+) # Match measurement name. +\s+(\S+) # Match measurement spec. \s+(\S+) # Match measurement result. $ # End of the line. """ @@ -121,7 +138,7 @@ benchmark_args.append('--trace-output=' + output_file) for measurement in measurements: - benchmark_args.append(measurement) + benchmark_args.append(measurement['spec']) shell_args = list(shell_args) shell_args.append(_BENCHMARK_APP) @@ -155,10 +172,10 @@ for line in output_lines: match = re.match(_MEASUREMENT_REGEX, line) if match: - measurement_name = match.group(1) + measurement_spec = match.group(1) measurement_result = match.group(2) try: - measurement_results[measurement_name] = float(measurement_result) + measurement_results[measurement_spec] = float(measurement_result) except ValueError: pass return measurement_results @@ -223,19 +240,19 @@ measurement_results = _parse_measurement_results(output) # Iterate over the list of specs, not the dictionary, to detect missing # results and preserve the required order. - for measurement_spec in measurements: - if measurement_spec in measurement_results: - result = measurement_results[measurement_spec] - print '%s %s' % (measurement_spec, result) + for measurement in measurements: + if measurement['spec'] in measurement_results: + result = measurement_results[measurement['spec']] + print '%10.4f %s' % (result, measurement['name']) if chart_data_recorder: chart_name = benchmark_name + '__' + variant_name chart_data_recorder.record_scalar( perf_dashboard.normalize_label(chart_name), - perf_dashboard.normalize_label(measurement_spec), + perf_dashboard.normalize_label(measurement['name']), 'ms', result) else: - print '%s ?' % measurement_spec + print '? %s' % measurement['name'] some_measurements_failed = True if not benchmark_succeeded or some_measurements_failed: