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

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

Issue 1147533004: [Telemetry] Updates record_wpr to use argparse. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@MoveRecorWpr
Patch Set: user-story -> story Created 5 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 argparse
5 import logging 6 import logging
6 import sys 7 import sys
7 8
8 from telemetry import benchmark 9 from telemetry import benchmark
9 from telemetry.core import browser_options 10 from telemetry.core import browser_options
10 from telemetry.core import discover 11 from telemetry.core import discover
11 from telemetry.core import util 12 from telemetry.core import util
12 from telemetry.core import wpr_modes 13 from telemetry.core import wpr_modes
13 from telemetry.internal import story_runner 14 from telemetry.internal import story_runner
14 from telemetry.page import page_set 15 from telemetry.page import page_set
15 from telemetry.page import page_test 16 from telemetry.page import page_test
16 from telemetry.page import test_expectations 17 from telemetry.page import test_expectations
17 from telemetry.results import results_options 18 from telemetry.results import results_options
18 19
19 class RecorderPageTest(page_test.PageTest): # pylint: disable=W0223 20
21 class RecorderPageTest(page_test.PageTest):
20 def __init__(self): 22 def __init__(self):
21 super(RecorderPageTest, self).__init__() 23 super(RecorderPageTest, self).__init__()
22 self.page_test = None 24 self.page_test = None
23 25
24 def CustomizeBrowserOptions(self, options): 26 def CustomizeBrowserOptions(self, options):
25 if self.page_test: 27 if self.page_test:
26 self.page_test.CustomizeBrowserOptions(options) 28 self.page_test.CustomizeBrowserOptions(options)
27 29
28 def WillStartBrowser(self, browser): 30 def WillStartBrowser(self, browser):
29 if self.page_test: 31 if self.page_test:
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 63
62 super(RecorderPageTest, self).RunPage(page, tab, results) 64 super(RecorderPageTest, self).RunPage(page, tab, results)
63 65
64 def RunNavigateSteps(self, page, tab): 66 def RunNavigateSteps(self, page, tab):
65 if self.page_test: 67 if self.page_test:
66 self.page_test.RunNavigateSteps(page, tab) 68 self.page_test.RunNavigateSteps(page, tab)
67 else: 69 else:
68 super(RecorderPageTest, self).RunNavigateSteps(page, tab) 70 super(RecorderPageTest, self).RunNavigateSteps(page, tab)
69 71
70 72
73 def _GetSubclasses(base_dir, cls):
74 """ Return all subclasses of |cls| in |base_dir|.
75 Args:
76 cls: a class
77 Returns:
78
79 """
80 return discover.DiscoverClasses(base_dir, base_dir, cls,
81 index_by_class_name=True)
82
83
71 def _MaybeGetInstanceOfClass(target, base_dir, cls): 84 def _MaybeGetInstanceOfClass(target, base_dir, cls):
72 if isinstance(target, cls): 85 if isinstance(target, cls):
73 return target 86 return target
74 classes = discover.DiscoverClasses(base_dir, base_dir, cls, 87 classes = _GetSubclasses(base_dir, cls)
75 index_by_class_name=True)
76 return classes[target]() if target in classes else None 88 return classes[target]() if target in classes else None
77 89
78 90
91 def _PrintAllBenchmarks(base_dir, output_stream):
92 # TODO: reuse the logic of finding supported benchmarks in benchmark_runner.py
93 # so this only prints out benchmarks that are supported by the recording
94 # platform.
95 classes = _GetSubclasses(base_dir, benchmark.Benchmark)
96 output_stream.write('Available benchmarks\' names:\n\n')
97 for k in classes:
98 output_stream.write('%s\n' % k)
99
100
101 def _PrintAllUserStories(base_dir, output_stream):
102 output_stream.write('Available page sets\' names:\n\n')
103 # TODO: actually print all user stories once record_wpr support general
104 # user stories recording.
105 classes = _GetSubclasses(base_dir, page_set.PageSet)
106 for k in classes:
107 output_stream.write('%s\n' % k)
108
109
79 class WprRecorder(object): 110 class WprRecorder(object):
80 111
81 def __init__(self, base_dir, target, args=None): 112 def __init__(self, base_dir, target, args=None):
82 self._record_page_test = RecorderPageTest() 113 self._record_page_test = RecorderPageTest()
83 self._options = self._CreateOptions() 114 self._options = self._CreateOptions()
84 115
85 self._benchmark = _MaybeGetInstanceOfClass(target, base_dir, 116 self._benchmark = _MaybeGetInstanceOfClass(target, base_dir,
86 benchmark.Benchmark) 117 benchmark.Benchmark)
87 self._parser = self._options.CreateParser(usage='%prog <PageSet|Benchmark>') 118 self._parser = self._options.CreateParser(usage='See %prog --help')
88 self._AddCommandLineArgs() 119 self._AddCommandLineArgs()
89 self._ParseArgs(args) 120 self._ParseArgs(args)
90 self._ProcessCommandLineArgs() 121 self._ProcessCommandLineArgs()
91 if self._benchmark is not None: 122 if self._benchmark is not None:
92 # This must be called after the command line args are added. 123 # This must be called after the command line args are added.
93 self._record_page_test.page_test = self._benchmark.CreatePageTest( 124 self._record_page_test.page_test = self._benchmark.CreatePageTest(
94 self.options) 125 self.options)
95 126
96 if self._options.page_set_base_dir: 127 if self._options.page_set_base_dir:
97 page_set_base_dir = self._options.page_set_base_dir 128 page_set_base_dir = self._options.page_set_base_dir
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 def HandleResults(self, results, upload_to_cloud_storage): 190 def HandleResults(self, results, upload_to_cloud_storage):
160 if results.failures or results.skipped_values: 191 if results.failures or results.skipped_values:
161 logging.warning('Some pages failed and/or were skipped. The recording ' 192 logging.warning('Some pages failed and/or were skipped. The recording '
162 'has not been updated for these pages.') 193 'has not been updated for these pages.')
163 results.PrintSummary() 194 results.PrintSummary()
164 self._page_set.wpr_archive_info.AddRecordedUserStories( 195 self._page_set.wpr_archive_info.AddRecordedUserStories(
165 results.pages_that_succeeded, 196 results.pages_that_succeeded,
166 upload_to_cloud_storage) 197 upload_to_cloud_storage)
167 198
168 199
200 # TODO(nednguyen): use benchmark.Environment instead of base_dir for discovering
201 # benchmark & user story classes.
169 def Main(base_dir): 202 def Main(base_dir):
170 quick_args = []
171 upload_to_cloud_storage = False
172 203
173 for a in sys.argv[1:]: 204 parser = argparse.ArgumentParser(
174 if not a.startswith('-'): 205 usage='Record a benchmark or a user story (page set).')
175 quick_args.append(a) 206 parser.add_argument(
176 elif a == '--upload': 207 'benchmark', type=str,
177 upload_to_cloud_storage = True 208 help=('benchmark name. This argument is optional. If both benchmark name '
209 'and user story name are specified, this takes precedence as the '
210 'target of the recording.'),
211 nargs='?')
212 parser.add_argument('--story', dest='story', type=str,
213 help='user story (page set) name')
214 parser.add_argument('--list-stories', dest='list_stories',
215 action='store_true', help='list all user story names.')
216 parser.add_argument('--list-benchmarks', dest='list_benchmarks',
217 action='store_true', help='list all benchmark names.')
218 parser.add_argument('--upload', action='store_true',
219 help='upload to cloud storage.')
220 args, extra_args = parser.parse_known_args()
178 221
179 if len(quick_args) != 1: 222 if args.list_benchmarks:
180 print >> sys.stderr, 'Usage: record_wpr <PageSet|Benchmark> [--upload]\n' 223 _PrintAllBenchmarks(base_dir, sys.stderr)
181 sys.exit(1) 224 elif args.list_stories:
182 target = quick_args.pop() 225 _PrintAllUserStories(base_dir, sys.stderr)
183 wpr_recorder = WprRecorder(base_dir, target) 226
227 target = args.benchmark or args.story
228
229 if not target:
230 return 0
231
232 # TODO(nednguyen): update WprRecorder so that it handles the difference
233 # between recording a benchmark vs recording a user story better based on
234 # the distinction between args.benchmark & args.story
235 wpr_recorder = WprRecorder(base_dir, target, extra_args)
184 results = wpr_recorder.CreateResults() 236 results = wpr_recorder.CreateResults()
185 wpr_recorder.Record(results) 237 wpr_recorder.Record(results)
186 wpr_recorder.HandleResults(results, upload_to_cloud_storage) 238 wpr_recorder.HandleResults(results, args.upload)
187 return min(255, len(results.failures)) 239 return min(255, len(results.failures))
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698