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

Side by Side Diff: scripts/slave/recipes/android/perf.py

Issue 2445193002: Change all remote run builders to use tools/build. (Closed)
Patch Set: Add recipes Created 4 years, 1 month 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
(Empty)
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from recipe_engine.types import freeze
6
7
8 DEPS = [
9 'build/adb',
10 'build/chromium',
11 'build/chromium_android',
12 'build/chromium_tests',
13 'build/test_utils',
14 'depot_tools/bot_update',
15 'depot_tools/gclient',
16 'recipe_engine/json',
17 'recipe_engine/path',
18 'recipe_engine/properties',
19 'recipe_engine/python',
20 'recipe_engine/step',
21 ]
22
23
24 REPO_URL = 'https://chromium.googlesource.com/chromium/src.git'
25
26 def _CreateTestSpec(name, perf_id, required_apks, num_device_shards=1,
27 num_host_shards=1, target_bits=64,
28 browser_name=None, remove_system_webview=False,
29 enable_platform_mode=False):
30 def _CreateShardTestSpec(name, perf_id, required_apks, num_device_shards,
31 num_host_shards, shard_index, target_bits,
32 browser_name, remove_system_webview,
33 enable_platform_mode):
34 spec = {
35 'perf_id': perf_id,
36 'required_apks': required_apks,
37 'bucket': 'chrome-perf',
38 'num_device_shards': num_device_shards,
39 'num_host_shards': num_host_shards,
40 'shard_index': shard_index,
41 'test_spec_file': 'chromium.perf.json',
42 'max_battery_temp': 350,
43 'known_devices_file': '.known_devices',
44 'browser_name': browser_name,
45 'remove_system_webview': remove_system_webview,
46 'enable_platform_mode': enable_platform_mode,
47 }
48 if target_bits == 32:
49 builder_name = 'Android Builder'
50 elif target_bits == 64:
51 builder_name = 'Android arm64 Builder'
52 spec['recipe_config'] = 'tests_arm64'
53 spec['path'] = lambda api: '%s/full-build-linux_%s.zip' % (
54 builder_name, api.properties['parent_revision'])
55 return spec
56
57 tester_spec = {}
58 for shard_index in xrange(num_host_shards):
59 builder_name = '%s (%d)' % (name, shard_index + 1)
60 tester_spec[builder_name] = _CreateShardTestSpec(
61 name, perf_id, required_apks, num_device_shards, num_host_shards,
62 shard_index, target_bits, browser_name, remove_system_webview,
63 enable_platform_mode)
64 return tester_spec
65
66 def _ChromiumPerfTesters():
67 testers = [
68 _CreateTestSpec('Android Galaxy S5 Perf', 'android-galaxy-s5',
69 required_apks=['ChromePublic.apk'], num_device_shards=7,
70 num_host_shards=3, target_bits=32, enable_platform_mode=True),
71 _CreateTestSpec('Android Nexus5 Perf', 'android-nexus5',
72 required_apks=['ChromePublic.apk'], num_device_shards=7,
73 num_host_shards=3, target_bits=32, enable_platform_mode=True),
74 _CreateTestSpec('Android Nexus5X Perf', 'android-nexus5X',
75 required_apks=['ChromePublic.apk'], num_device_shards=7,
76 num_host_shards=3, enable_platform_mode=True),
77 _CreateTestSpec('Android Nexus6 Perf', 'android-nexus6',
78 required_apks=['ChromePublic.apk'], num_device_shards=7,
79 num_host_shards=3, target_bits=32),
80 _CreateTestSpec('Android Nexus7v2 Perf', 'android-nexus7v2',
81 required_apks=['ChromePublic.apk'], num_device_shards=7,
82 num_host_shards=3, target_bits=32, enable_platform_mode=True),
83 _CreateTestSpec('Android Nexus9 Perf', 'android-nexus9',
84 required_apks=['ChromePublic.apk'], num_device_shards=7,
85 num_host_shards=3),
86 _CreateTestSpec('Android One Perf', 'android-one',
87 required_apks=['ChromePublic.apk'], num_device_shards=7,
88 num_host_shards=3, target_bits=32),
89 _CreateTestSpec('Android Nexus5X WebView Perf', 'android-webview-nexus5X',
90 required_apks=['SystemWebView.apk', 'SystemWebViewShell.apk'],
91 num_device_shards=7, num_host_shards=3, target_bits=64,
92 browser_name='android-webview', remove_system_webview=True),
93 _CreateTestSpec('Android Nexus6 WebView Perf', 'android-webview-nexus6',
94 required_apks=['SystemWebView.apk', 'SystemWebViewShell.apk'],
95 num_device_shards=6, num_host_shards=3, target_bits=32,
96 browser_name='android-webview', remove_system_webview=True),
97 ]
98 master_spec = {}
99 for spec in testers:
100 master_spec.update(spec)
101 return master_spec
102
103 def _ChromiumPerfFyiTesters():
104 testers = [
105 _CreateTestSpec('Android Power Nexus 5X Perf', 'android-power-nexus-5x',
106 required_apks=['ChromePublic.apk'], num_device_shards=7,
107 num_host_shards=1),
108 ]
109
110 master_spec = {}
111 for spec in testers:
112 master_spec.update(spec)
113 return master_spec
114
115 BUILDERS = freeze({
116 'chromium.perf': _ChromiumPerfTesters(),
117 'chromium.perf.fyi': _ChromiumPerfFyiTesters(),
118 })
119
120
121 def RunSteps(api):
122 mastername = api.properties['mastername']
123 buildername = api.properties['buildername']
124 # TODO(akuegel): Move the configs in builders.py in chromium_tests to this
125 # recipe, and get rid of duplications.
126 builder = dict(BUILDERS[mastername][buildername])
127 builder_config = builder.get('recipe_config', 'base_config')
128 kwargs = {
129 'REPO_NAME':'src',
130 'REPO_URL':REPO_URL,
131 'INTERNAL':False,
132 'BUILD_CONFIG':'Release',
133 'TARGET_PLATFORM':'android',
134 }
135
136 api.chromium_android.set_config(builder_config, **kwargs)
137 api.chromium.set_config(builder_config, **kwargs)
138 api.gclient.set_config('perf')
139 api.gclient.apply_config('android')
140
141 bot_update_step = api.bot_update.ensure_checkout()
142
143 test_spec_file = builder.get('test_spec_file')
144 test_spec = {}
145 if test_spec_file:
146 test_spec = api.chromium_tests.read_test_spec(api, test_spec_file)
147
148 scripts_compile_targets = \
149 api.chromium_tests.get_compile_targets_for_scripts().json.output
150
151 builder['tests'] = api.chromium_tests.generate_tests_from_test_spec(
152 api, test_spec, builder, buildername, mastername, False, None,
153 scripts_compile_targets, [api.chromium_tests.steps.generate_script],
154 bot_update_step)
155
156 api.path['checkout'] = api.path['slave_build'].join('src')
157 api.chromium_android.clean_local_files()
158
159 # TODO(jbudorick): Remove this after resolving
160 # https://github.com/catapult-project/catapult/issues/2901
161 devil_path = api.path['checkout'].join('third_party', 'catapult', 'devil')
162 api.python.inline(
163 'initialize devil',
164 """
165 import sys
166 sys.path.append(sys.argv[1])
167 from devil import devil_env
168 devil_env.config.Initialize()
169 devil_env.config.PrefetchPaths(dependencies=['adb'])
170 """,
171 args=[devil_path])
172 api.adb.set_adb_path(
173 devil_path.join('bin', 'deps', 'linux2', 'x86_64', 'bin', 'adb'))
174
175 api.chromium_android.download_build(bucket=builder['bucket'],
176 path=builder['path'](api))
177
178 api.chromium_android.common_tests_setup_steps(
179 perf_setup=True,
180 remove_system_webview=builder.get('remove_system_webview', False))
181
182 required_apks = builder.get('required_apks', [])
183 for apk in required_apks:
184 api.chromium_android.adb_install_apk(apk)
185
186 api.chromium_android.host_info(
187 args=api.chromium_tests.get_common_args_for_scripts())
188
189 test_runner = api.chromium_tests.create_test_runner(
190 api, builder.get('tests', []))
191
192 try:
193 failures = []
194 if test_runner:
195 try:
196 test_runner()
197 except api.step.StepFailure as f:
198 failures.append(f)
199
200 dynamic_perf_tests = api.chromium_tests.steps.DynamicPerfTests(
201 builder['perf_id'], 'android', None,
202 max_battery_temp=builder.get('max_battery_temp'),
203 num_device_shards=builder['num_device_shards'],
204 num_host_shards=builder.get('num_host_shards', 1),
205 shard_index=builder.get('shard_index', 0),
206 override_browser_name=builder.get('browser_name'),
207 enable_platform_mode=builder.get('enable_platform_mode'))
208 dynamic_perf_tests.run(api, None)
209
210 if failures:
211 raise api.step.StepFailure('src-side perf tests failed %s' % failures)
212 finally:
213 api.chromium_android.common_tests_final_steps(
214 logcat_gs_bucket='chromium-android')
215
216
217 def _sanitize_nonalpha(text):
218 return ''.join(c if c.isalnum() else '_' for c in text)
219
220
221 def GenTests(api):
222 for mastername, builders in BUILDERS.iteritems():
223 for buildername in builders:
224 yield (
225 api.test('full_%s_%s' % (_sanitize_nonalpha(mastername),
226 _sanitize_nonalpha(buildername))) +
227 api.properties.generic(
228 path_config='kitchen',
229 repo_name='src',
230 repo_url=REPO_URL,
231 mastername=mastername,
232 buildername=buildername,
233 parent_buildername='parent_buildername',
234 parent_buildnumber='1729',
235 parent_revision='deadbeef',
236 revision='deadbeef',
237 slavename='slavename',
238 target='Release'))
239 yield (api.test('provision_devices') +
240 api.properties.generic(
241 path_config='kitchen',
242 repo_name='src',
243 repo_url=REPO_URL,
244 mastername='chromium.perf',
245 buildername='Android Nexus5 Perf (1)',
246 parent_buildername='parent_buildername',
247 parent_buildnumber='1729',
248 parent_revision='deadbeef',
249 revision='deadbeef',
250 slavename='slavename',
251 target='Release')
252 + api.step_data('provision_devices', retcode=1))
253 yield (api.test('get_perf_test_list_old_data') +
254 api.properties.generic(
255 path_config='kitchen',
256 repo_name='src',
257 repo_url=REPO_URL,
258 mastername='chromium.perf',
259 buildername='Android Nexus5 Perf (1)',
260 parent_buildername='parent_buildername',
261 parent_buildnumber='1729',
262 parent_revision='deadbeef',
263 revision='deadbeef',
264 slavename='slavename',
265 target='Release') +
266 api.override_step_data(
267 'get perf test list',
268 api.json.output(['perf_test.foo', 'page_cycler.foo'])))
269 yield (api.test('src_side_script_fails') +
270 api.properties.generic(
271 path_config='kitchen',
272 repo_name='src',
273 repo_url=REPO_URL,
274 mastername='chromium.perf',
275 buildername='Android Nexus5 Perf (1)',
276 parent_buildername='parent_buildername',
277 parent_buildnumber='1729',
278 parent_revision='deadbeef',
279 revision='deadbeef',
280 slavename='slavename',
281 target='Release') +
282 api.override_step_data(
283 'read test spec (chromium.perf.json)',
284 api.json.output({
285 "Android Nexus5 Perf (1)": {
286 "scripts": [
287 {
288 "name": "host_info",
289 "script": "host_info.py"
290 }]}})) +
291 api.step_data('host_info', retcode=1))
292 yield (api.test('test_failure') +
293 api.properties.generic(
294 path_config='kitchen',
295 repo_name='src',
296 repo_url=REPO_URL,
297 mastername='chromium.perf',
298 buildername='Android Nexus5 Perf (1)',
299 parent_buildername='parent_buildername',
300 parent_buildnumber='1729',
301 parent_revision='deadbeef',
302 revision='deadbeef',
303 slavename='slavename',
304 target='Release') +
305 api.override_step_data(
306 'perf_test.foo', retcode=1))
307 yield (api.test('missing_device') +
308 api.properties.generic(
309 path_config='kitchen',
310 repo_name='src',
311 repo_url=REPO_URL,
312 mastername='chromium.perf',
313 buildername='Android Nexus5 Perf (1)',
314 parent_buildername='parent_buildername',
315 parent_buildnumber='1729',
316 parent_revision='deadbeef',
317 revision='deadbeef',
318 slavename='slavename',
319 target='Release') +
320 api.override_step_data(
321 'perf_test.foo', retcode=87))
322 yield (api.test('host_info_failure') +
323 api.properties.generic(
324 path_config='kitchen',
325 repo_name='src',
326 repo_url=REPO_URL,
327 mastername='chromium.perf',
328 buildername='Android Nexus5 Perf (1)',
329 parent_buildername='parent_buildername',
330 parent_buildnumber='1729',
331 parent_revision='deadbeef',
332 revision='deadbeef',
333 slavename='slavename',
334 target='Release') +
335 api.override_step_data(
336 'Host Info',
337 api.json.output({
338 'valid': True,
339 'failures': ['Failure A', 'Failure B'],
340 '_host_info': {
341 'os_system': 'os_system',
342 'os_release': 'os_release',
343 'processor': 'processor',
344 'num_cpus': 'num_cpus',
345 'free_disk_space': 'free_disk_space',
346 'python_version': 'python_version',
347 'python_path': 'python_path',
348 'devices': [{
349 "usb_status": True,
350 "blacklisted": None,
351 "ro.build.fingerprint": "fingerprint",
352 "battery": {
353 "status": "5",
354 "scale": "100",
355 "temperature": "240",
356 "level": "100",
357 "technology": "Li-ion",
358 "AC powered": "false",
359 "health": "2",
360 "voltage": "4302",
361 "Wireless powered": "false",
362 "USB powered": "true",
363 "Max charging current": "500000",
364 "present": "true"
365 },
366 "adb_status": "device",
367 "imei_slice": "",
368 "ro.build.product": "bullhead",
369 "ro.build.id": "MDB08Q",
370 "serial": "00d0d567893340f4",
371 "wifi_ip": ""
372 }]
373 }}),
374 retcode=87))
375
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698