| OLD | NEW |
| 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 argparse |
| 6 import logging | 6 import logging |
| 7 import sys | 7 import sys |
| 8 | 8 |
| 9 from telemetry import benchmark | 9 from telemetry import benchmark |
| 10 from telemetry import story | 10 from telemetry import story |
| 11 from telemetry.core import discover | |
| 12 from telemetry.core import util | 11 from telemetry.core import util |
| 13 from telemetry.internal.browser import browser_options | 12 from telemetry.internal.browser import browser_options |
| 14 from telemetry.internal.results import results_options | 13 from telemetry.internal.results import results_options |
| 15 from telemetry.internal import story_runner | 14 from telemetry.internal import story_runner |
| 16 from telemetry.page import page_test | 15 from telemetry.page import page_test |
| 16 from telemetry.util import classes_util |
| 17 from telemetry.util import wpr_modes | 17 from telemetry.util import wpr_modes |
| 18 | 18 |
| 19 | 19 |
| 20 class RecorderPageTest(page_test.PageTest): | 20 class RecorderPageTest(page_test.PageTest): |
| 21 def __init__(self): | 21 def __init__(self): |
| 22 super(RecorderPageTest, self).__init__() | 22 super(RecorderPageTest, self).__init__() |
| 23 self.page_test = None | 23 self.page_test = None |
| 24 | 24 |
| 25 def CustomizeBrowserOptions(self, options): | 25 def CustomizeBrowserOptions(self, options): |
| 26 if self.page_test: | 26 if self.page_test: |
| (...skipping 26 matching lines...) Expand all Loading... |
| 53 def ValidateAndMeasurePage(self, page, tab, results): | 53 def ValidateAndMeasurePage(self, page, tab, results): |
| 54 if self.page_test: | 54 if self.page_test: |
| 55 self.page_test.ValidateAndMeasurePage(page, tab, results) | 55 self.page_test.ValidateAndMeasurePage(page, tab, results) |
| 56 | 56 |
| 57 def RunNavigateSteps(self, page, tab): | 57 def RunNavigateSteps(self, page, tab): |
| 58 if self.page_test: | 58 if self.page_test: |
| 59 self.page_test.RunNavigateSteps(page, tab) | 59 self.page_test.RunNavigateSteps(page, tab) |
| 60 else: | 60 else: |
| 61 super(RecorderPageTest, self).RunNavigateSteps(page, tab) | 61 super(RecorderPageTest, self).RunNavigateSteps(page, tab) |
| 62 | 62 |
| 63 | |
| 64 def _GetSubclasses(base_dir, cls): | |
| 65 """ Return all subclasses of |cls| in |base_dir|. | |
| 66 Args: | |
| 67 cls: a class | |
| 68 Returns: | |
| 69 | |
| 70 """ | |
| 71 return discover.DiscoverClasses(base_dir, base_dir, cls, | |
| 72 index_by_class_name=True) | |
| 73 | |
| 74 | |
| 75 def _MaybeGetInstanceOfClass(target, base_dir, cls): | 63 def _MaybeGetInstanceOfClass(target, base_dir, cls): |
| 76 if isinstance(target, cls): | 64 if isinstance(target, cls): |
| 77 return target | 65 return target |
| 78 classes = _GetSubclasses(base_dir, cls) | 66 return classes_util.MaybeGetInstanceOfClass(target, base_dir, base_dir, cls) |
| 79 return classes[target]() if target in classes else None | |
| 80 | |
| 81 | 67 |
| 82 def _PrintAllBenchmarks(base_dir, output_stream): | 68 def _PrintAllBenchmarks(base_dir, output_stream): |
| 83 # TODO: reuse the logic of finding supported benchmarks in benchmark_runner.py | 69 # TODO: reuse the logic of finding supported benchmarks in benchmark_runner.py |
| 84 # so this only prints out benchmarks that are supported by the recording | 70 # so this only prints out benchmarks that are supported by the recording |
| 85 # platform. | 71 # platform. |
| 86 classes = _GetSubclasses(base_dir, benchmark.Benchmark) | 72 classes = classes_util.DiscoverClassesByClassName( |
| 73 base_dir, base_dir, benchmark.Benchmark) |
| 87 output_stream.write('Available benchmarks\' names:\n\n') | 74 output_stream.write('Available benchmarks\' names:\n\n') |
| 88 for k in classes: | 75 for k in classes: |
| 89 output_stream.write('%s\n' % k) | 76 output_stream.write('%s\n' % k) |
| 90 | 77 |
| 91 | 78 |
| 92 def _PrintAllUserStories(base_dir, output_stream): | 79 def _PrintAllUserStories(base_dir, output_stream): |
| 93 output_stream.write('Available page sets\' names:\n\n') | 80 output_stream.write('Available page sets\' names:\n\n') |
| 94 # TODO: actually print all stories once record_wpr support general | 81 # TODO: actually print all stories once record_wpr support general |
| 95 # stories recording. | 82 # stories recording. |
| 96 classes = _GetSubclasses(base_dir, story.StorySet) | 83 classes = classes_util.DiscoverClassesByClassName( |
| 84 base_dir, base_dir, story.StorySet) |
| 97 for k in classes: | 85 for k in classes: |
| 98 output_stream.write('%s\n' % k) | 86 output_stream.write('%s\n' % k) |
| 99 | 87 |
| 100 | 88 |
| 101 class WprRecorder(object): | 89 class WprRecorder(object): |
| 102 | 90 |
| 103 def __init__(self, base_dir, target, args=None): | 91 def __init__(self, base_dir, target, args=None): |
| 104 self._record_page_test = RecorderPageTest() | 92 self._record_page_test = RecorderPageTest() |
| 105 self._options = self._CreateOptions() | 93 self._options = self._CreateOptions() |
| 106 | 94 |
| 107 self._benchmark = _MaybeGetInstanceOfClass(target, base_dir, | 95 self._benchmark = _MaybeGetInstanceOfClass( |
| 108 benchmark.Benchmark) | 96 target, base_dir, benchmark.Benchmark) |
| 109 self._parser = self._options.CreateParser(usage='See %prog --help') | 97 self._parser = self._options.CreateParser(usage='See %prog --help') |
| 110 self._AddCommandLineArgs() | 98 self._AddCommandLineArgs() |
| 111 self._ParseArgs(args) | 99 self._ParseArgs(args) |
| 112 self._ProcessCommandLineArgs() | 100 self._ProcessCommandLineArgs() |
| 113 if self._benchmark is not None: | 101 if self._benchmark is not None: |
| 114 # This must be called after the command line args are added. | 102 # This must be called after the command line args are added. |
| 115 self._record_page_test.page_test = self._benchmark.CreatePageTest( | 103 self._record_page_test.page_test = self._benchmark.CreatePageTest( |
| 116 self.options) | 104 self.options) |
| 117 | 105 |
| 118 if self._options.page_set_base_dir: | 106 if self._options.page_set_base_dir: |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 221 return 0 | 209 return 0 |
| 222 | 210 |
| 223 # TODO(nednguyen): update WprRecorder so that it handles the difference | 211 # TODO(nednguyen): update WprRecorder so that it handles the difference |
| 224 # between recording a benchmark vs recording a story better based on | 212 # between recording a benchmark vs recording a story better based on |
| 225 # the distinction between args.benchmark & args.story | 213 # the distinction between args.benchmark & args.story |
| 226 wpr_recorder = WprRecorder(base_dir, target, extra_args) | 214 wpr_recorder = WprRecorder(base_dir, target, extra_args) |
| 227 results = wpr_recorder.CreateResults() | 215 results = wpr_recorder.CreateResults() |
| 228 wpr_recorder.Record(results) | 216 wpr_recorder.Record(results) |
| 229 wpr_recorder.HandleResults(results, args.upload) | 217 wpr_recorder.HandleResults(results, args.upload) |
| 230 return min(255, len(results.failures)) | 218 return min(255, len(results.failures)) |
| OLD | NEW |