| Index: tools/telemetry/telemetry/page/record_wpr.py
|
| diff --git a/tools/telemetry/telemetry/page/record_wpr.py b/tools/telemetry/telemetry/page/record_wpr.py
|
| index 3d21bcb77e90e0be8156821c9d8e1b2fc52cba47..cdd588230a24a410bf3f8eb413ce31375573cfd5 100644
|
| --- a/tools/telemetry/telemetry/page/record_wpr.py
|
| +++ b/tools/telemetry/telemetry/page/record_wpr.py
|
| @@ -103,27 +103,47 @@ def FindAllActionNames(base_dir):
|
| 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)
|
| - return classes[target]() if target in classes else None
|
| + matching_classes = discover.MatchName([cls], target, base_dir=base_dir)
|
| + class_instance = None
|
| + if len(matching_classes) == 1:
|
| + try:
|
| + class_instance = matching_classes[0]()
|
| + except TypeError:
|
| + logging.warn('Unable to initialize "%s" class which requires ' % target +
|
| + 'custom arguments.')
|
| + raise
|
| + return class_instance
|
|
|
|
|
| class WprRecorder(object):
|
|
|
| - def __init__(self, base_dir, target, args=None):
|
| + def __init__(self, base_dir, target, cmd, args=None):
|
| action_names_to_run = FindAllActionNames(base_dir)
|
| self._record_page_test = RecorderPageTest(action_names_to_run)
|
| self._options = self._CreateOptions()
|
| + self._page_set = None
|
| + self._benchmark = None
|
| +
|
| + if cmd == 'run' or cmd == 'run_pageset':
|
| + self._page_set = _MaybeGetInstanceOfClass(
|
| + target, base_dir, page_set.PageSet)
|
| + if self._page_set is None and (cmd == 'run' or cmd =='run_benchmark'):
|
| + self._benchmark = _MaybeGetInstanceOfClass(
|
| + target, base_dir, benchmark.Benchmark)
|
| + if self._page_set is None and self._benchmark is None:
|
| + print_usage()
|
| + sys.exit(1)
|
| + recording_type = 'page set' if self._benchmark is None else 'benchmark'
|
| + print 'Recording %s: %s' % (recording_type, target)
|
|
|
| - self._benchmark = _MaybeGetInstanceOfClass(target, base_dir,
|
| - benchmark.Benchmark)
|
| - if self._benchmark is not None:
|
| - self._record_page_test.page_test = self._benchmark.test()
|
| - self._parser = self._options.CreateParser(usage='%prog <PageSet|Benchmark>')
|
| + self._parser = self._options.CreateParser()
|
| self._AddCommandLineArgs()
|
| self._ParseArgs(args)
|
| self._ProcessCommandLineArgs()
|
| - self._page_set = self._GetPageSet(base_dir, target)
|
| +
|
| + if self._page_set is None:
|
| + self._record_page_test.page_test = self._benchmark.test()
|
| + self._page_set = self._benchmark.CreatePageSet(self._options)
|
|
|
| @property
|
| def options(self):
|
| @@ -162,15 +182,6 @@ class WprRecorder(object):
|
| if self._benchmark is not None:
|
| self._benchmark.ProcessCommandLineArgs(self._parser, self._options)
|
|
|
| - def _GetPageSet(self, base_dir, target):
|
| - if self._benchmark is not None:
|
| - return self._benchmark.CreatePageSet(self._options)
|
| - ps = _MaybeGetInstanceOfClass(target, base_dir, page_set.PageSet)
|
| - if ps is None:
|
| - self._parser.print_usage()
|
| - sys.exit(1)
|
| - return ps
|
| -
|
| def Record(self, results):
|
| self._page_set.wpr_archive_info.AddNewTemporaryRecording()
|
| self._record_page_test.CustomizeBrowserOptions(self._options)
|
| @@ -188,12 +199,39 @@ class WprRecorder(object):
|
|
|
| def Main(base_dir):
|
| quick_args = [a for a in sys.argv[1:] if not a.startswith('-')]
|
| - if len(quick_args) != 1:
|
| - print >> sys.stderr, 'Usage: record_wpr <PageSet|Benchmark>\n'
|
| - sys.exit(1)
|
| - target = quick_args.pop()
|
| - wpr_recorder = WprRecorder(base_dir, target)
|
| + if len(quick_args) == 1:
|
| + arg = quick_args.pop()
|
| + if (arg == 'list_pagesets'):
|
| + return discover.PrintAvailableClasses([page_set.PageSet])
|
| + if (arg == 'list_benchmarks'):
|
| + return discover.PrintAvailableClasses([benchmark.Benchmark])
|
| +
|
| + # Otherwise, assume no command is provided and default to 'run'
|
| + return run(base_dir, arg, 'run')
|
| + if len(quick_args) == 2:
|
| + cmd, target = quick_args
|
| + if (cmd == 'run' or cmd == 'run_benchmark' or cmd == 'run_pageset'):
|
| + return run(base_dir, target, cmd)
|
| + print_usage()
|
| + return 1
|
| +
|
| +
|
| +def run(base_dir, target, cmd):
|
| + wpr_recorder = WprRecorder(base_dir, target, cmd)
|
| results = wpr_recorder.CreateResults()
|
| wpr_recorder.Record(results)
|
| wpr_recorder.HandleResults(results)
|
| return min(255, len(results.failures))
|
| +
|
| +
|
| +def print_usage():
|
| + sys.stderr.write(
|
| + 'Usage: record_wpr [command] <PageSet|Benchmark>\n'
|
| + 'Available commands are:\n'
|
| + ' run <PageSet|Benchmark> Run a Page Set or Benchmark (default).\n'
|
| + ' In case of name conflicts, Page Sets\n'
|
| + ' will take precedence over Benchmarks.\n'
|
| + ' run_benchmark <Benchmark> Run a Benchmark\n'
|
| + ' run_pageset <PageSet> Run a Page Set\n'
|
| + ' list_pagesets Lists the available Page Sets\n'
|
| + ' list_benchmarks Lists the available Benchmarks\n\n')
|
|
|