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 |