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

Side by Side Diff: scripts/slave/recipe_modules/webrtc/api.py

Issue 505153002: WebRTC: Remove android_apk recipe (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/build
Patch Set: Rebased Created 6 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 | Annotate | Revision Log
OLDNEW
1 # Copyright 2013 The Chromium Authors. All rights reserved. 1 # Copyright 2013 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 from slave import recipe_api 5 from slave import recipe_api
6 from slave.recipe_modules.webrtc import builders 6 from slave.recipe_modules.webrtc import builders
7 7
8 8
9 class WebRTCApi(recipe_api.RecipeApi): 9 class WebRTCApi(recipe_api.RecipeApi):
10 def __init__(self, **kwargs): 10 def __init__(self, **kwargs):
11 super(WebRTCApi, self).__init__(**kwargs) 11 super(WebRTCApi, self).__init__(**kwargs)
12 self._env = {} 12 self._env = {}
13 13
14 BUILDERS = builders.BUILDERS 14 BUILDERS = builders.BUILDERS
15 RECIPE_CONFIGS = builders.RECIPE_CONFIGS 15 RECIPE_CONFIGS = builders.RECIPE_CONFIGS
16 16
17 COMMON_TESTS = [ 17 COMMON_TESTS = [
18 'audio_decoder_unittests', 18 'audio_decoder_unittests',
19 'common_audio_unittests', 19 'common_audio_unittests',
20 'common_video_unittests', 20 'common_video_unittests',
21 'modules_tests', 21 'modules_tests',
22 'modules_unittests', 22 'modules_unittests',
23 'system_wrappers_unittests', 23 'system_wrappers_unittests',
24 'test_support_unittests', 24 'test_support_unittests',
25 'tools_unittests', 25 'tools_unittests',
26 'video_engine_core_unittests', 26 'video_engine_core_unittests',
27 'video_engine_tests', 27 'video_engine_tests',
28 'voice_engine_unittests', 28 'voice_engine_unittests',
29 ] 29 ]
30 30
31 ANDROID_APK_TESTS = COMMON_TESTS + [ 31 # Android APK tests. Mapping between test name and isolate file location.
32 'video_capture_tests', 32 ANDROID_APK_TESTS = {
33 'webrtc_perf_tests', 33 'audio_decoder_unittests': 'webrtc/modules/audio_coding/neteq',
34 ] 34 'common_audio_unittests': 'webrtc/common_audio',
35 'common_video_unittests': 'webrtc/common_video',
36 'modules_tests': 'webrtc/modules',
37 'modules_unittests': 'webrtc/modules',
38 'system_wrappers_unittests': 'webrtc/system_wrappers/source',
39 'test_support_unittests': 'webrtc/test',
40 'tools_unittests': 'webrtc/tools',
41 'video_capture_tests': 'webrtc/modules/video_capture',
42 'video_engine_tests': 'webrtc',
43 'video_engine_core_unittests': 'webrtc/video_engine',
44 'voice_engine_unittests': 'webrtc/voice_engine',
45 'webrtc_perf_tests': 'webrtc',
46 }
35 47
36 NORMAL_TESTS = sorted(COMMON_TESTS + [ 48 NORMAL_TESTS = sorted(COMMON_TESTS + [
37 'libjingle_media_unittest', 49 'libjingle_media_unittest',
38 'libjingle_p2p_unittest', 50 'libjingle_p2p_unittest',
39 'libjingle_peerconnection_unittest', 51 'libjingle_peerconnection_unittest',
40 'libjingle_sound_unittest', 52 'libjingle_sound_unittest',
41 'libjingle_unittest', 53 'libjingle_unittest',
42 ]) 54 ])
43 55
44 # Map of GS archive names to urls. 56 # Map of GS archive names to urls.
45 # TODO(kjellander): Convert to use the auto-generated URLs once we've setup a 57 # TODO(kjellander): Convert to use the auto-generated URLs once we've setup a
46 # separate bucket per master. 58 # separate bucket per master.
47 GS_ARCHIVES = { 59 GS_ARCHIVES = {
48 'android_dbg_archive': 'gs://chromium-webrtc/android_chromium_dbg', 60 'android_dbg_archive': 'gs://chromium-webrtc/android_chromium_dbg',
49 'android_dbg_archive_fyi': ('gs://chromium-webrtc/' 61 'android_dbg_archive_fyi': ('gs://chromium-webrtc/'
50 'android_chromium_trunk_dbg'), 62 'android_chromium_trunk_dbg'),
51 'android_apk_dbg_archive': 'gs://chromium-webrtc/android_dbg', 63 'android_apk_dbg_archive': 'gs://chromium-webrtc/android_dbg',
52 'android_apk_rel_archive': 'gs://chromium-webrtc/android_rel', 64 'android_apk_rel_archive': 'gs://chromium-webrtc/android_rel',
53 'win_rel_archive': 'gs://chromium-webrtc/Win Builder', 65 'win_rel_archive': 'gs://chromium-webrtc/Win Builder',
54 'win_rel_archive_fyi': 'gs://chromium-webrtc/win_rel-fyi', 66 'win_rel_archive_fyi': 'gs://chromium-webrtc/win_rel-fyi',
55 'mac_rel_archive': 'gs://chromium-webrtc/Mac Builder', 67 'mac_rel_archive': 'gs://chromium-webrtc/Mac Builder',
56 'linux_rel_archive': 'gs://chromium-webrtc/Linux Builder', 68 'linux_rel_archive': 'gs://chromium-webrtc/Linux Builder',
57 } 69 }
58 70
59 DASHBOARD_UPLOAD_URL = 'https://chromeperf.appspot.com' 71 DASHBOARD_UPLOAD_URL = 'https://chromeperf.appspot.com'
60 72
61 def runtests(self, test_suite=None, revision=None): 73 def runtests(self, test_suite=None, revision=None):
62 """Generate a list of tests to run. 74 """Add a suite of test steps.
63 75
64 Args: 76 Args:
65 test_suite: The name of the test suite. 77 test_suite: The name of the test suite.
66 revision: Revision for the build. Mandatory for perf measuring tests. 78 revision: Revision for the build. Mandatory for perf measuring tests.
67 """ 79 """
68 steps = []
69 if test_suite == 'webrtc': 80 if test_suite == 'webrtc':
70 for test in self.NORMAL_TESTS: 81 for test in self.NORMAL_TESTS:
71 steps.append(self.add_test(test)) 82 self.add_test(test)
72 83
73 if self.m.platform.is_mac and self.m.chromium.c.TARGET_BITS == 64: 84 if self.m.platform.is_mac and self.m.chromium.c.TARGET_BITS == 64:
74 test = self.m.path.join('libjingle_peerconnection_objc_test.app', 85 test = self.m.path.join('libjingle_peerconnection_objc_test.app',
75 'Contents', 'MacOS', 86 'Contents', 'MacOS',
76 'libjingle_peerconnection_objc_test') 87 'libjingle_peerconnection_objc_test')
77 steps.append(self.add_test(test, 88 self.add_test(test, name='libjingle_peerconnection_objc_test')
78 name='libjingle_peerconnection_objc_test'))
79 elif test_suite == 'webrtc_baremetal': 89 elif test_suite == 'webrtc_baremetal':
80 # Add baremetal tests, which are different depending on the platform. 90 # Add baremetal tests, which are different depending on the platform.
81 if self.m.platform.is_win or self.m.platform.is_mac: 91 if self.m.platform.is_win or self.m.platform.is_mac:
82 steps.append(self.add_test('audio_device_tests')) 92 self.add_test('audio_device_tests')
83 elif self.m.platform.is_linux: 93 elif self.m.platform.is_linux:
84 f = self.m.path['checkout'].join 94 f = self.m.path['checkout'].join
85 steps.append(self.add_test( 95 self.add_test(
86 'audioproc', 96 'audioproc',
87 args=['-aecm', '-ns', '-agc', '--fixed_digital', '--perf', '-pb', 97 args=['-aecm', '-ns', '-agc', '--fixed_digital', '--perf', '-pb',
88 f('resources', 'audioproc.aecdump')], 98 f('resources', 'audioproc.aecdump')],
89 revision=revision, 99 revision=revision,
90 perf_test=True)) 100 perf_test=True)
91 steps.append(self.add_test( 101 self.add_test(
92 'iSACFixtest', 102 'iSACFixtest',
93 args=['32000', f('resources', 'speech_and_misc_wb.pcm'), 103 args=['32000', f('resources', 'speech_and_misc_wb.pcm'),
94 'isac_speech_and_misc_wb.pcm'], 104 'isac_speech_and_misc_wb.pcm'],
95 revision=revision, 105 revision=revision,
96 perf_test=True)) 106 perf_test=True)
97 steps.append(self.virtual_webcam_check()) 107 self.virtual_webcam_check()
98 steps.append(self.add_test( 108 self.add_test(
99 'libjingle_peerconnection_java_unittest', 109 'libjingle_peerconnection_java_unittest',
100 env={'LD_PRELOAD': '/usr/lib/x86_64-linux-gnu/libpulse.so.0'})) 110 env={'LD_PRELOAD': '/usr/lib/x86_64-linux-gnu/libpulse.so.0'})
101 111
102 steps.append(self.virtual_webcam_check()) 112 self.virtual_webcam_check()
103 steps.append(self.add_test( 113 self.add_test(
104 'vie_auto_test', 114 'vie_auto_test',
105 args=['--automated', 115 args=['--automated',
106 '--capture_test_ensure_resolution_alignment_in_capture_device=' 116 '--capture_test_ensure_resolution_alignment_in_capture_device='
107 'false'], 117 'false'],
108 revision=revision, 118 revision=revision,
109 perf_test=True)) 119 perf_test=True)
110 steps.append(self.add_test('voe_auto_test', args=['--automated'])) 120 self.add_test('voe_auto_test', args=['--automated'])
111 steps.append(self.virtual_webcam_check()) 121 self.virtual_webcam_check()
112 steps.append(self.add_test('video_capture_tests')) 122 self.add_test('video_capture_tests')
113 steps.append(self.add_test('webrtc_perf_tests', revision=revision, 123 self.add_test('webrtc_perf_tests', revision=revision, perf_test=True)
114 perf_test=True))
115 elif test_suite == 'chromium': 124 elif test_suite == 'chromium':
116 # Many of these tests run in the Chromium WebRTC waterfalls are not run in 125 # Many of these tests run in the Chromium WebRTC waterfalls are not run in
117 # the main Chromium waterfalls as they are marked as MANUAL_. This is 126 # the main Chromium waterfalls as they are marked as MANUAL_. This is
118 # because they rely on physical audio and video devices, which are only 127 # because they rely on physical audio and video devices, which are only
119 # available at bare-metal machines. 128 # available at bare-metal machines.
120 steps.append(self.add_test( 129 self.add_test(
121 'content_browsertests', 130 'content_browsertests',
122 args=['--gtest_filter=WebRtc*', '--run-manual', 131 args=['--gtest_filter=WebRtc*', '--run-manual',
123 '--test-launcher-print-test-stdio=always', 132 '--test-launcher-print-test-stdio=always',
124 '--test-launcher-bot-mode'], 133 '--test-launcher-bot-mode'],
125 revision=revision, 134 revision=revision,
126 perf_test=True)) 135 perf_test=True)
127 steps.append(self.add_test( 136 self.add_test(
128 'browser_tests', 137 'browser_tests',
129 # These tests needs --test-launcher-jobs=1 since some of them are 138 # These tests needs --test-launcher-jobs=1 since some of them are
130 # not able to run in parallel (due to the usage of the 139 # not able to run in parallel (due to the usage of the
131 # peerconnection server). 140 # peerconnection server).
132 args = ['--gtest_filter=WebRtc*:TabCapture*', 141 args = ['--gtest_filter=WebRtc*:TabCapture*',
133 '--run-manual', '--ui-test-action-max-timeout=300000', 142 '--run-manual', '--ui-test-action-max-timeout=300000',
134 '--test-launcher-jobs=1', 143 '--test-launcher-jobs=1',
135 '--test-launcher-bot-mode', 144 '--test-launcher-bot-mode',
136 '--test-launcher-print-test-stdio=always'], 145 '--test-launcher-print-test-stdio=always'],
137 revision=revision, 146 revision=revision,
138 perf_test=True)) 147 perf_test=True)
139 steps.append(self.add_test( 148 self.add_test(
140 'content_unittests', 149 'content_unittests',
141 args=['--gtest_filter=WebRtc*:WebRTC*:RTC*:MediaStream*'])) 150 args=['--gtest_filter=WebRtc*:WebRTC*:RTC*:MediaStream*'])
151 elif test_suite == 'android':
152 self.m.chromium_android.common_tests_setup_steps()
142 153
143 return steps 154 for test in sorted(self.ANDROID_APK_TESTS.keys()):
155 # Add the filename of the test.isolate files to the path.
156 isolate_file = self.m.path.join(self.ANDROID_APK_TESTS[test],
157 '%s.isolate' % test)
158 self.test_runner(test, isolate_file)
159
160 self.m.chromium_android.common_tests_final_steps()
144 161
145 def add_test(self, test, name=None, args=None, revision=None, env=None, 162 def add_test(self, test, name=None, args=None, revision=None, env=None,
146 perf_test=False, perf_dashboard_id=None): 163 perf_test=False, perf_dashboard_id=None):
147 """Helper function to invoke chromium.runtest(). 164 """Helper function to invoke chromium.runtest().
148 165
149 Notice that the name parameter should be the same as the test executable in 166 Notice that the name parameter should be the same as the test executable in
150 order to get the stdio links in the perf dashboard to become correct. 167 order to get the stdio links in the perf dashboard to become correct.
151 """ 168 """
152 name = name or test 169 name = name or test
153 args = args or [] 170 args = args or []
154 env = env or {} 171 env = env or {}
155 if self.c.PERF_ID and perf_test: 172 if self.c.PERF_ID and perf_test:
156 perf_dashboard_id = perf_dashboard_id or test 173 perf_dashboard_id = perf_dashboard_id or test
157 assert revision, ('Revision must be specified for perf tests as they ' 174 assert revision, ('Revision must be specified for perf tests as they '
158 'upload data to the perf dashboard.') 175 'upload data to the perf dashboard.')
159 self.m.chromium.runtest( 176 self.m.chromium.runtest(
160 test=test, args=args, name=name, 177 test=test, args=args, name=name,
161 results_url=self.DASHBOARD_UPLOAD_URL, annotate='graphing', 178 results_url=self.DASHBOARD_UPLOAD_URL, annotate='graphing',
162 xvfb=True, perf_dashboard_id=perf_dashboard_id, test_type=test, 179 xvfb=True, perf_dashboard_id=perf_dashboard_id, test_type=test,
163 env=env, revision=revision, perf_id=self.c.PERF_ID, 180 env=env, revision=revision, perf_id=self.c.PERF_ID,
164 perf_config=self.c.PERF_CONFIG) 181 perf_config=self.c.PERF_CONFIG)
165 else: 182 else:
166 self.m.chromium.runtest( 183 self.m.chromium.runtest(
167 test=test, args=args, name=name, annotate='gtest', xvfb=True, 184 test=test, args=args, name=name, annotate='gtest', xvfb=True,
168 test_type=test, env=env) 185 test_type=test, env=env)
169 186
187 def test_runner(self, test, isolate_path):
188 """Adds a test to run on Android devices.
189
190 This is a minimal version for WebRTC, similar to the methods in the
191 chromium_android recipe module. It's needed since we need to alter the
192 environment.
193 """
194 script = self.m.path['checkout'].join('build', 'android', 'test_runner.py')
195 args = ['gtest', '-s', test, '--verbose', '--isolate-file-path',
196 isolate_path]
197 if self.m.chromium.c.BUILD_CONFIG == 'Release':
198 args.append('--release')
199 env = {'CHECKOUT_SOURCE_ROOT': self.m.path['checkout']}
200 self.m.python(test, script, args, env=env)
201
170 def sizes(self, revision): 202 def sizes(self, revision):
171 # TODO(kjellander): Move this into a function of the chromium recipe 203 # TODO(kjellander): Move this into a function of the chromium recipe
172 # module instead. 204 # module instead.
173 assert self.c.PERF_ID, ('You must specify PERF_ID for the builder that ' 205 assert self.c.PERF_ID, ('You must specify PERF_ID for the builder that '
174 'runs the sizes step.') 206 'runs the sizes step.')
175 sizes_script = self.m.path['build'].join('scripts', 'slave', 'chromium', 207 sizes_script = self.m.path['build'].join('scripts', 'slave', 'chromium',
176 'sizes.py') 208 'sizes.py')
177 args = ['--target', self.m.chromium.c.BUILD_CONFIG, 209 args = ['--target', self.m.chromium.c.BUILD_CONFIG,
178 '--platform', self.m.chromium.c.TARGET_PLATFORM] 210 '--platform', self.m.chromium.c.TARGET_PLATFORM]
179 test_name = 'sizes' 211 test_name = 'sizes'
180 self.add_test( 212 self.add_test(
181 test=sizes_script, 213 test=sizes_script,
182 name=test_name, 214 name=test_name,
183 perf_dashboard_id=test_name, 215 perf_dashboard_id=test_name,
184 args=args, 216 args=args,
185 revision=revision, 217 revision=revision,
186 perf_test=True) 218 perf_test=True)
187 219
188 def package_build(self, gs_url, revision): 220 def package_build(self, gs_url, revision):
189 self.m.archive.zip_and_upload_build( 221 self.m.archive.zip_and_upload_build(
190 'package build', 222 'package build',
191 self.m.chromium.c.build_config_fs, 223 self.m.chromium.c.build_config_fs,
192 gs_url, 224 gs_url,
193 build_revision=revision) 225 build_revision=revision)
194 226
195 def extract_build(self, gs_url, revision): 227 def extract_build(self, gs_url, revision):
228 # Ensure old build directory is not used is by removing it.
229 self.m.path.rmtree(
230 'build directory',
231 self.m.chromium.c.build_dir.join(self.m.chromium.c.build_config_fs))
232
196 self.m.archive.download_and_unzip_build( 233 self.m.archive.download_and_unzip_build(
197 'extract build', 234 'extract build',
198 self.m.chromium.c.build_config_fs, 235 self.m.chromium.c.build_config_fs,
199 gs_url, 236 gs_url,
200 build_revision=revision) 237 build_revision=revision)
201 238
239 if not self.m.properties.get('parent_got_revision'):
240 raise self.m.step.StepFailure(
241 'Testers cannot be forced without providing revision information.'
242 'Please select a previous build and click [Rebuild] or force a build'
243 'for a Builder instead (will trigger new runs for the testers).')
244
202 def cleanup(self): 245 def cleanup(self):
203 if self.m.chromium.c.TARGET_PLATFORM == 'android': 246 if self.m.chromium.c.TARGET_PLATFORM == 'android':
204 self.m.chromium_android.clean_local_files() 247 self.m.chromium_android.clean_local_files()
205 else: 248 else:
206 self.m.chromium.cleanup_temp() 249 self.m.chromium.cleanup_temp()
207 250
208 def apply_svn_patch(self):
209 """Patch step for applying WebRTC patches to Chromium checkouts.
210
211 This step should only be used when patches are to be applied to WebRTC as a
212 part of a Chromium checkout. It is not supported on Windows.
213 """
214 assert self.m.chromium.c.TARGET_PLATFORM != "win", (
215 'This step is not supported on the Windows platform.')
216 script = self.m.path['build'].join('scripts', 'slave', 'apply_svn_patch.py')
217 args = ['-p', self.m.properties['patch_url'],
218 '-r', self.c.patch_root_dir]
219
220 # Allow manipulating patches for try jobs.
221 if self.c.patch_filter_script and self.c.patch_path_filter:
222 args += ['--filter-script', self.c.patch_filter_script,
223 '--strip-level', self.c.patch_strip_level,
224 '--', '--path-filter', self.c.patch_path_filter]
225 self.m.python('apply_patch', script, args)
226
227 def virtual_webcam_check(self): 251 def virtual_webcam_check(self):
228 self.m.python( 252 self.m.python(
229 'webcam_check', 253 'webcam_check',
230 self.m.path['build'].join('scripts', 'slave', 'webrtc', 254 self.m.path['build'].join('scripts', 'slave', 'webrtc',
231 'ensure_webcam_is_running.py')) 255 'ensure_webcam_is_running.py'))
OLDNEW
« no previous file with comments | « scripts/slave/recipe_modules/webrtc/__init__.py ('k') | scripts/slave/recipe_modules/webrtc/builders.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698