OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright 2016 Google Inc. | 3 # Copyright 2016 Google Inc. |
4 # | 4 # |
5 # Use of this source code is governed by a BSD-style license that can be | 5 # Use of this source code is governed by a BSD-style license that can be |
6 # found in the LICENSE file. | 6 # found in the LICENSE file. |
7 | 7 |
8 | 8 |
9 import contextlib | 9 import contextlib |
| 10 import glob |
10 import math | 11 import math |
11 import os | 12 import os |
12 import psutil | 13 import psutil |
13 import shutil | 14 import shutil |
14 import socket | 15 import socket |
15 import subprocess | 16 import subprocess |
16 import sys | 17 import sys |
17 import time | 18 import time |
18 import urllib2 | 19 import urllib2 |
19 | 20 |
20 from flavor import android_flavor | 21 from flavor import android_flavor |
21 from flavor import chromeos_flavor | 22 from flavor import chromeos_flavor |
22 from flavor import cmake_flavor | 23 from flavor import cmake_flavor |
23 from flavor import coverage_flavor | 24 from flavor import coverage_flavor |
24 from flavor import default_flavor | 25 from flavor import default_flavor |
25 from flavor import ios_flavor | 26 from flavor import ios_flavor |
26 from flavor import valgrind_flavor | 27 from flavor import valgrind_flavor |
27 from flavor import xsan_flavor | 28 from flavor import xsan_flavor |
28 | 29 |
29 | 30 |
30 CONFIG_COVERAGE = 'Coverage' | 31 CONFIG_COVERAGE = 'Coverage' |
31 CONFIG_DEBUG = 'Debug' | 32 CONFIG_DEBUG = 'Debug' |
32 CONFIG_RELEASE = 'Release' | 33 CONFIG_RELEASE = 'Release' |
33 VALID_CONFIGS = (CONFIG_COVERAGE, CONFIG_DEBUG, CONFIG_RELEASE) | 34 VALID_CONFIGS = (CONFIG_COVERAGE, CONFIG_DEBUG, CONFIG_RELEASE) |
34 | 35 |
35 BUILD_PRODUCTS_WHITELIST = [ | 36 BUILD_PRODUCTS_WHITELIST = [ |
36 'dm', 'dm.exe', | 37 'dm', |
37 'nanobench', 'nanobench.exe', | 38 'dm.exe', |
| 39 'nanobench', |
| 40 'nanobench.exe', |
| 41 '*.so', |
| 42 '*.dll', |
38 ] | 43 ] |
39 | 44 |
40 GM_ACTUAL_FILENAME = 'actual-results.json' | 45 GM_ACTUAL_FILENAME = 'actual-results.json' |
41 GM_EXPECTATIONS_FILENAME = 'expected-results.json' | 46 GM_EXPECTATIONS_FILENAME = 'expected-results.json' |
42 GM_IGNORE_TESTS_FILENAME = 'ignored-tests.txt' | 47 GM_IGNORE_TESTS_FILENAME = 'ignored-tests.txt' |
43 | 48 |
44 GOLD_UNINTERESTING_HASHES_URL = 'https://gold.skia.org/_/hashes' | 49 GOLD_UNINTERESTING_HASHES_URL = 'https://gold.skia.org/_/hashes' |
45 | 50 |
46 GS_GM_BUCKET = 'chromium-skia-gm' | 51 GS_GM_BUCKET = 'chromium-skia-gm' |
47 GS_SUMMARIES_BUCKET = 'chromium-skia-gm-summaries' | 52 GS_SUMMARIES_BUCKET = 'chromium-skia-gm-summaries' |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 print 'CWD: %s' % cwd | 254 print 'CWD: %s' % cwd |
250 print 'ENV: %s' % _env | 255 print 'ENV: %s' % _env |
251 print '============' | 256 print '============' |
252 subprocess.check_call(cmd, env=_env, cwd=cwd) | 257 subprocess.check_call(cmd, env=_env, cwd=cwd) |
253 | 258 |
254 def compile_steps(self): | 259 def compile_steps(self): |
255 for t in self.build_targets: | 260 for t in self.build_targets: |
256 self.flavor.compile(t) | 261 self.flavor.compile(t) |
257 dst = os.path.join(self.swarm_out_dir, 'out', self.configuration) | 262 dst = os.path.join(self.swarm_out_dir, 'out', self.configuration) |
258 os.makedirs(dst) | 263 os.makedirs(dst) |
259 for f in BUILD_PRODUCTS_WHITELIST: | 264 for pattern in BUILD_PRODUCTS_WHITELIST: |
260 path = os.path.join(self.out_dir, self.configuration, f) | 265 path = os.path.join(self.out_dir, self.configuration, pattern) |
261 if os.path.exists(path): | 266 for f in glob.glob(path): |
262 print 'Copying build product %s' % path | 267 print 'Copying build product %s' % f |
263 shutil.copy(path, dst) | 268 shutil.copy(f, dst) |
264 self.cleanup() | 269 self.cleanup() |
265 | 270 |
266 def _run_once(self, fn, *args, **kwargs): | 271 def _run_once(self, fn, *args, **kwargs): |
267 if not fn.__name__ in self._already_ran: | 272 if not fn.__name__ in self._already_ran: |
268 self._already_ran[fn.__name__] = True | 273 self._already_ran[fn.__name__] = True |
269 fn(*args, **kwargs) | 274 fn(*args, **kwargs) |
270 | 275 |
271 def install(self): | 276 def install(self): |
272 """Copy the required executables and files to the device.""" | 277 """Copy the required executables and files to the device.""" |
273 self.device_dirs = self.flavor.get_device_dirs() | 278 self.device_dirs = self.flavor.get_device_dirs() |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 def cleanup(self): | 483 def cleanup(self): |
479 if sys.platform == 'win32': | 484 if sys.platform == 'win32': |
480 # Kill mspdbsrv.exe, which tends to hang around after the build finishes. | 485 # Kill mspdbsrv.exe, which tends to hang around after the build finishes. |
481 for p in psutil.process_iter(): | 486 for p in psutil.process_iter(): |
482 try: | 487 try: |
483 if p.name == 'mspdbsrv.exe': | 488 if p.name == 'mspdbsrv.exe': |
484 p.kill() | 489 p.kill() |
485 except psutil._error.AccessDenied: | 490 except psutil._error.AccessDenied: |
486 pass | 491 pass |
487 self.flavor.cleanup_steps() | 492 self.flavor.cleanup_steps() |
OLD | NEW |