OLD | NEW |
1 # Copyright 2012 The Chromium Authors. All rights reserved. | 1 # Copyright 2012 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 logging | 5 import logging |
6 import sys | 6 import sys |
7 | 7 |
8 from telemetry import benchmark | 8 from telemetry import benchmark |
9 from telemetry.core import browser_options | 9 from telemetry.core import browser_options |
10 from telemetry.core import discover | 10 from telemetry.core import discover |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 if not issubclass(cls, profile_creator.ProfileCreator): | 96 if not issubclass(cls, profile_creator.ProfileCreator): |
97 action_name = cls().action_name_to_run | 97 action_name = cls().action_name_to_run |
98 if action_name: | 98 if action_name: |
99 action_names.add(action_name) | 99 action_names.add(action_name) |
100 return action_names | 100 return action_names |
101 | 101 |
102 | 102 |
103 def _MaybeGetInstanceOfClass(target, base_dir, cls): | 103 def _MaybeGetInstanceOfClass(target, base_dir, cls): |
104 if isinstance(target, cls): | 104 if isinstance(target, cls): |
105 return target | 105 return target |
106 classes = discover.DiscoverClasses(base_dir, base_dir, cls, | 106 matching_classes = discover.MatchName([cls], target, base_dir=base_dir) |
107 index_by_class_name=True) | 107 class_instance = None |
108 return classes[target]() if target in classes else None | 108 if len(matching_classes) == 1: |
| 109 try: |
| 110 class_instance = matching_classes[0]() |
| 111 except TypeError: |
| 112 logging.warn('Unable to initialize "%s" class which requires ' % target + |
| 113 'custom arguments.') |
| 114 raise |
| 115 return class_instance |
109 | 116 |
110 | 117 |
111 class WprRecorder(object): | 118 class WprRecorder(object): |
112 | 119 |
113 def __init__(self, base_dir, target, args=None): | 120 def __init__(self, base_dir, target, cmd, args=None): |
114 action_names_to_run = FindAllActionNames(base_dir) | 121 action_names_to_run = FindAllActionNames(base_dir) |
115 self._record_page_test = RecorderPageTest(action_names_to_run) | 122 self._record_page_test = RecorderPageTest(action_names_to_run) |
116 self._options = self._CreateOptions() | 123 self._options = self._CreateOptions() |
| 124 self._page_set = None |
| 125 self._benchmark = None |
117 | 126 |
118 self._benchmark = _MaybeGetInstanceOfClass(target, base_dir, | 127 if cmd == 'run' or cmd == 'run_pageset': |
119 benchmark.Benchmark) | 128 self._page_set = _MaybeGetInstanceOfClass( |
120 if self._benchmark is not None: | 129 target, base_dir, page_set.PageSet) |
121 self._record_page_test.page_test = self._benchmark.test() | 130 if self._page_set is None and (cmd == 'run' or cmd =='run_benchmark'): |
122 self._parser = self._options.CreateParser(usage='%prog <PageSet|Benchmark>') | 131 self._benchmark = _MaybeGetInstanceOfClass( |
| 132 target, base_dir, benchmark.Benchmark) |
| 133 if self._page_set is None and self._benchmark is None: |
| 134 print_usage() |
| 135 sys.exit(1) |
| 136 recording_type = 'page set' if self._benchmark is None else 'benchmark' |
| 137 print 'Recording %s: %s' % (recording_type, target) |
| 138 |
| 139 self._parser = self._options.CreateParser() |
123 self._AddCommandLineArgs() | 140 self._AddCommandLineArgs() |
124 self._ParseArgs(args) | 141 self._ParseArgs(args) |
125 self._ProcessCommandLineArgs() | 142 self._ProcessCommandLineArgs() |
126 self._page_set = self._GetPageSet(base_dir, target) | 143 |
| 144 if self._page_set is None: |
| 145 self._record_page_test.page_test = self._benchmark.test() |
| 146 self._page_set = self._benchmark.CreatePageSet(self._options) |
127 | 147 |
128 @property | 148 @property |
129 def options(self): | 149 def options(self): |
130 return self._options | 150 return self._options |
131 | 151 |
132 def _CreateOptions(self): | 152 def _CreateOptions(self): |
133 options = browser_options.BrowserFinderOptions() | 153 options = browser_options.BrowserFinderOptions() |
134 options.browser_options.wpr_mode = wpr_modes.WPR_RECORD | 154 options.browser_options.wpr_mode = wpr_modes.WPR_RECORD |
135 options.browser_options.no_proxy_server = True | 155 options.browser_options.no_proxy_server = True |
136 return options | 156 return options |
(...skipping 18 matching lines...) Expand all Loading... |
155 | 175 |
156 def _ParseArgs(self, args=None): | 176 def _ParseArgs(self, args=None): |
157 args_to_parse = sys.argv[1:] if args is None else args | 177 args_to_parse = sys.argv[1:] if args is None else args |
158 self._parser.parse_args(args_to_parse) | 178 self._parser.parse_args(args_to_parse) |
159 | 179 |
160 def _ProcessCommandLineArgs(self): | 180 def _ProcessCommandLineArgs(self): |
161 page_runner.ProcessCommandLineArgs(self._parser, self._options) | 181 page_runner.ProcessCommandLineArgs(self._parser, self._options) |
162 if self._benchmark is not None: | 182 if self._benchmark is not None: |
163 self._benchmark.ProcessCommandLineArgs(self._parser, self._options) | 183 self._benchmark.ProcessCommandLineArgs(self._parser, self._options) |
164 | 184 |
165 def _GetPageSet(self, base_dir, target): | |
166 if self._benchmark is not None: | |
167 return self._benchmark.CreatePageSet(self._options) | |
168 ps = _MaybeGetInstanceOfClass(target, base_dir, page_set.PageSet) | |
169 if ps is None: | |
170 self._parser.print_usage() | |
171 sys.exit(1) | |
172 return ps | |
173 | |
174 def Record(self, results): | 185 def Record(self, results): |
175 self._page_set.wpr_archive_info.AddNewTemporaryRecording() | 186 self._page_set.wpr_archive_info.AddNewTemporaryRecording() |
176 self._record_page_test.CustomizeBrowserOptions(self._options) | 187 self._record_page_test.CustomizeBrowserOptions(self._options) |
177 page_runner.Run(self._record_page_test, self._page_set, | 188 page_runner.Run(self._record_page_test, self._page_set, |
178 test_expectations.TestExpectations(), self._options, results) | 189 test_expectations.TestExpectations(), self._options, results) |
179 | 190 |
180 def HandleResults(self, results): | 191 def HandleResults(self, results): |
181 if results.failures or results.skipped_values: | 192 if results.failures or results.skipped_values: |
182 logging.warning('Some pages failed and/or were skipped. The recording ' | 193 logging.warning('Some pages failed and/or were skipped. The recording ' |
183 'has not been updated for these pages.') | 194 'has not been updated for these pages.') |
184 results.PrintSummary() | 195 results.PrintSummary() |
185 self._page_set.wpr_archive_info.AddRecordedPages( | 196 self._page_set.wpr_archive_info.AddRecordedPages( |
186 results.pages_that_succeeded) | 197 results.pages_that_succeeded) |
187 | 198 |
188 | 199 |
189 def Main(base_dir): | 200 def Main(base_dir): |
190 quick_args = [a for a in sys.argv[1:] if not a.startswith('-')] | 201 quick_args = [a for a in sys.argv[1:] if not a.startswith('-')] |
191 if len(quick_args) != 1: | 202 if len(quick_args) == 1: |
192 print >> sys.stderr, 'Usage: record_wpr <PageSet|Benchmark>\n' | 203 arg = quick_args.pop() |
193 sys.exit(1) | 204 if (arg == 'list_pagesets'): |
194 target = quick_args.pop() | 205 return discover.PrintAvailableClasses([page_set.PageSet]) |
195 wpr_recorder = WprRecorder(base_dir, target) | 206 if (arg == 'list_benchmarks'): |
| 207 return discover.PrintAvailableClasses([benchmark.Benchmark]) |
| 208 |
| 209 # Otherwise, assume no command is provided and default to 'run' |
| 210 return run(base_dir, arg, 'run') |
| 211 if len(quick_args) == 2: |
| 212 cmd, target = quick_args |
| 213 if (cmd == 'run' or cmd == 'run_benchmark' or cmd == 'run_pageset'): |
| 214 return run(base_dir, target, cmd) |
| 215 print_usage() |
| 216 return 1 |
| 217 |
| 218 |
| 219 def run(base_dir, target, cmd): |
| 220 wpr_recorder = WprRecorder(base_dir, target, cmd) |
196 results = wpr_recorder.CreateResults() | 221 results = wpr_recorder.CreateResults() |
197 wpr_recorder.Record(results) | 222 wpr_recorder.Record(results) |
198 wpr_recorder.HandleResults(results) | 223 wpr_recorder.HandleResults(results) |
199 return min(255, len(results.failures)) | 224 return min(255, len(results.failures)) |
| 225 |
| 226 |
| 227 def print_usage(): |
| 228 sys.stderr.write( |
| 229 'Usage: record_wpr [command] <PageSet|Benchmark>\n' |
| 230 'Available commands are:\n' |
| 231 ' run <PageSet|Benchmark> Run a Page Set or Benchmark (default).\n' |
| 232 ' In case of name conflicts, Page Sets\n' |
| 233 ' will take precedence over Benchmarks.\n' |
| 234 ' run_benchmark <Benchmark> Run a Benchmark\n' |
| 235 ' run_pageset <PageSet> Run a Page Set\n' |
| 236 ' list_pagesets Lists the available Page Sets\n' |
| 237 ' list_benchmarks Lists the available Benchmarks\n\n') |
OLD | NEW |