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

Unified Diff: tools/telemetry/telemetry/results/results_options.py

Issue 574593002: Add support for multiple output formatters for telemetry results. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: move output_stream creation Created 6 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/results/results_options.py
diff --git a/tools/telemetry/telemetry/results/results_options.py b/tools/telemetry/telemetry/results/results_options.py
index f7501d282bc8585d6f2c339a18e387537ff27f79..368cd83ee46001c54a5f797bc879177619206928 100644
--- a/tools/telemetry/telemetry/results/results_options.py
+++ b/tools/telemetry/telemetry/results/results_options.py
@@ -25,13 +25,14 @@ def AddResultsOptions(parser):
group = optparse.OptionGroup(parser, 'Results options')
group.add_option('--chartjson', action='store_true',
help='Output Chart JSON. Ignores --output-format.')
- group.add_option('--output-format',
- default=_OUTPUT_FORMAT_CHOICES[0],
+ group.add_option('--output-format', action='append', dest='output_formats',
+ default=[_OUTPUT_FORMAT_CHOICES[0]],
choices=_OUTPUT_FORMAT_CHOICES,
help='Output format. Defaults to "%%default". '
'Can be %s.' % ', '.join(_OUTPUT_FORMAT_CHOICES))
group.add_option('-o', '--output',
dest='output_file',
+ default=None,
help='Redirects output to a file. Defaults to stdout.')
group.add_option('--output-trace-tag',
default='',
@@ -49,77 +50,86 @@ def AddResultsOptions(parser):
parser.add_option_group(group)
+def _GetOutputStream(output_format, output_file):
+ assert output_format in _OUTPUT_FORMAT_CHOICES, 'Must specify a valid format.'
+ assert output_format not in ('gtest', 'none'), (
+ 'Cannot set stream for \'gtest\' or \'none\' output formats.')
+
+ if output_file is None:
+ if output_format != 'html' and output_format != 'json':
+ return sys.stdout
+ output_file = os.path.join(util.GetBaseDir(), 'results.' + output_format)
+
+ output_file = os.path.expanduser(output_file)
+ open(output_file, 'a').close() # Create file if it doesn't exist.
+ return open(output_file, 'r+')
+
+
+def _GetProgressReporter(output_skipped_tests_summary, suppress_gtest_report):
+ if suppress_gtest_report:
+ return progress_reporter.ProgressReporter()
+
+ return gtest_progress_reporter.GTestProgressReporter(
+ sys.stdout, output_skipped_tests_summary=output_skipped_tests_summary)
+
+
def CreateResults(benchmark_metadata, options):
"""
Args:
options: Contains the options specified in AddResultsOptions.
"""
- # TODO(chrishenry): This logic prevents us from having multiple
- # OutputFormatters. We should have an output_file per OutputFormatter.
- # Maybe we should have --output-dir instead of --output-file?
- if options.output_format == 'html' and not options.output_file:
- options.output_file = os.path.join(util.GetBaseDir(), 'results.html')
- elif options.output_format == 'json' and not options.output_file:
- options.output_file = os.path.join(util.GetBaseDir(), 'results.json')
-
- if hasattr(options, 'output_file') and options.output_file:
- output_file = os.path.expanduser(options.output_file)
- open(output_file, 'a').close() # Create file if it doesn't exist.
- output_stream = open(output_file, 'r+')
- else:
- output_stream = sys.stdout
- if not hasattr(options, 'output_format'):
- options.output_format = _OUTPUT_FORMAT_CHOICES[0]
- if not hasattr(options, 'output_trace_tag'):
- options.output_trace_tag = ''
+ # TODO(chrishenry): It doesn't make sense to have a single output_file flag
+ # with multiple output formatters. We should explore other possible options:
+ # - Have an output_file per output formatter
+ # - Have --output-dir instead of --output-file
+ if len(options.output_formats) != 1 and options.output_file:
+ raise Exception('Cannot specify output_file flag with multiple output '
+ 'formats.')
output_formatters = []
- output_skipped_tests_summary = True
- reporter = None
- if options.output_format == 'none' or options.chartjson:
- pass
- elif options.output_format == 'csv':
- output_formatters.append(csv_output_formatter.CsvOutputFormatter(
- output_stream))
- elif options.output_format == 'buildbot':
- output_formatters.append(buildbot_output_formatter.BuildbotOutputFormatter(
- output_stream, trace_tag=options.output_trace_tag))
- elif options.output_format == 'gtest':
- # TODO(chrishenry): This is here to not change the output of
- # gtest. Let's try enabling skipped tests summary for gtest test
- # results too (in a separate patch), and see if we break anything.
- output_skipped_tests_summary = False
- elif options.output_format == 'html':
- # TODO(chrishenry): We show buildbot output so that users can grep
- # through the results easily without needing to open the html
- # file. Another option for this is to output the results directly
- # in gtest-style results (via some sort of progress reporter),
- # as we plan to enable gtest-style output for all output formatters.
- output_formatters.append(buildbot_output_formatter.BuildbotOutputFormatter(
- sys.stdout, trace_tag=options.output_trace_tag))
- output_formatters.append(html_output_formatter.HtmlOutputFormatter(
- output_stream, benchmark_metadata, options.reset_results,
- options.upload_results, options.browser_type,
- options.results_label, trace_tag=options.output_trace_tag))
- elif options.output_format == 'json':
- output_formatters.append(
- json_output_formatter.JsonOutputFormatter(output_stream,
- benchmark_metadata))
- elif options.output_format == 'chartjson':
- output_formatters.append(
- chart_json_output_formatter.ChartJsonOutputFormatter(
- output_stream,
- benchmark_metadata))
- else:
- # Should never be reached. The parser enforces the choices.
- raise Exception('Invalid --output-format "%s". Valid choices are: %s'
- % (options.output_format,
- ', '.join(_OUTPUT_FORMAT_CHOICES)))
-
- if options.suppress_gtest_report:
- reporter = progress_reporter.ProgressReporter()
- else:
- reporter = gtest_progress_reporter.GTestProgressReporter(
- sys.stdout, output_skipped_tests_summary=output_skipped_tests_summary)
+ for output_format in options.output_formats:
+ if output_format == 'none' or output_format == "gtest" or options.chartjson:
+ continue
+
+ output_stream = _GetOutputStream(output_format, options.output_file)
+ if output_format == 'csv':
+ output_formatters.append(csv_output_formatter.CsvOutputFormatter(
+ output_stream))
+ elif output_format == 'buildbot':
+ output_formatters.append(
+ buildbot_output_formatter.BuildbotOutputFormatter(
+ output_stream, trace_tag=options.output_trace_tag))
+ elif output_format == 'html':
+ # TODO(chrishenry): We show buildbot output so that users can grep
+ # through the results easily without needing to open the html
+ # file. Another option for this is to output the results directly
+ # in gtest-style results (via some sort of progress reporter),
+ # as we plan to enable gtest-style output for all output formatters.
+ output_formatters.append(
+ buildbot_output_formatter.BuildbotOutputFormatter(
+ sys.stdout, trace_tag=options.output_trace_tag))
+ output_formatters.append(html_output_formatter.HtmlOutputFormatter(
+ output_stream, benchmark_metadata, options.reset_results,
+ options.upload_results, options.browser_type,
+ options.results_label, trace_tag=options.output_trace_tag))
+ elif output_format == 'json':
+ output_formatters.append(json_output_formatter.JsonOutputFormatter(
+ output_stream, benchmark_metadata))
+ elif output_format == 'chartjson':
+ output_formatters.append(
+ chart_json_output_formatter.ChartJsonOutputFormatter(
+ output_stream, benchmark_metadata))
+ else:
+ # Should never be reached. The parser enforces the choices.
+ raise Exception('Invalid --output-format "%s". Valid choices are: %s'
+ % (output_format, ', '.join(_OUTPUT_FORMAT_CHOICES)))
+
+ # TODO(chrishenry): This is here to not change the output of
+ # gtest. Let's try enabling skipped tests summary for gtest test
+ # results too (in a separate patch), and see if we break anything.
+ output_skipped_tests_summary = 'gtest' in options.output_formats
+
+ reporter = _GetProgressReporter(output_skipped_tests_summary,
+ options.suppress_gtest_report)
return page_test_results.PageTestResults(
output_formatters=output_formatters, progress_reporter=reporter)
« no previous file with comments | « tools/telemetry/telemetry/page/record_wpr.py ('k') | tools/telemetry/telemetry/unittest/page_test_test_case.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698