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

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

Issue 1244223002: Create classes_util API, change discover to return a list instead of a dict. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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
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 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
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
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))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698