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

Side by Side Diff: scripts/slave/recipe_modules/auto_bisect/example.py

Issue 2247373002: Refactor stages 1, 2 and test_api overhaul. (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Rebasing, addressing feedback. Created 4 years, 3 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 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 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 json 5 import json
6 6
7 DEPS = [ 7 DEPS = [
8 'auto_bisect', 8 'auto_bisect',
9 'chromium',
9 'chromium_tests', 10 'chromium_tests',
10 'recipe_engine/json', 11 'recipe_engine/json',
12 'depot_tools/gclient',
11 'recipe_engine/path', 13 'recipe_engine/path',
14 'recipe_engine/platform',
12 'recipe_engine/properties', 15 'recipe_engine/properties',
13 'recipe_engine/raw_io', 16 'recipe_engine/raw_io',
14 'recipe_engine/step', 17 'recipe_engine/step',
15 ] 18 ]
16 19
17 """This file is a recipe demonstrating the auto_bisect recipe module. 20 """This file is a recipe demonstrating the auto_bisect recipe module.
18 21
19 For more information about recipes, see: https://goo.gl/xKnjz6 22 For more information about recipes, see: https://goo.gl/xKnjz6
20 """ 23 """
21 24
22 25
23 def RunSteps(api): 26 def RunSteps(api):
24 fake_checkout_path = api.path.mkdtemp('fake_checkout') 27 # Dupe of bisection/desktop_bisect recipe.
25 api.path['checkout'] = fake_checkout_path 28 mastername = api.properties.get('mastername')
26 bisector = api.auto_bisect.create_bisector(api.properties['bisect_config'], 29 buildername = api.properties.get('buildername')
27 do_not_nest_wait_for_revision=True) 30 bot_config = api.chromium_tests.create_bot_config_object(mastername,
28 31 buildername)
29 # Request builds and tests for initial range and wait. 32 api.chromium_tests.configure_build(bot_config)
30 bisector.good_rev.start_job() 33 api.gclient.apply_config('perf')
31 bisector.bad_rev.start_job() 34 api.gclient.c.got_revision_mapping.pop('catapult', None)
32 bisector.wait_for_all([bisector.good_rev, bisector.bad_rev]) 35 update_step, bot_db = api.chromium_tests.prepare_checkout(bot_config)
33 36 api.path.c.dynamic_paths['catapult'] = api.auto_bisect.working_dir.join(
34 if bisector.good_rev.failed or bisector.bad_rev.failed: 37 'catapult')
35 return 38 api.auto_bisect.start_try_job(api, update_step=update_step, bot_db=bot_db,
36 39 do_not_nest_wait_for_revision=True)
37 assert bisector.check_improvement_direction()
38 assert bisector.check_initial_confidence()
39 revision_to_check = bisector.get_revision_to_eval()
40 revision_to_check.start_job()
41 bisector.wait_for(revision_to_check)
42 bisector.check_bisect_finished(revision_to_check)
43
44 # Evaluate inserted DEPS-modified revisions.
45 revision_to_check = bisector.get_revision_to_eval()
46 if revision_to_check:
47 revision_to_check.start_job()
48 # Only added for coverage.
49 revision_to_check.read_deps(bisector.get_perf_tester_name())
50 api.auto_bisect.query_revision_info(revision_to_check)
51 else:
52 raise api.step.StepFailure('Expected revision to check.')
53 # TODO(robertocn): Add examples for the following operations:
54 # Abort unnecessary jobs
55 # Print results (may be done in a unit test)
56
57 # Test runner for classic bisect script; calls bisect script in recipe
58 # wrapper with extra_src and path_to_config to override default behavior for
59 # android-chrome bisect jobs.
60 if api.properties.get('mastername'):
61 # TODO(akuegel): Load the config explicitly instead of relying on the
62 # builders.py entries in chromium_tests.
63 mastername = api.properties.get('mastername')
64 buildername = api.properties.get('buildername')
65 bot_config = api.chromium_tests.create_bot_config_object(
66 mastername, buildername)
67 api.chromium_tests.configure_build(bot_config)
68 api.chromium_tests.prepare_checkout(bot_config)
69 kwargs = {
70 'extra_src': 'dummy_extra_src',
71 'path_to_config': '/dummy/path/',
72 }
73 api.auto_bisect.run_bisect_script(**kwargs)
74
75 40
76 def GenTests(api): 41 def GenTests(api):
77 dummy_gs_location = ('gs://chrome-perf/bisect-results/' 42 yield (
78 'a6298e4afedbf2cd461755ea6f45b0ad64222222-test.results') 43 api.test('basic_linux_bisect')
79 basic_test = _make_test(api, _get_basic_test_data(), 'basic') 44 + api.properties(
80 yield basic_test 45 mastername='tryserver.chromium.perf',
81 46 buildername='linux_perf_bisect',
82 invalid_config_test = api.test('invalid_config') 47 slavename='dummyslave',
83 invalid_config_test += api.properties( 48 buildnumber=571,
84 bisect_config=_get_config({'good_revision': 'not a valid revision'})) 49 bisect_config={
85 yield invalid_config_test 50 'test_type': 'perf',
86 51 'command':
87 failed_build_test = _make_test( 52 ('src/tools/perf/run_benchmark -v --browser=release '
88 api, _get_ref_range_only_test_data(), 'failed_build_test', 53 '--output-format=valueset smoothness.tough_scrolling_cases'),
89 extra_config={'dummy_builds': None}) 54 'good_revision': '314015',
90 failed_build_test += api.step_data('gsutil ls', retcode=1) 55 'bad_revision': '314017',
91 failed_build_test += api.step_data('gsutil ls (2)' , retcode=1) 56 'metric': 'mean_input_event_latency/mean_input_event_latency',
92 failed_build_test += api.step_data('gsutil ls (3)' , retcode=1) 57 'bug_id': '-1',
93 failed_build_test += api.step_data( 58 'gs_bucket': 'chrome-perf',
94 'buildbucket.get', stdout=api.json.output( 59 'dummy_tests': 'True',
95 {'build':{'status': 'COMPLETE', 'result': 'FAILED'}})) 60 'dummy_job_names': 'True',
96 yield failed_build_test 61 'bypass_stats_check': 'True',
97 62 'skip_gclient_ops': 'True',
98 63 'recipe_tester_name': 'linux_perf_tester'
99 delayed_build_test = _make_test( 64 })
100 api, _get_ref_range_only_test_data(), 'delayed_build_test', 65 + api.auto_bisect([
101 extra_config={'dummy_builds': None}) 66 {
102 delayed_build_test += api.step_data('gsutil ls', retcode=1) 67 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
103 delayed_build_test += api.step_data('gsutil ls (2)', retcode=1) 68 'commit_pos': '314015',
104 delayed_build_test += api.step_data('gsutil ls (3)', retcode=1) 69 'parsed_values': [19, 20, 23],
105 delayed_build_test += api.step_data('gsutil ls (4)', retcode=1) 70 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
106 delayed_build_test += api.step_data('gsutil ls (5)', retcode=1) 71 'gsutil_exists': 10 * [False]
107 delayed_build_test += api.step_data('gsutil ls (6)', retcode=1) 72 },
108 delayed_build_test += api.step_data( 73 {
109 'buildbucket.get', stdout=api.json.output( 74 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
110 {'build':{'status': 'PENDING'}})) 75 'commit_pos': '314016',
111 yield delayed_build_test 76 'parsed_values': [12, 13, 16],
112 77 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
113 missing_metric_test = _make_test( 78 'gsutil_exists': [True],
114 api, _get_ref_range_only_missing_metric_test_data(), 79 'cl_info': {
115 'missing_metric_test') 80 'author': 'DummyAuthor',
116 yield missing_metric_test 81 'email': 'dummy@nowhere.com',
117 82 'subject': 'Some random CL',
118 windows_test = _make_test( 83 'date': '01/01/2015',
119 api, _get_basic_test_data(), 'windows_bisector', platform='windows') 84 'body': ('A long description for a CL.\n'
120 yield windows_test 85 'Containing multiple lines'),
121
122 winx64_test = _make_test(
123 api, _get_basic_test_data(), 'windows_x64_bisector', platform='win_x64')
124 yield winx64_test
125
126 mac_test = _make_test(
127 api, _get_basic_test_data(), 'mac_bisector', platform='mac')
128 yield mac_test
129
130 android_test = _make_test(
131 api, _get_basic_test_data(), 'android_bisector', platform='android')
132 yield android_test
133
134 android_arm64_test = _make_test(
135 api, _get_basic_test_data(), 'android_arm64_bisector',
136 platform='android_arm64')
137 yield android_arm64_test
138
139 failed_data = _get_basic_test_data()
140 failed_data[0].pop('DEPS')
141 failed_data[1]['test_results']['results']['errors'] = ['Dummy error.']
142 failed_data[1].pop('DEPS_change')
143 failed_data[1].pop('DEPS')
144 failed_data[1].pop('DEPS_interval')
145 failed_data[0].pop('git_diff')
146 failed_data[0].pop('cl_info')
147 yield _make_test(api, failed_data, 'failed_test')
148
149 yield _make_test(api, _get_reversed_basic_test_data(), 'reversed_basic')
150
151 bad_git_hash_data = _get_basic_test_data()
152 bad_git_hash_data[1]['interned_hashes'] = {'003': '12345', '002': 'Bad Hash'}
153
154 bisect_script_test = _make_test(
155 api, _get_basic_test_data(), 'basic_bisect_script')
156
157 yield bisect_script_test
158
159
160 def _get_ref_range_only_test_data():
161 return [
162 {
163 'refrange': True,
164 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
165 'commit_pos': '314015',
166 'fail_to_build': True,
167 },
168 {
169 'refrange': True,
170 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
171 'commit_pos': '314017',
172 },
173 ]
174
175
176 def _get_ref_range_only_missing_metric_test_data():
177 return [
178 {
179 'refrange': True,
180 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
181 'commit_pos': '314015',
182 'test_results': {
183 'results': {
184 'values': [],
185 }, 86 },
186 'retcodes': [0], 87 },
187 } 88 {
188 }, 89 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
189 { 90 'commit_pos': '314017',
190 'refrange': True, 91 'parsed_values': [12, 13, 14, 15, 16],
191 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111', 92 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
192 'commit_pos': '314017', 93 }]))
193 'test_results': { 94 yield (
194 'results': { 95 api.test('basic_win64_bisect')
195 'values': [], 96 + api.platform('win', 64)
97 + api.properties(
98 mastername='tryserver.chromium.perf',
99 buildername='winx64_zen_perf_bisect',
100 slavename='dummyslave',
101 buildnumber=571,
102 bisect_config={
103 'test_type': 'perf',
104 'command':
105 ('src/tools/perf/run_benchmark -v --browser=release '
106 '--output-format=valueset smoothness.tough_scrolling_cases'),
107 'good_revision': '314015',
108 'bad_revision': '314017',
109 'metric': 'mean_input_event_latency/mean_input_event_latency',
110 'bug_id': '-1',
111 'gs_bucket': 'chrome-perf',
112 'dummy_builds': 'True',
113 'dummy_tests': 'True',
114 'dummy_job_names': 'True',
115 'bypass_stats_check': 'True',
116 'skip_gclient_ops': 'True',
117 'recipe_tester_name': 'winx64_perf_tester'
118 })
119 + api.auto_bisect([
120 {
121 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
122 'commit_pos': '314015',
123 'parsed_values': [19, 20, 21, 22, 23],
124 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
125 'gsutil_exists': 5 * [False]
126 },
127 {
128 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
129 'commit_pos': '314016',
130 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
131 'cl_info': {
132 'author': 'DummyAuthor',
133 'email': 'dummy@nowhere.com',
134 'subject': 'Some random CL',
135 'date': '01/01/2015',
136 'body': ('A long description for a CL.\n'
137 'Containing multiple lines'),
196 }, 138 },
197 'retcodes': [0], 139 },
198 } 140 {
199 }, 141 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
200 ] 142 'commit_pos': '314017',
201 143 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
202 144 }]))
203 def _get_basic_test_data(): 145 yield (
204 return [ 146 api.test('basic_win32_bisect')
205 { 147 + api.platform('win', 32)
206 'refrange': True, 148 + api.properties(
207 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222', 149 mastername='tryserver.chromium.perf',
208 'commit_pos': '314015', 150 buildername='win_perf_bisect',
209 'test_results': { 151 slavename='dummyslave',
210 'results':{ 152 buildnumber=571,
211 'values': [19, 20, 21, 22, 23], 153 bisect_config={
154 'test_type': 'perf',
155 'command':
156 ('src/tools/perf/run_benchmark -v --browser=release '
157 '--output-format=valueset smoothness.tough_scrolling_cases'),
158 'good_revision': '314015',
159 'bad_revision': '314017',
160 'metric': 'mean_input_event_latency/mean_input_event_latency',
161 'bug_id': '-1',
162 'gs_bucket': 'chrome-perf',
163 'dummy_builds': 'True',
164 'dummy_tests': 'True',
165 'dummy_job_names': 'True',
166 'bypass_stats_check': 'True',
167 'skip_gclient_ops': 'True',
168 'recipe_tester_name': 'win_perf_tester'
169 })
170 + api.auto_bisect([
171 {
172 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
173 'commit_pos': '314015',
174 'parsed_values': [19, 20, 21, 22, 23],
175 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
176 'gsutil_exists': 5 * [False]
177 },
178 {
179 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
180 'commit_pos': '314016',
181 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
182 'cl_info': {
183 'author': 'DummyAuthor',
184 'email': 'dummy@nowhere.com',
185 'subject': 'Some random CL',
186 'date': '01/01/2015',
187 'body': ('A long description for a CL.\n'
188 'Containing multiple lines'),
212 }, 189 },
213 'retcodes': [0], 190 },
214 }, 191 {
215 "DEPS": ("vars={'v8_revision': '001'};" 192 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
216 "deps = {'src/v8': 'v8.git@' + Var('v8_revision')," 193 'commit_pos': '314017',
217 "'src/third_party/WebKit': 'webkit.git@010'}"), 194 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
218 'git_diff': { 195 }]))
219 '002': 'Dummy .diff contents 001 - 002', 196 yield (
220 '003': 'Dummy .diff contents 001 - 003', 197 api.test('basic_mac_bisect')
221 }, 198 + api.platform('mac', 64)
222 'cl_info': { 199 + api.properties(
223 'author': 'DummyAuthor', 200 mastername='tryserver.chromium.perf',
224 'email': 'dummy@nowhere.com', 201 buildername='mac_10_11_perf_bisect',
225 'subject': 'Some random CL', 202 slavename='dummyslave',
226 'date': '01/01/2015', 203 buildnumber=571,
227 'body': ('A long description for a CL.\n' 204 bisect_config={
228 'Containing multiple lines'), 205 'test_type': 'perf',
229 }, 206 'command':
230 }, 207 ('src/tools/perf/run_benchmark -v --browser=release '
231 { 208 '--output-format=valueset smoothness.tough_scrolling_cases'),
232 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988', 209 'good_revision': '314015',
233 'commit_pos': '314016', 210 'bad_revision': '314017',
234 'test_results': { 211 'metric': 'mean_input_event_latency/mean_input_event_latency',
235 'results': { 212 'bug_id': '-1',
236 'values': [12, 13, 14, 15, 16], 213 'gs_bucket': 'chrome-perf',
214 'dummy_builds': 'True',
215 'dummy_tests': 'True',
216 'dummy_job_names': 'True',
217 'bypass_stats_check': 'True',
218 'skip_gclient_ops': 'True',
219 'recipe_tester_name': 'mac_10_11_perf_bisect'
220 })
221 + api.auto_bisect([
222 {
223 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
224 'commit_pos': '314015',
225 'parsed_values': [19, 20, 21, 22, 23],
226 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
227 'gsutil_exists': 5 * [False]
228 },
229 {
230 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
231 'commit_pos': '314016',
232 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
233 'cl_info': {
234 'author': 'DummyAuthor',
235 'email': 'dummy@nowhere.com',
236 'subject': 'Some random CL',
237 'date': '01/01/2015',
238 'body': ('A long description for a CL.\n'
239 'Containing multiple lines'),
237 }, 240 },
238 'retcodes': [0], 241 },
239 }, 242 {
240 'DEPS_change': 'True', 243 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
241 "DEPS": ("vars={'v8_revision': '004'};" 244 'commit_pos': '314017',
242 "deps = {'src/v8': 'v8.git@' + Var('v8_revision')," 245 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
243 "'src/third_party/WebKit': 'webkit.git@010'}"), 246 }]))
244 'DEPS_interval': {'v8': '002 003 004'.split()}, 247 yield (
245 }, 248 api.test('v8_roll_bisect_bis')
246 { 249 + api.properties(
247 'refrange': True, 250 mastername='tryserver.chromium.perf',
248 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111', 251 buildername='linux_perf_bisect',
249 'commit_pos': '314017', 252 slavename='dummyslave',
250 'test_results': { 253 buildnumber=571,
251 'results': { 254 bisect_config={
252 'values': [12, 13, 14, 15, 16], 255 'test_type': 'perf',
256 'command':
257 ('src/tools/perf/run_benchmark -v --browser=release '
258 '--output-format=valueset smoothness.tough_scrolling_cases'),
259 'good_revision': '314015',
260 'bad_revision': '314017',
261 'metric': 'mean_input_event_latency/mean_input_event_latency',
262 'bug_id': '-1',
263 'gs_bucket': 'chrome-perf',
264 'dummy_builds': 'True',
265 'dummy_tests': 'True',
266 'dummy_job_names': 'True',
267 'bypass_stats_check': 'True',
268 'skip_gclient_ops': 'True',
269 'recipe_tester_name': 'linux_perf_tester'
270 })
271 + api.auto_bisect([
272 {
273 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
274 'commit_pos': '314015',
275 'parsed_values': [19, 20, 21, 22, 23],
276 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
277 },
278 {
279 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
280 'commit_pos': '314016',
281 'parsed_values': [19, 20, 21, 22, 23],
282 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
283 "DEPS": ("vars={'v8_revision': '001'};"
284 "deps = {'src/v8': 'v8.git@' + Var('v8_revision'),"
285 "'src/third_party/WebKit': 'webkit.git@010'}"),
286 },
287 {
288 'depot':'v8',
289 'hash': '002',
290 'parsed_values': [12, 13, 14, 15, 16],
291 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
292 'gsutil_exists': 10 * [False],
293 'cl_info': {
294 'author': 'DummyAuthor',
295 'email': 'dummy@nowhere.com',
296 'subject': 'Some random CL',
297 'date': '01/01/2015',
298 'body': ('A long description for a CL.\n'
299 'Containing multiple lines'),
253 }, 300 },
254 'retcodes': [0], 301 },
255 } 302 {
256 }, 303 'depot':'v8',
257 ] 304 'hash': '003',
258 305 'parsed_values': [12, 13, 14, 15, 16],
259 306 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
260 def _get_reversed_basic_test_data(): 307 },
261 return [ 308 {
262 { 309 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
263 'refrange': True, 310 'commit_pos': '314017',
264 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111', 311 'parsed_values': [12, 13, 14, 15, 16],
265 'commit_pos': '314015', 312 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
266 'test_results': { 313 'DEPS_change': 'True',
267 'results': { 314 "DEPS": ("vars={'v8_revision': '004'};"
268 'values': [19, 20, 21, 22, 23], 315 "deps = {'src/v8': 'v8.git@' + Var('v8_revision'),"
316 "'src/third_party/WebKit': 'webkit.git@010'}"),
317 'DEPS_interval': {'v8': '002 003 004'.split()},
318 }]))
319 yield (
320 api.test('v8_roll_bisect')
321 + api.properties(
322 mastername='tryserver.chromium.perf',
323 buildername='linux_perf_bisect',
324 slavename='dummyslave',
325 buildnumber=571,
326 bisect_config={
327 'test_type': 'perf',
328 'command':
329 ('src/tools/perf/run_benchmark -v --browser=release '
330 '--output-format=valueset smoothness.tough_scrolling_cases'),
331 'good_revision': '314015',
332 'bad_revision': '314017',
333 'metric': 'mean_input_event_latency/mean_input_event_latency',
334 'bug_id': '-1',
335 'gs_bucket': 'chrome-perf',
336 'dummy_builds': 'True',
337 'dummy_tests': 'True',
338 'dummy_job_names': 'True',
339 'bypass_stats_check': 'True',
340 'skip_gclient_ops': 'True',
341 'recipe_tester_name': 'linux_perf_tester'
342 })
343 + api.auto_bisect([
344 {
345 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
346 'commit_pos': '314015',
347 'parsed_values': [19, 20, 21, 22, 23],
348 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
349 "DEPS": ("vars={'v8_revision': '001'};"
350 "deps = {'src/v8': 'v8.git@' + Var('v8_revision'),"
351 "'src/third_party/WebKit': 'webkit.git@010'}"),
352 },
353 {
354 'depot':'v8',
355 'hash': '002',
356 'parsed_values': [12, 13, 14, 15, 16],
357 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
358 'gsutil_exists': 10 * [False],
359 'cl_info': {
360 'author': 'DummyAuthor',
361 'email': 'dummy@nowhere.com',
362 'subject': 'Some random CL',
363 'date': '01/01/2015',
364 'body': ('A long description for a CL.\n'
365 'Containing multiple lines'),
269 }, 366 },
270 'retcodes': [0], 367 },
271 }, 368 {
272 'cl_info': { 369 'depot':'v8',
273 'author': 'DummyAuthor', 370 'hash': '003',
274 'email': 'dummy@nowhere.com', 371 'parsed_values': [12, 13, 14, 15, 16],
275 'subject': 'Some random CL', 372 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
276 'date': '01/01/2015', 373 },
277 'body': ('A long description for a CL.\n' 374 {
278 'Containing multiple lines'), 375 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
279 }, 376 'commit_pos': '314016',
280 }, 377 'parsed_values': [12, 13, 14, 15, 16],
281 { 378 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
282 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222', 379 'DEPS_change': 'True',
283 'commit_pos': '314016', 380 "DEPS": ("vars={'v8_revision': '004'};"
284 'test_results': { 381 "deps = {'src/v8': 'v8.git@' + Var('v8_revision'),"
285 'results': { 382 "'src/third_party/WebKit': 'webkit.git@010'}"),
286 'values': [19, 20, 21, 22, 23], 383 'DEPS_interval': {'v8': '002 003 004'.split()},
384 },
385 {
386 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
387 'commit_pos': '314017',
388 'parsed_values': [12, 13, 14, 15, 16],
389 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
390 }]))
391 yield (
392 api.test('retest_bisect')
393 + api.properties(
394 mastername='tryserver.chromium.perf',
395 buildername='linux_perf_bisect',
396 slavename='dummyslave',
397 buildnumber=571,
398 bisect_config={
399 'test_type': 'perf',
400 'command':
401 ('src/tools/perf/run_benchmark -v --browser=release '
402 '--output-format=valueset smoothness.tough_scrolling_cases'),
403 'good_revision': '314015',
404 'bad_revision': '314017',
405 'metric': 'mean_input_event_latency/mean_input_event_latency',
406 'bug_id': '-1',
407 'gs_bucket': 'chrome-perf',
408 'dummy_builds': 'True',
409 'dummy_tests': 'True',
410 'dummy_job_names': 'True',
411 'skip_gclient_ops': 'True',
412 'recipe_tester_name': 'linux_perf_tester'
413 })
414 + api.auto_bisect([
415 {
416 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
417 'commit_pos': '314015',
418 'parsed_values': [20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
419 1],
420 },
421 {
422 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
423 'commit_pos': '314016',
424 'parsed_values': [20, 1, 1, 10, 10, 10, 10, 10, 10, 10, 10, 10,
425 10, 10, 10, 10, 10, 1],
426 },
427 {
428 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
429 'commit_pos': '314017',
430 'parsed_values': [20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
431 1, 1, 11],
432 }]))
433 yield (
434 api.test('bad_config')
435 + api.properties(
436 mastername='tryserver.chromium.perf',
437 buildername='linux_perf_bisect',
438 slavename='dummyslave',
439 buildnumber=571,
440 bisect_config={
441 'test_type': 'perf',
442 'command':
443 ('src/tools/perf/run_benchmark -v --browser=release '
444 '--output-format=valueset smoothness.tough_scrolling_cases'),
445 'good_revision': '314015',
446 'bad_revision': '314016',
447 'metric': 'mean_input_event_latency/mean_input_event_latency',
448 'bug_id': 'crbug.com/123123',
449 'gs_bucket': 'chrome-perf',
450 'dummy_builds': 'True',
451 'dummy_tests': 'True',
452 'dummy_job_names': 'True',
453 'bypass_stats_check': 'True',
454 'skip_gclient_ops': 'True',
455 'recipe_tester_name': 'linux_perf_tester'
456 }))
457 yield (
458 api.test('return_code')
459 + api.properties(
460 mastername='tryserver.chromium.perf',
461 buildername='linux_perf_bisect',
462 slavename='dummyslave',
463 buildnumber=571,
464 bisect_config={
465 'test_type': 'return_code',
466 'command':
467 ('src/tools/perf/run_benchmark -v --browser=release '
468 '--output-format=valueset smoothness.tough_scrolling_cases'),
469 'good_revision': '314014',
470 'bad_revision': '314017',
471 'bug_id': '-1',
472 'gs_bucket': 'chrome-perf',
473 'dummy_builds': 'True',
474 'dummy_tests': 'True',
475 'dummy_job_names': 'True',
476 'bypass_stats_check': 'True',
477 'skip_gclient_ops': 'True',
478 'recipe_tester_name': 'linux_perf_tester'
479 })
480 + api.auto_bisect([
481 {
482 'hash': '0a1b2c3d4f0a1b2c3d4f0a1b2c3d4f0a1b2c3d4f',
483 'commit_pos': '314014',
484 'parsed_values': [19, 20, 23],
485 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
486 },
487 {
488 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
489 'commit_pos': '314015',
490 'parsed_values': [19, 20, 23],
491 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
492 },
493 {
494 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
495 'commit_pos': '314016',
496 'parsed_values': [20, 19, 23],
497 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 1}],
498 },
499 {
500 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
501 'commit_pos': '314017',
502 'parsed_values': [20, 19, 23],
503 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 1}],
504 }]))
505 yield (
506 api.test('basic_bisect_other_direction')
507 + api.properties(
508 mastername='tryserver.chromium.perf',
509 buildername='linux_perf_bisect',
510 slavename='dummyslave',
511 buildnumber=571,
512 bisect_config={
513 'test_type': 'perf',
514 'command':
515 ('src/tools/perf/run_benchmark -v --browser=release '
516 '--output-format=valueset smoothness.tough_scrolling_cases'),
517 'good_revision': '314015',
518 'bad_revision': '314017',
519 'metric': 'mean_input_event_latency/mean_input_event_latency',
520 'bug_id': '-1',
521 'gs_bucket': 'chrome-perf',
522 'dummy_builds': 'True',
523 'dummy_tests': 'True',
524 'dummy_job_names': 'True',
525 'bypass_stats_check': 'True',
526 'skip_gclient_ops': 'True',
527 'recipe_tester_name': 'linux_perf_tester'
528 })
529 + api.auto_bisect([
530 {
531 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
532 'commit_pos': '314015',
533 'parsed_values': [19, 20, 23],
534 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
535 },
536 {
537 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
538 'commit_pos': '314016',
539 'parsed_values': [19, 20, 23],
540 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
541 },
542 {
543 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
544 'commit_pos': '314017',
545 'parsed_values': [12, 13, 14, 15, 16],
546 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
547 'cl_info': {
548 'author': 'DummyAuthor',
549 'email': 'dummy@nowhere.com',
550 'subject': 'Some random CL',
551 'date': '01/01/2015',
552 'body': ('A long description for a CL.\n'
553 'Containing multiple lines'),
287 }, 554 },
288 'retcodes': [0], 555 }]))
289 }, 556 yield (
290 "DEPS": ("vars={'v8_revision': '001'};" 557 api.test('failed_revision')
291 "deps = {'src/v8': 'v8.git@' + Var('v8_revision')," 558 + api.properties(
292 "'src/third_party/WebKit': 'webkit.git@010'}"), 559 mastername='tryserver.chromium.perf',
293 'git_diff': { 560 buildername='linux_perf_bisect',
294 '002': 'Dummy .diff contents 001 - 002', 561 slavename='dummyslave',
295 '003': 'Dummy .diff contents 001 - 003', 562 buildnumber=571,
296 }, 563 bisect_config={
297 }, 564 'test_type': 'perf',
298 { 565 'command':
299 'refrange': True, 566 ('src/tools/perf/run_benchmark -v --browser=release '
300 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988', 567 '--output-format=valueset smoothness.tough_scrolling_cases'),
301 'commit_pos': '314017', 568 'good_revision': '314015',
302 'test_results': { 569 'bad_revision': '314017',
303 'results': { 570 'metric': 'mean_input_event_latency/mean_input_event_latency',
304 'values': [12, 13, 14, 15, 16], 571 'bug_id': '-1',
305 }, 572 'gs_bucket': 'chrome-perf',
306 'retcodes': [0], 573 'dummy_builds': 'True',
307 }, 574 'dummy_tests': 'True',
308 'DEPS_change': 'True', 575 'dummy_job_names': 'True',
309 "DEPS": ("vars={'v8_revision': '004'};" 576 'bypass_stats_check': 'True',
310 "deps = {'src/v8': 'v8.git@' + Var('v8_revision')," 577 'skip_gclient_ops': 'True',
311 "'src/third_party/WebKit': 'webkit.git@010'}"), 578 'recipe_tester_name': 'linux_perf_tester'
312 'DEPS_interval': {'v8': '002 003 004'.split()}, 579 })
313 }, 580 + api.auto_bisect([
314 ] 581 {
315 582 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
316 583 'commit_pos': '314015',
317 def _make_test(api, test_data, test_name, platform='linux', extra_config=None): 584 'parsed_values': [19, 20, 23],
318 basic_test = api.test(test_name) 585 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
319 basic_test += api.properties(mastername='tryserver.chromium.perf', 586 },
320 buildername='linux_perf_bisect', 587 {
321 slavename='dummyslave', 588 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
322 buildnumber=123456) 589 'commit_pos': '314016',
323 basic_test += _get_revision_range_step_data(api, test_data) 590 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 1}],
324 for revision_data in test_data: 591 },
325 for step_data in _get_step_data_for_revision(api, revision_data): 592 {
326 basic_test += step_data 593 'hash': '00316c9ddfb9d7b4e1ed2fff9fe6d964d2111111',
327 if 'win_x64' in platform: 594 'commit_pos': '314017',
328 basic_test += api.properties(bisect_config=_get_config({ 595 'parsed_values': [12, 13, 14, 15, 16],
329 'command': ('src/tools/perf/run_benchmark -v --browser=release_x64' 596 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
330 ' smoothness.tough_scrolling_cases'), 597 }]))
331 'recipe_tester_name': 'chromium_rel_win7_x64'})) 598 yield (
332 elif 'win' in platform: 599 api.test('failed_reference_range')
333 basic_test += api.properties(bisect_config=_get_config( 600 + api.properties(
334 {'recipe_tester_name': 'chromium_rel_win7'})) 601 mastername='tryserver.chromium.perf',
335 elif 'mac' in platform: 602 buildername='linux_perf_bisect',
336 basic_test += api.properties(bisect_config=_get_config( 603 slavename='dummyslave',
337 {'recipe_tester_name': 'chromium_rel_mac'})) 604 buildnumber=571,
338 elif 'android_arm64' in platform: 605 bisect_config={
339 basic_test += api.properties(bisect_config=_get_config({ 606 'test_type': 'perf',
340 'command': ('src/tools/perf/run_benchmark -v --browser=android-chromium' 607 'command':
341 ' smoothness.tough_scrolling_cases'), 608 ('src/tools/perf/run_benchmark -v --browser=release '
342 'recipe_tester_name': 'android-nexus9'})) 609 '--output-format=valueset smoothness.tough_scrolling_cases'),
343 elif 'android' in platform: 610 'good_revision': '314015',
344 basic_test += api.properties(bisect_config=_get_config({ 611 'bad_revision': '314016',
345 'command': ('src/tools/perf/run_benchmark -v --browser=android-chromium' 612 'metric': 'mean_input_event_latency/mean_input_event_latency',
346 ' smoothness.tough_scrolling_cases'), 613 'bug_id': '-1',
347 'recipe_tester_name': 'android-nexus7'})) 614 'gs_bucket': 'chrome-perf',
348 else: 615 'dummy_builds': 'True',
349 basic_test += api.properties(bisect_config=_get_config(extra_config)) 616 'dummy_tests': 'True',
350 basic_test += api.properties( 617 'dummy_job_names': 'True',
351 buildbotURL= 'https://build.chromium.org/p/tryserver.chromium.perf') 618 'bypass_stats_check': 'True',
352 return basic_test 619 'skip_gclient_ops': 'True',
353 620 'recipe_tester_name': 'linux_perf_tester'
354 621 })
355 def _get_revision_range_step_data(api, range_data): 622 + api.auto_bisect([
356 """Adds canned output for fetch_intervening_revisions.py.""" 623 {
357 min_rev = range_data[0]['hash'] 624 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
358 max_rev = range_data[-1]['hash'] 625 'commit_pos': '314015',
359 output = [[r['hash'], 'ignored'] for r in range_data[1:]] 626 'parsed_values': [19, 20, 23],
360 step_name = ('Expanding revision range.for revisions %s:%s' % 627 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
361 (min_rev, max_rev)) 628 },
362 return api.step_data(step_name, stdout=api.json.output(output)) 629 {
363 630 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
364 631 'commit_pos': '314016',
365 def _get_config(params=None): 632 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 1}],
366 """Returns a sample bisect config dict with some fields overridden.""" 633 },
367 example_config = { 634 ]))
368 'test_type': 'perf', 635 yield (
369 'command': ( 636 api.test('no_repro')
370 'src/tools/perf/run_benchmark -v --browser=release smoothness.' 637 + api.properties(
371 'tough_scrolling_cases'), 638 mastername='tryserver.chromium.perf',
372 'good_revision': '314015', 639 buildername='linux_perf_bisect',
373 'bad_revision': '314017', 640 slavename='dummyslave',
374 'metric': 'mean_input_event_latency/mean_input_event_latency', 641 buildnumber=571,
375 'repeat_count': '2', 642 bisect_config={
376 'bug_id': '-1', 643 'test_type': 'perf',
377 'max_time_minutes': '5', 644 'command':
378 'gs_bucket': 'chrome-perf', 645 ('src/tools/perf/run_benchmark -v --browser=release '
379 'builder_host': 'master4.golo.chromium.org', 646 '--output-format=valueset smoothness.tough_scrolling_cases'),
380 'builder_port': '8341', 647 'good_revision': '314015',
381 'dummy_builds': 'True', 648 'bad_revision': '314016',
382 'dummy_tests': 'True', 649 'metric': 'mean_input_event_latency/mean_input_event_latency',
383 'dummy_job_names': 'True', 650 'bug_id': '-1',
384 'bypass_stats_check': 'True', 651 'gs_bucket': 'chrome-perf',
385 'skip_gclient_ops': 'True', 652 'dummy_builds': 'True',
386 'recipe_tester_name': 'linux_perf_tester', 653 'dummy_tests': 'True',
387 } 654 'dummy_job_names': 'True',
388 if params: 655 'bypass_stats_check': 'True',
389 example_config.update(params) 656 'skip_gclient_ops': 'True',
390 return example_config 657 'recipe_tester_name': 'linux_perf_tester'
391 658 })
392 659 + api.auto_bisect([
393 def _get_step_data_for_revision(api, revision_data, include_build_steps=True): 660 {
394 """Generator that produces step patches for fake results.""" 661 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
395 commit_pos_number = revision_data['commit_pos'] 662 'commit_pos': '314015',
396 commit_hash = revision_data['hash'] 663 'parsed_values': [19, 20, 23],
397 test_results = revision_data.get('test_results') 664 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
398 665 },
399 if 'refrange' in revision_data: 666 {
400 parent_step = 'Resolving reference range.' 667 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
401 commit_pos = 'refs/heads/master@{#%s}' % commit_pos_number 668 'commit_pos': '314016',
402 step_name = parent_step + 'crrev get commit hash for ' + commit_pos 669 'parsed_values': [19, 20, 23],
403 yield api.step_data( 670 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
404 step_name, 671 },
405 stdout=api.json.output({'git_sha': commit_hash})) 672 ]))
406 673 yield (
407 if include_build_steps: 674 api.test('failed_build')
408 if test_results: 675 + api.properties(
409 step_name = ('gsutil Get test results for build %s') % commit_hash 676 mastername='tryserver.chromium.perf',
410 yield api.step_data(step_name, stdout=api.json.output(test_results)) 677 buildername='linux_perf_bisect',
411 678 slavename='dummyslave',
412 if revision_data.get('DEPS', False): 679 buildnumber=571,
413 step_name = 'fetch file %s:DEPS' % commit_hash 680 bisect_config={
414 yield api.step_data(step_name, stdout=api.raw_io.output( 681 'test_type': 'perf',
415 revision_data['DEPS'])) 682 'command':
416 683 ('src/tools/perf/run_benchmark -v --browser=release '
417 if 'git_diff' in revision_data: 684 '--output-format=valueset smoothness.tough_scrolling_cases'),
418 for deps_rev, diff_file in revision_data['git_diff'].iteritems(): 685 'good_revision': '314015',
419 step_name = 'Generating patch for %s:DEPS to %s' 686 'bad_revision': '314016',
420 step_name %= (commit_hash, deps_rev) 687 'metric': 'mean_input_event_latency/mean_input_event_latency',
421 yield api.step_data(step_name, stdout=api.raw_io.output(diff_file)) 688 'bug_id': '-1',
422 689 'gs_bucket': 'chrome-perf',
423 if 'DEPS_change' in revision_data: 690 'dummy_builds': 'True',
424 step_name = 'Checking DEPS for ' + commit_hash 691 'dummy_tests': 'True',
425 yield api.step_data(step_name, stdout=api.raw_io.output('DEPS')) 692 'dummy_job_names': 'True',
426 693 'bypass_stats_check': 'True',
427 if 'DEPS_interval' in revision_data: 694 'skip_gclient_ops': 'True',
428 for depot_name, interval in revision_data['DEPS_interval'].iteritems(): 695 'recipe_tester_name': 'linux_perf_tester'
429 for item in reversed(interval[:-1]): 696 })
430 step_name = 'Hashing modified DEPS file with revision ' + item 697 + api.auto_bisect([
431 file_hash = 'f412e8458' 698 {
432 yield api.step_data(step_name, stdout=api.raw_io.output(file_hash)) 699 'hash': 'a6298e4afedbf2cd461755ea6f45b0ad64222222',
433 step_name = 'Expanding revision range for revision %s on depot %s' 700 'commit_pos': '314015',
434 step_name %= (interval[-1], depot_name) 701 'parsed_values': [19, 20, 23],
435 stdout = api.json.output([(r, 0) for r in interval[:-1]]) 702 'gsutil_exists': 2 * [False],
436 yield api.step_data(step_name, stdout=stdout) 703 'test_results': 5 * [{'stdout': 'benchmark text', 'retcode': 0}],
437 704 'build_status': [{'build': {'status': 'SCHEDULED'}},
438 if 'cl_info' in revision_data: 705 {'build': {'status': 'COMPLETED',
439 step_name = 'Reading culprit cl information.' 706 'result': 'SUCCESS'}}],
440 stdout = api.json.output(revision_data['cl_info']) 707 },
441 yield api.step_data(step_name, stdout=stdout) 708 {
709 'hash': 'dcdcdc0ff1122212323134879ddceeb1240b0988',
710 'commit_pos': '314016',
711 'gsutil_exists': 10 * [False],
712 'build_status': [{'build': {'status': 'SCHEDULED'}},
713 {'build': {'status': 'COMPLETED',
714 'result': 'FAILED'}}],
715 },
716 ]))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698