| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2012 The Chromium Authors. All rights reserved. | 2 # Copyright 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 import logging | 5 import logging |
| 6 import sys | 6 import sys |
| 7 import time | 7 import time |
| 8 | 8 |
| 9 from telemetry import benchmark | 9 from telemetry import benchmark |
| 10 from telemetry.core import browser_options | 10 from telemetry.core import browser_options |
| 11 from telemetry.core import discover | 11 from telemetry.core import discover |
| 12 from telemetry.core import wpr_modes | 12 from telemetry.core import wpr_modes |
| 13 from telemetry.page import page_measurement | 13 from telemetry.page import page_measurement |
| 14 from telemetry.page import page_runner | 14 from telemetry.page import page_runner |
| 15 from telemetry.page import page_set | 15 from telemetry.page import page_set |
| 16 from telemetry.page import page_test | 16 from telemetry.page import page_test |
| 17 from telemetry.page import profile_creator | 17 from telemetry.page import profile_creator |
| 18 from telemetry.page import test_expectations | 18 from telemetry.page import test_expectations |
| 19 from telemetry.results import page_measurement_results | 19 from telemetry.results import page_measurement_results |
| 20 from telemetry.results import results_options |
| 20 | 21 |
| 21 | 22 |
| 22 class RecorderPageTest(page_test.PageTest): # pylint: disable=W0223 | 23 class RecorderPageTest(page_test.PageTest): # pylint: disable=W0223 |
| 23 def __init__(self, action_names): | 24 def __init__(self, action_names): |
| 24 super(RecorderPageTest, self).__init__() | 25 super(RecorderPageTest, self).__init__() |
| 25 self._action_names = action_names | 26 self._action_names = action_names |
| 26 self.page_test = None | 27 self.page_test = None |
| 27 | 28 |
| 28 def CanRunForPage(self, page): | 29 def CanRunForPage(self, page): |
| 29 return page.url.startswith('http') | 30 return page.url.startswith('http') |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 106 | 107 |
| 107 def _MaybeGetInstanceOfClass(target, base_dir, cls): | 108 def _MaybeGetInstanceOfClass(target, base_dir, cls): |
| 108 if isinstance(target, cls): | 109 if isinstance(target, cls): |
| 109 return target | 110 return target |
| 110 classes = discover.DiscoverClasses(base_dir, base_dir, cls, | 111 classes = discover.DiscoverClasses(base_dir, base_dir, cls, |
| 111 index_by_class_name=True) | 112 index_by_class_name=True) |
| 112 return classes[target]() if target in classes else None | 113 return classes[target]() if target in classes else None |
| 113 | 114 |
| 114 | 115 |
| 115 class WprRecorder(object): | 116 class WprRecorder(object): |
| 116 | |
| 117 def __init__(self, base_dir, target, args=None): | 117 def __init__(self, base_dir, target, args=None): |
| 118 action_names_to_run = FindAllActionNames(base_dir) | 118 action_names_to_run = FindAllActionNames(base_dir) |
| 119 self._record_page_test = RecorderPageTest(action_names_to_run) | 119 self._record_page_test = RecorderPageTest(action_names_to_run) |
| 120 self._options = self._CreateOptions() | 120 self._options = self._CreateOptions() |
| 121 | 121 |
| 122 self._benchmark = _MaybeGetInstanceOfClass(target, base_dir, | 122 self._benchmark = _MaybeGetInstanceOfClass(target, base_dir, |
| 123 benchmark.Benchmark) | 123 benchmark.Benchmark) |
| 124 if self._benchmark is not None: | 124 if self._benchmark is not None: |
| 125 self._record_page_test.page_test = self._benchmark.test() | 125 self._record_page_test.page_test = self._benchmark.test() |
| 126 self._parser = self._options.CreateParser(usage='%prog <PageSet|Benchmark>') | 126 self._parser = self._options.CreateParser(usage='%prog <PageSet|Benchmark>') |
| 127 self._AddCommandLineArgs() | 127 self._AddCommandLineArgs() |
| 128 self._ParseArgs(args) | 128 self._ParseArgs(args) |
| 129 self._ProcessCommandLineArgs() | 129 self._ProcessCommandLineArgs() |
| 130 self._page_set = self._GetPageSet(base_dir, target) | 130 self._page_set = self._GetPageSet(base_dir, target) |
| 131 | 131 |
| 132 @property | 132 @property |
| 133 def options(self): | 133 def options(self): |
| 134 return self._options | 134 return self._options |
| 135 | 135 |
| 136 def _CreateOptions(self): | 136 def _CreateOptions(self): |
| 137 options = browser_options.BrowserFinderOptions() | 137 options = browser_options.BrowserFinderOptions() |
| 138 options.browser_options.wpr_mode = wpr_modes.WPR_RECORD | 138 options.browser_options.wpr_mode = wpr_modes.WPR_RECORD |
| 139 options.browser_options.no_proxy_server = True | 139 options.browser_options.no_proxy_server = True |
| 140 return options | 140 return options |
| 141 | 141 |
| 142 def CreateResults(self): |
| 143 if self._benchmark is not None: |
| 144 benchmark_metadata = self._benchmark.GetMetadata() |
| 145 else: |
| 146 benchmark_metadata = benchmark.BenchmarkMetadata('record_wpr') |
| 147 |
| 148 return results_options.CreateResults(benchmark_metadata, self._options) |
| 149 |
| 142 def _AddCommandLineArgs(self): | 150 def _AddCommandLineArgs(self): |
| 143 page_runner.AddCommandLineArgs(self._parser) | 151 page_runner.AddCommandLineArgs(self._parser) |
| 144 if self._benchmark is not None: | 152 if self._benchmark is not None: |
| 145 self._benchmark.AddCommandLineArgs(self._parser) | 153 self._benchmark.AddCommandLineArgs(self._parser) |
| 146 self._benchmark.SetArgumentDefaults(self._parser) | 154 self._benchmark.SetArgumentDefaults(self._parser) |
| 147 | 155 |
| 148 def _ParseArgs(self, args=None): | 156 def _ParseArgs(self, args=None): |
| 149 args_to_parse = sys.argv[1:] if args is None else args | 157 args_to_parse = sys.argv[1:] if args is None else args |
| 150 self._parser.parse_args(args_to_parse) | 158 self._parser.parse_args(args_to_parse) |
| 151 | 159 |
| 152 def _ProcessCommandLineArgs(self): | 160 def _ProcessCommandLineArgs(self): |
| 153 page_runner.ProcessCommandLineArgs(self._parser, self._options) | 161 page_runner.ProcessCommandLineArgs(self._parser, self._options) |
| 154 if self._benchmark is not None: | 162 if self._benchmark is not None: |
| 155 self._benchmark.ProcessCommandLineArgs(self._parser, self._options) | 163 self._benchmark.ProcessCommandLineArgs(self._parser, self._options) |
| 156 | 164 |
| 157 def _GetPageSet(self, base_dir, target): | 165 def _GetPageSet(self, base_dir, target): |
| 158 if self._benchmark is not None: | 166 if self._benchmark is not None: |
| 159 return self._benchmark.CreatePageSet(self._options) | 167 return self._benchmark.CreatePageSet(self._options) |
| 160 ps = _MaybeGetInstanceOfClass(target, base_dir, page_set.PageSet) | 168 ps = _MaybeGetInstanceOfClass(target, base_dir, page_set.PageSet) |
| 161 if ps is None: | 169 if ps is None: |
| 162 self._parser.print_usage() | 170 self._parser.print_usage() |
| 163 sys.exit(1) | 171 sys.exit(1) |
| 164 return ps | 172 return ps |
| 165 | 173 |
| 166 def Record(self): | 174 def Record(self, results): |
| 167 self._page_set.wpr_archive_info.AddNewTemporaryRecording() | 175 self._page_set.wpr_archive_info.AddNewTemporaryRecording() |
| 168 self._record_page_test.CustomizeBrowserOptions(self._options) | 176 self._record_page_test.CustomizeBrowserOptions(self._options) |
| 169 return page_runner.Run(self._record_page_test, self._page_set, | 177 page_runner.Run(self._record_page_test, self._page_set, |
| 170 test_expectations.TestExpectations(), self._options) | 178 test_expectations.TestExpectations(), self._options, results) |
| 171 | 179 |
| 172 def HandleResults(self, results): | 180 def HandleResults(self, results): |
| 173 if results.failures or results.skipped_values: | 181 if results.failures or results.skipped_values: |
| 174 logging.warning('Some pages failed and/or were skipped. The recording ' | 182 logging.warning('Some pages failed and/or were skipped. The recording ' |
| 175 'has not been updated for these pages.') | 183 'has not been updated for these pages.') |
| 176 results.PrintSummary() | 184 results.PrintSummary() |
| 177 self._page_set.wpr_archive_info.AddRecordedPages( | 185 self._page_set.wpr_archive_info.AddRecordedPages( |
| 178 results.pages_that_succeeded) | 186 results.pages_that_succeeded) |
| 179 | 187 |
| 180 | 188 |
| 181 def Main(base_dir): | 189 def Main(base_dir): |
| 182 quick_args = [a for a in sys.argv[1:] if not a.startswith('-')] | 190 quick_args = [a for a in sys.argv[1:] if not a.startswith('-')] |
| 183 if len(quick_args) != 1: | 191 if len(quick_args) != 1: |
| 184 print >> sys.stderr, 'Usage: record_wpr <PageSet|Benchmark>\n' | 192 print >> sys.stderr, 'Usage: record_wpr <PageSet|Benchmark>\n' |
| 185 sys.exit(1) | 193 sys.exit(1) |
| 186 target = quick_args.pop() | 194 target = quick_args.pop() |
| 187 wpr_recorder = WprRecorder(base_dir, target) | 195 wpr_recorder = WprRecorder(base_dir, target) |
| 188 results = wpr_recorder.Record() | 196 results = wpr_recorder.CreateResults() |
| 197 wpr_recorder.Record(results) |
| 189 wpr_recorder.HandleResults(results) | 198 wpr_recorder.HandleResults(results) |
| 190 return min(255, len(results.failures)) | 199 return min(255, len(results.failures)) |
| OLD | NEW |