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

Side by Side Diff: tools/telemetry/telemetry/page/record_wpr.py

Issue 432543003: Add usage message with available page_sets and benchmarks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments 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 unified diff | Download patch
OLDNEW
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
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
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')
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698