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

Unified Diff: mojo/devtools/common/mojo_benchmark

Issue 1435523002: Refactor mojo_benchmark. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/devtools/common/devtoolslib/benchmark_unittest.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/devtools/common/mojo_benchmark
diff --git a/mojo/devtools/common/mojo_benchmark b/mojo/devtools/common/mojo_benchmark
index 6ade1b14f17a7ba7b4fbe45b3a7ee743c43a2acd..b6c17aeb2eaad32722256726c3044f9c2522df99 100755
--- a/mojo/devtools/common/mojo_benchmark
+++ b/mojo/devtools/common/mojo_benchmark
@@ -7,14 +7,13 @@
import argparse
import logging
-import os.path
-import re
import sys
import time
+from devtoolslib import benchmark
+from devtoolslib import perf_dashboard
from devtoolslib import shell_arguments
from devtoolslib import shell_config
-from devtoolslib import perf_dashboard
_DESCRIPTION = """Runner for Mojo application benchmarks.
@@ -26,7 +25,6 @@ https://github.com/domokit/devtools/blob/master/docs/mojo_benchmark.md .
_logger = logging.getLogger()
-_BENCHMARK_APP = 'https://core.mojoapps.io/benchmark.mojo'
_CACHE_SERVICE_URL = 'mojo:url_response_disk_cache'
_NETWORK_SERVICE_URL = 'mojo:network_service'
@@ -35,21 +33,6 @@ _COLD_START_SHELL_ARGS = [
'--args-for=%s %s' % (_NETWORK_SERVICE_URL, '--clear'),
]
-# Additional time in seconds allocated per shell run to accommodate start-up.
-# The shell should terminate before hitting this time out, it is an error if it
-# doesn't.
-_EXTRA_TIMEOUT = 20
-
-_MEASUREMENT_RESULT_FORMAT = r"""
-^ # Beginning of the line.
-measurement: # Hard-coded tag.
-\s+(\S+) # Match measurement spec.
-\s+(\S+) # Match measurement result.
-$ # End of the line.
-"""
-
-_MEASUREMENT_REGEX = re.compile(_MEASUREMENT_RESULT_FORMAT, re.VERBOSE)
-
def _generate_benchmark_variants(benchmark_spec):
"""Generates benchmark specifications for individual variants of the given
@@ -76,72 +59,6 @@ def _generate_benchmark_variants(benchmark_spec):
return variants
-def _run_benchmark(shell, shell_args, app, duration_seconds, measurements,
- verbose, android, output_file):
- """Runs the given benchmark by running `benchmark.mojo` in mojo shell with
- appropriate arguments and returns the produced output.
-
- Returns:
- A tuple of (succeeded, error_msg, output).
- """
- timeout = duration_seconds + _EXTRA_TIMEOUT
- benchmark_args = []
- benchmark_args.append('--app=' + app)
- benchmark_args.append('--duration=' + str(duration_seconds))
-
- device_output_file = None
- if output_file:
- if android:
- device_output_file = os.path.join(shell.get_tmp_dir_path(), output_file)
- benchmark_args.append('--trace-output=' + device_output_file)
- else:
- benchmark_args.append('--trace-output=' + output_file)
-
- for measurement in measurements:
- benchmark_args.append(measurement['spec'])
-
- shell_args = list(shell_args)
- shell_args.append(_BENCHMARK_APP)
- shell_args.append('--force-offline-by-default')
- shell_args.append('--args-for=%s %s' % (_BENCHMARK_APP,
- ' '.join(benchmark_args)))
-
- if verbose:
- print 'shell arguments: ' + str(shell_args)
- return_code, output, did_time_out = shell.run_and_get_output(
- shell_args, timeout=timeout)
-
- if did_time_out:
- return False, 'timed out', output
- if return_code:
- return False, 'return code: ' + str(return_code), output
-
- # Pull the trace file even if some measurements are missing, as it can be
- # useful in debugging.
- if device_output_file:
- shell.pull_file(device_output_file, output_file, remove_original=True)
-
- return True, None, output
-
-
-def _parse_measurement_results(output):
- """Parses the measurement results present in the benchmark output and returns
- the dictionary of correctly recognized and parsed results.
- """
- measurement_results = {}
- output_lines = [line.strip() for line in output.split('\n')]
- for line in output_lines:
- match = re.match(_MEASUREMENT_REGEX, line)
- if match:
- measurement_spec = match.group(1)
- measurement_result = match.group(2)
- try:
- measurement_results[measurement_spec] = float(measurement_result)
- except ValueError:
- pass
- return measurement_results
-
-
def main():
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
@@ -190,7 +107,7 @@ def main():
chart_data_recorder = perf_dashboard.ChartDataRecorder(
script_args.test_name)
- benchmark_succeeded, benchmark_error, output = _run_benchmark(
+ results = benchmark.run(
shell, shell_args, app, duration, measurements, script_args.verbose,
script_args.android, output_file)
@@ -198,13 +115,12 @@ def main():
some_measurements_failed = False
some_measurements_succeeded = False
- if benchmark_succeeded:
- measurement_results = _parse_measurement_results(output)
+ if results.succeeded:
# Iterate over the list of specs, not the dictionary, to detect missing
# results and preserve the required order.
for measurement in measurements:
- if measurement['spec'] in measurement_results:
- result = measurement_results[measurement['spec']]
+ if measurement['spec'] in results.measurements:
+ result = results.measurements[measurement['spec']]
print '%10.4f %s' % (result, measurement['name'])
if chart_data_recorder:
@@ -218,14 +134,14 @@ def main():
print '? %s' % measurement['name']
some_measurements_failed = True
- if not benchmark_succeeded or some_measurements_failed:
- if not benchmark_succeeded:
- print 'benchmark failed: ' + benchmark_error
+ if not results.succeeded or some_measurements_failed:
+ if not results.succeeded:
+ print 'benchmark failed: ' + results.error_str
if some_measurements_failed:
print 'some measurements failed'
print 'output: '
print '-' * 72
- print output
+ print results.output
print '-' * 72
exit_code = 1
« no previous file with comments | « mojo/devtools/common/devtoolslib/benchmark_unittest.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698