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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/telemetry/telemetry/record_wpr.py
diff --git a/tools/telemetry/telemetry/record_wpr.py b/tools/telemetry/telemetry/record_wpr.py
index 6d0ecbf70181f96f125f1d43d0ef20e321f2b721..8ce19746f37e05e8a86ebd6576768d163205de6b 100644
--- a/tools/telemetry/telemetry/record_wpr.py
+++ b/tools/telemetry/telemetry/record_wpr.py
@@ -2,6 +2,7 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import argparse
import logging
import sys
@@ -16,7 +17,8 @@ from telemetry.page import page_test
from telemetry.page import test_expectations
from telemetry.results import results_options
-class RecorderPageTest(page_test.PageTest): # pylint: disable=W0223
+
+class RecorderPageTest(page_test.PageTest):
def __init__(self):
super(RecorderPageTest, self).__init__()
self.page_test = None
@@ -68,14 +70,43 @@ class RecorderPageTest(page_test.PageTest): # pylint: disable=W0223
super(RecorderPageTest, self).RunNavigateSteps(page, tab)
+def _GetSubclasses(base_dir, cls):
+ """ Return all subclasses of |cls| in |base_dir|.
+ Args:
+ cls: a class
+ Returns:
+
+ """
+ return discover.DiscoverClasses(base_dir, base_dir, cls,
+ index_by_class_name=True)
+
+
def _MaybeGetInstanceOfClass(target, base_dir, cls):
if isinstance(target, cls):
return target
- classes = discover.DiscoverClasses(base_dir, base_dir, cls,
- index_by_class_name=True)
+ classes = _GetSubclasses(base_dir, cls)
return classes[target]() if target in classes else None
+def _PrintAllBenchmarks(base_dir, output_stream):
+ # TODO: reuse the logic of finding supported benchmarks in benchmark_runner.py
+ # so this only prints out benchmarks that are supported by the recording
+ # platform.
+ classes = _GetSubclasses(base_dir, benchmark.Benchmark)
+ output_stream.write('Available benchmarks\' names:\n\n')
+ for k in classes:
+ output_stream.write('%s\n' % k)
+
+
+def _PrintAllUserStories(base_dir, output_stream):
+ output_stream.write('Available page sets\' names:\n\n')
+ # TODO: actually print all user stories once record_wpr support general
+ # user stories recording.
+ classes = _GetSubclasses(base_dir, page_set.PageSet)
+ for k in classes:
+ output_stream.write('%s\n' % k)
+
+
class WprRecorder(object):
def __init__(self, base_dir, target, args=None):
@@ -84,7 +115,7 @@ class WprRecorder(object):
self._benchmark = _MaybeGetInstanceOfClass(target, base_dir,
benchmark.Benchmark)
- self._parser = self._options.CreateParser(usage='%prog <PageSet|Benchmark>')
+ self._parser = self._options.CreateParser(usage='See %prog --help')
self._AddCommandLineArgs()
self._ParseArgs(args)
self._ProcessCommandLineArgs()
@@ -166,22 +197,43 @@ class WprRecorder(object):
upload_to_cloud_storage)
+# TODO(nednguyen): use benchmark.Environment instead of base_dir for discovering
+# benchmark & user story classes.
def Main(base_dir):
- quick_args = []
- upload_to_cloud_storage = False
-
- for a in sys.argv[1:]:
- if not a.startswith('-'):
- quick_args.append(a)
- elif a == '--upload':
- upload_to_cloud_storage = True
-
- if len(quick_args) != 1:
- print >> sys.stderr, 'Usage: record_wpr <PageSet|Benchmark> [--upload]\n'
- sys.exit(1)
- target = quick_args.pop()
- wpr_recorder = WprRecorder(base_dir, target)
+
+ parser = argparse.ArgumentParser(
+ usage='Record a benchmark or a user story (page set).')
+ parser.add_argument(
+ 'benchmark', type=str,
+ help=('benchmark name. This argument is optional. If both benchmark name '
+ 'and user story name are specified, this takes precedence as the '
+ 'target of the recording.'),
+ nargs='?')
+ parser.add_argument('--story', dest='story', type=str,
+ help='user story (page set) name')
+ parser.add_argument('--list-stories', dest='list_stories',
+ action='store_true', help='list all user story names.')
+ parser.add_argument('--list-benchmarks', dest='list_benchmarks',
+ action='store_true', help='list all benchmark names.')
+ parser.add_argument('--upload', action='store_true',
+ help='upload to cloud storage.')
+ args, extra_args = parser.parse_known_args()
+
+ if args.list_benchmarks:
+ _PrintAllBenchmarks(base_dir, sys.stderr)
+ elif args.list_stories:
+ _PrintAllUserStories(base_dir, sys.stderr)
+
+ target = args.benchmark or args.story
+
+ if not target:
+ return 0
+
+ # TODO(nednguyen): update WprRecorder so that it handles the difference
+ # between recording a benchmark vs recording a user story better based on
+ # the distinction between args.benchmark & args.story
+ wpr_recorder = WprRecorder(base_dir, target, extra_args)
results = wpr_recorder.CreateResults()
wpr_recorder.Record(results)
- wpr_recorder.HandleResults(results, upload_to_cloud_storage)
+ wpr_recorder.HandleResults(results, args.upload)
return min(255, len(results.failures))
« 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