Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / results / results_options.py
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
3 # found in the LICENSE file.
4
5 import optparse
6 import os
7 import sys
8
9 from telemetry.core import util
10 from telemetry.results import buildbot_output_formatter
11 from telemetry.results import csv_output_formatter
12 from telemetry.results import gtest_progress_reporter
13 from telemetry.results import html_output_formatter
14 from telemetry.results import json_output_formatter
15 from telemetry.results import page_test_results
16 from telemetry.results import progress_reporter
17
18 # Allowed output formats. The default is the first item in the list.
19 _OUTPUT_FORMAT_CHOICES = ('html', 'buildbot', 'block', 'csv', 'gtest',
20     'json', 'none')
21
22
23 def AddResultsOptions(parser):
24   group = optparse.OptionGroup(parser, 'Results options')
25   group.add_option('--output-format',
26                     default=_OUTPUT_FORMAT_CHOICES[0],
27                     choices=_OUTPUT_FORMAT_CHOICES,
28                     help='Output format. Defaults to "%%default". '
29                     'Can be %s.' % ', '.join(_OUTPUT_FORMAT_CHOICES))
30   group.add_option('-o', '--output',
31                     dest='output_file',
32                     help='Redirects output to a file. Defaults to stdout.')
33   group.add_option('--output-trace-tag',
34                     default='',
35                     help='Append a tag to the key of each result trace.')
36   group.add_option('--reset-results', action='store_true',
37                     help='Delete all stored results.')
38   group.add_option('--upload-results', action='store_true',
39                     help='Upload the results to cloud storage.')
40   group.add_option('--results-label',
41                     default=None,
42                     help='Optional label to use for the results of a run .')
43   group.add_option('--suppress_gtest_report',
44                    default=False,
45                    help='Whether to suppress GTest progress report.')
46   parser.add_option_group(group)
47
48
49 def CreateResults(metadata, options):
50   """
51   Args:
52     options: Contains the options specified in AddResultsOptions.
53   """
54   # TODO(chrishenry): This logic prevents us from having multiple
55   # OutputFormatters. We should have an output_file per OutputFormatter.
56   # Maybe we should have --output-dir instead of --output-file?
57   if options.output_format == 'html' and not options.output_file:
58     options.output_file = os.path.join(util.GetBaseDir(), 'results.html')
59   elif options.output_format == 'json' and not options.output_file:
60     options.output_file = os.path.join(util.GetBaseDir(), 'results.json')
61
62   if hasattr(options, 'output_file') and options.output_file:
63     output_file = os.path.expanduser(options.output_file)
64     open(output_file, 'a').close()  # Create file if it doesn't exist.
65     output_stream = open(output_file, 'r+')
66   else:
67     output_stream = sys.stdout
68   if not hasattr(options, 'output_format'):
69     options.output_format = _OUTPUT_FORMAT_CHOICES[0]
70   if not hasattr(options, 'output_trace_tag'):
71     options.output_trace_tag = ''
72
73   output_formatters = []
74   output_skipped_tests_summary = True
75   reporter = None
76   if options.output_format == 'none':
77     pass
78   elif options.output_format == 'csv':
79     output_formatters.append(csv_output_formatter.CsvOutputFormatter(
80         output_stream))
81   elif options.output_format == 'buildbot':
82     output_formatters.append(buildbot_output_formatter.BuildbotOutputFormatter(
83         output_stream, trace_tag=options.output_trace_tag))
84   elif options.output_format == 'gtest':
85     # TODO(chrishenry): This is here to not change the output of
86     # gtest. Let's try enabling skipped tests summary for gtest test
87     # results too (in a separate patch), and see if we break anything.
88     output_skipped_tests_summary = False
89   elif options.output_format == 'html':
90     # TODO(chrishenry): We show buildbot output so that users can grep
91     # through the results easily without needing to open the html
92     # file.  Another option for this is to output the results directly
93     # in gtest-style results (via some sort of progress reporter),
94     # as we plan to enable gtest-style output for all output formatters.
95     output_formatters.append(buildbot_output_formatter.BuildbotOutputFormatter(
96         sys.stdout, trace_tag=options.output_trace_tag))
97     output_formatters.append(html_output_formatter.HtmlOutputFormatter(
98         output_stream, metadata, options.reset_results,
99         options.upload_results, options.browser_type,
100         options.results_label, trace_tag=options.output_trace_tag))
101   elif options.output_format == 'json':
102     output_formatters.append(
103         json_output_formatter.JsonOutputFormatter(output_stream, metadata))
104   else:
105     # Should never be reached. The parser enforces the choices.
106     raise Exception('Invalid --output-format "%s". Valid choices are: %s'
107                     % (options.output_format,
108                        ', '.join(_OUTPUT_FORMAT_CHOICES)))
109
110   if options.suppress_gtest_report:
111     reporter = progress_reporter.ProgressReporter()
112   else:
113     reporter = gtest_progress_reporter.GTestProgressReporter(
114         sys.stdout, output_skipped_tests_summary=output_skipped_tests_summary)
115   return page_test_results.PageTestResults(
116       output_formatters=output_formatters, progress_reporter=reporter)