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

Side by Side Diff: scripts/slave/recipes/chromium_mojo.py

Issue 1681033003: Remove Mandoline FYI upload step and perf testing (Closed) Base URL: https://chromium.googlesource.com/chromium/tools/build.git@master
Patch Set: Add mojo:tests compile target. Created 4 years, 10 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 2014 The Chromium Authors. All rights reserved. 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 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 re 5 import re
6 6
7 from recipe_engine.types import freeze 7 from recipe_engine.types import freeze
8 from recipe_engine import recipe_api 8 from recipe_engine import recipe_api
9 9
10 DEPS = [ 10 DEPS = [
11 'depot_tools/bot_update', 11 'depot_tools/bot_update',
12 'chromium', 12 'chromium',
13 'chromium_android', 13 'chromium_android',
14 'file',
15 'gsutil',
16 'recipe_engine/raw_io',
17 'recipe_engine/path', 14 'recipe_engine/path',
18 'recipe_engine/platform',
19 'recipe_engine/properties', 15 'recipe_engine/properties',
20 'recipe_engine/python', 16 'recipe_engine/python',
21 'recipe_engine/step', 17 'recipe_engine/step',
22 ] 18 ]
23 19
24
25 BUILDERS = freeze({ 20 BUILDERS = freeze({
26 'chromium.mojo': { 21 'chromium.mojo': {
27 'builders': { 22 'builders': {
28 'Chromium Mojo Linux': { 23 'Chromium Mojo Linux': {
29 'chromium_config_kwargs': { 24 'chromium_config_kwargs': {
30 'BUILD_CONFIG': 'Release', 25 'BUILD_CONFIG': 'Release',
31 'TARGET_PLATFORM': 'linux', 26 'TARGET_PLATFORM': 'linux',
32 }, 27 },
33 }, 28 },
34 'Chromium Mojo Android': { 29 'Chromium Mojo Android': {
35 'chromium_config': 'android', 30 'chromium_config': 'android',
36 'chromium_config_kwargs': { 31 'chromium_config_kwargs': {
37 'BUILD_CONFIG': 'Release', 32 'BUILD_CONFIG': 'Release',
38 'TARGET_PLATFORM': 'android', 33 'TARGET_PLATFORM': 'android',
39 'TARGET_ARCH': 'arm', 34 'TARGET_ARCH': 'arm',
40 'TARGET_BITS': 32, 35 'TARGET_BITS': 32,
41 }, 36 },
42 'gclient_apply_config': ['android'], 37 'gclient_apply_config': ['android'],
43 }, 38 },
44 'Chromium Mojo Linux Perf': {
45 'chromium_config_kwargs': {
46 'BUILD_CONFIG': 'Release',
47 'TARGET_PLATFORM': 'linux',
48 },
49 'run_perf_tests': True,
50 'perf_test_info': {
51 'browser_type': 'mandoline-release',
52 'perf_id': 'mandoline-linux-release',
53 'supported_testnames': [
54 'blink_perf.dom',
55 'blink_perf.events',
56 'blink_perf.mutation',
57 'blink_perf.shadow_dom',
58 'page_cycler.typical_25',
59 'startup.cold.blank_page',
60 'startup.warm.blank_page',
61 ],
62 },
63 },
64 'Chromium Mojo Android Nexus5 Perf': {
65 'chromium_config': 'android',
66 'chromium_config_kwargs': {
67 'BUILD_CONFIG': 'Release',
68 'TARGET_PLATFORM': 'android',
69 'TARGET_ARCH': 'arm',
70 'TARGET_BITS': 32,
71 },
72 'gclient_apply_config': ['android'],
73 # TODO(yzshen): Actually run perf tests.
74 },
75 'Chromium Mojo Windows': { 39 'Chromium Mojo Windows': {
76 'chromium_config_kwargs': { 40 'chromium_config_kwargs': {
77 'BUILD_CONFIG': 'Release', 41 'BUILD_CONFIG': 'Release',
78 'TARGET_PLATFORM': 'win', 42 'TARGET_PLATFORM': 'win',
79 }, 43 },
80 }, 44 },
81 'Chromium Mojo Windows 7 Perf': {
82 'chromium_config_kwargs': {
83 'BUILD_CONFIG': 'Release',
84 'TARGET_PLATFORM': 'win',
85 },
86 'run_perf_tests': True,
87 'perf_test_info': {
88 'browser_type': 'mandoline-release',
89 'perf_id': 'mandoline-win7-release',
90 'supported_testnames': [
91 'blink_perf.dom',
92 'blink_perf.events',
93 'blink_perf.mutation',
94 'blink_perf.shadow_dom',
95 'page_cycler.typical_25',
96 'startup.cold.blank_page',
97 'startup.warm.blank_page',
98 ],
99 },
100 },
101 }, 45 },
102 }, 46 },
103 }) 47 })
104 48
105 49
106 def _GetBotConfig(api):
107 mastername = api.properties.get('mastername')
108 buildername = api.properties.get('buildername')
109 master_dict = BUILDERS.get(mastername, {})
110 bot_config = master_dict.get('builders', {}).get(buildername, {})
111 return bot_config
112
113
114 @recipe_api.composite_step
115 def _UploadMandolineToGoogleStorage(api):
116 # Get the release version, which is updated daily for Chrome canary.
117 v = api.chromium.get_version()
118 version = '%s.%s.%s.%s' % (v['MAJOR'], v['MINOR'], v['BUILD'], v['PATCH'])
119 assert re.match('^\d+\.\d+\.\d+\.\d+$', version), 'Error: Bad version %r' % v
120 api.step.active_result.presentation.step_text = 'Found version %s' % version
121
122 # Check if the current version is already uploaded for the given platform.
123 bucket = 'mandoline'
124 url = 'gs://%s/%s' % (bucket, version)
125 result = api.gsutil.ls(bucket, '', stdout=api.raw_io.output())
126 result.presentation.logs['ls result stdout'] = [result.stdout or '']
127 if result.stdout and url in result.stdout:
128 result = api.gsutil.ls(bucket, version, stdout=api.raw_io.output())
129 result.presentation.logs['ls result stdout'] = [result.stdout or '']
130 url = '%s/%s' % (url, api.chromium.c.TARGET_PLATFORM)
131
132 if result.stdout and url in result.stdout:
133 api.step('skipping mandoline upload: release already exits', None)
134 return
135
136 # Read a limited FILES.cfg file-list format, uploading each applicable entry.
137 # Also clobber and upload a copy of the files to the 'latest' build directory.
138 files = api.path['checkout'].join('mandoline', 'tools', 'data', 'FILES.cfg')
139 test_data = 'FILES=[{\'filepath\': \'foo\', \'platforms\': [\'linux\'],},]'
140 files_data = api.file.read('read FILES.cfg', files, test_data=test_data)
141 execution_globals = {}
142 exec(files_data, execution_globals)
143 gs_path = '%s/%s' % (version, api.chromium.c.TARGET_PLATFORM)
144 gs_latest_path = 'latest/%s' % api.chromium.c.TARGET_PLATFORM
145 api.gsutil.remove_url('gs://%s/%s' % (bucket, gs_latest_path), args=['-r'])
146 for file_dictionary in execution_globals['FILES']:
147 if api.chromium.c.TARGET_PLATFORM in file_dictionary['platforms']:
148 file_path = file_dictionary['filepath']
149 local_path = api.chromium.output_dir.join(file_path)
150 remote_path = '%s/%s' % (gs_path, file_path)
151 args = ['-r'] if file_dictionary.get('directory', False) else []
152 api.gsutil.upload(local_path, bucket, remote_path, args=args)
153 remote_path = '%s/%s' % (gs_latest_path, file_path)
154 api.gsutil.upload(local_path, bucket, remote_path, args=args)
155
156 # Upload a stamp file to inform any observers that the upload is complete.
157 stamp_path = api.path.mkdtemp('upload_stamp').join('stamp')
158 api.file.write('Create upload stamp', stamp_path, 'Upload complete')
159 api.gsutil.upload(stamp_path, bucket, '%s/stamp' % gs_path)
160 api.gsutil.upload(stamp_path, bucket, '%s/stamp' % gs_latest_path)
161
162
163 @recipe_api.composite_step 50 @recipe_api.composite_step
164 def _RunApptests(api): 51 def _RunApptests(api):
165 # TODO(msw): Run and get compile targets via testing/scripts/mojo_apptests.py. 52 # TODO(msw): Run and get compile targets via testing/scripts/mojo_apptests.py.
166 runner = api.path['checkout'].join('mojo', 'tools', 'apptest_runner.py') 53 runner = api.path['checkout'].join('mojo', 'tools', 'apptest_runner.py')
167 api.python('app_tests', runner, [api.chromium.output_dir, '--verbose']) 54 api.python('app_tests', runner, [api.chromium.output_dir, '--verbose'])
168 55
169 56
170 def _RunUnitAndAppTests(api): 57 def _RunUnitAndAppTests(api):
171 with api.step.defer_results(): 58 with api.step.defer_results():
172 api.chromium.runtest('html_viewer_unittests')
173 api.chromium.runtest('ipc_mojo_unittests') 59 api.chromium.runtest('ipc_mojo_unittests')
174 api.chromium.runtest('mojo_common_unittests') 60 api.chromium.runtest('mojo_common_unittests')
175 61
176 # TODO(yzshen): fix missing JS files on Android. crbug.com/536669 62 # TODO(yzshen): fix missing JS files on Android. crbug.com/536669
177 if api.chromium.c.TARGET_PLATFORM != 'android': 63 if api.chromium.c.TARGET_PLATFORM != 'android':
178 api.chromium.runtest('mojo_js_integration_tests') 64 api.chromium.runtest('mojo_js_integration_tests')
179 api.chromium.runtest('mojo_js_unittests') 65 api.chromium.runtest('mojo_js_unittests')
180 66
181 api.chromium.runtest('mojo_public_application_unittests') 67 api.chromium.runtest('mojo_public_application_unittests')
182 api.chromium.runtest('mojo_public_bindings_unittests') 68 api.chromium.runtest('mojo_public_bindings_unittests')
183 api.chromium.runtest('mojo_public_environment_unittests') 69 api.chromium.runtest('mojo_public_environment_unittests')
184 api.chromium.runtest('mojo_public_system_unittests') 70 api.chromium.runtest('mojo_public_system_unittests')
185 api.chromium.runtest('mojo_public_utility_unittests') 71 api.chromium.runtest('mojo_public_utility_unittests')
186 api.chromium.runtest('mojo_runner_host_unittests') 72 api.chromium.runtest('mojo_runner_host_unittests')
187 api.chromium.runtest('mojo_shell_unittests') 73 api.chromium.runtest('mojo_shell_unittests')
188 api.chromium.runtest('mojo_surfaces_lib_unittests') 74 api.chromium.runtest('mojo_surfaces_lib_unittests')
189 api.chromium.runtest('mojo_system_unittests') 75 api.chromium.runtest('mojo_system_unittests')
190 api.chromium.runtest('mojo_view_manager_lib_unittests') 76 api.chromium.runtest('mojo_view_manager_lib_unittests')
191 api.chromium.runtest('resource_provider_unittests') 77 api.chromium.runtest('resource_provider_unittests')
192 api.chromium.runtest('window_manager_unittests') 78 api.chromium.runtest('window_manager_unittests')
193 _RunApptests(api) 79 _RunApptests(api)
194 80
195 81
196 def _RunPerfTests(api, perf_test_info):
197 tests = api.chromium.list_perf_tests(perf_test_info['browser_type'], 1)
198
199 # TODO(yzshen): Remove this filter once we annotate tests disabled for
200 # Mandoline in Telemetry. Consider reusing
201 # chromium_tests.steps.DynamicPerfTests.
202 tests = dict((k, v) for k, v in tests.json.output['steps'].iteritems()
203 if str(k) in perf_test_info['supported_testnames'])
204
205 with api.step.defer_results():
206 for test_name, test in sorted(tests.iteritems()):
207 test_name = str(test_name)
208 annotate = api.chromium.get_annotate_by_test_name(test_name)
209 cmd = test['cmd'].split()
210 cmd.extend(
211 ['--extra-browser-args=--override-use-gl-with-osmesa-for-tests'])
212
213 api.chromium.runtest(
214 cmd[1] if len(cmd) > 1 else cmd[0],
215 args=cmd[2:],
216 name=test_name,
217 annotate=annotate,
218 python_mode=True,
219 results_url='https://chromeperf.appspot.com',
220 perf_dashboard_id=test.get('perf_dashboard_id', test_name),
221 perf_id=perf_test_info['perf_id'],
222 test_type=test.get('perf_dashboard_id', test_name),
223 xvfb=True,
224 chartjson_file=True)
225
226
227 def RunSteps(api): 82 def RunSteps(api):
228 # TODO(yzshen): Perf bots should retrieve build results from builders of the
229 # same architecture.
230 api.chromium.configure_bot(BUILDERS, ['gn']) 83 api.chromium.configure_bot(BUILDERS, ['gn'])
231 84
232 api.bot_update.ensure_checkout(force=True) 85 api.bot_update.ensure_checkout(force=True)
233 86
234 api.chromium.runhooks() 87 api.chromium.runhooks()
235 88
236 api.chromium.run_mb(api.properties.get('mastername'), 89 api.chromium.run_mb(api.properties.get('mastername'),
237 api.properties.get('buildername'), 90 api.properties.get('buildername'),
238 use_goma=True) 91 use_goma=True)
239 92
240 compile_targets = ['mandoline:all'] 93 api.chromium.compile(targets=['mojo:tests', 'mojo_apptests'])
241 if api.chromium.c.TARGET_PLATFORM != 'android':
242 compile_targets.append('mash/wm:tests')
243 api.chromium.compile(targets=compile_targets)
244 94
245 if api.chromium.c.TARGET_PLATFORM == 'android': 95 if api.chromium.c.TARGET_PLATFORM == 'android':
246 api.chromium_android.detect_and_setup_devices() 96 api.chromium_android.detect_and_setup_devices()
247 97
248 bot_config = _GetBotConfig(api) 98 _RunUnitAndAppTests(api)
249 if bot_config.get('run_perf_tests', False):
250 _RunPerfTests(api, bot_config['perf_test_info'])
251 else:
252 _RunUnitAndAppTests(api)
253 _UploadMandolineToGoogleStorage(api)
254 99
255 100
256 def GenTests(api): 101 def GenTests(api):
257 for test in api.chromium.gen_tests_for_builders(BUILDERS): 102 for test in api.chromium.gen_tests_for_builders(BUILDERS):
258 yield test 103 yield test
259
260 # Ensure upload is skipped if version/platform binaries are already uploaded.
261 test = api.test('test_upload_skipped_for_existing_binaries')
262 test += api.platform.name('linux')
263 test += api.properties.generic(buildername='Chromium Mojo Android',
264 mastername='chromium.mojo')
265 # This relies on api.chromium.get_version's hard-coded step_test_data version.
266 test_ls = api.raw_io.output('gs://mandoline/37.0.2021.0/android/')
267 test += api.step_data('gsutil ls gs://mandoline/', stdout=test_ls)
268 test += api.step_data('gsutil ls gs://mandoline/37.0.2021.0', stdout=test_ls)
269 yield test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698