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 |