OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # | 2 # |
3 # Copyright (c) 2013 The Chromium Authors. All rights reserved. | 3 # Copyright (c) 2013 The Chromium Authors. All rights reserved. |
4 # Use of this source code is governed by a BSD-style license that can be | 4 # Use of this source code is governed by a BSD-style license that can be |
5 # found in the LICENSE file. | 5 # found in the LICENSE file. |
6 | 6 |
7 """Provisions Android devices with settings required for bots. | 7 """Provisions Android devices with settings required for bots. |
8 | 8 |
9 Usage: | 9 Usage: |
10 ./provision_devices.py [-d <device serial number>] | 10 ./provision_devices.py [-d <device serial number>] |
(...skipping 15 matching lines...) Expand all Loading... |
26 from devil.android import device_blacklist | 26 from devil.android import device_blacklist |
27 from devil.android import device_errors | 27 from devil.android import device_errors |
28 from devil.android import device_temp_file | 28 from devil.android import device_temp_file |
29 from devil.android import device_utils | 29 from devil.android import device_utils |
30 from devil.android.sdk import keyevent | 30 from devil.android.sdk import keyevent |
31 from devil.android.sdk import version_codes | 31 from devil.android.sdk import version_codes |
32 from devil.utils import run_tests_helper | 32 from devil.utils import run_tests_helper |
33 from devil.utils import timeout_retry | 33 from devil.utils import timeout_retry |
34 from pylib import constants | 34 from pylib import constants |
35 from pylib import device_settings | 35 from pylib import device_settings |
| 36 from pylib.constants import host_paths |
36 | 37 |
37 _SYSTEM_WEBVIEW_PATHS = ['/system/app/webview', '/system/app/WebViewGoogle'] | 38 _SYSTEM_WEBVIEW_PATHS = ['/system/app/webview', '/system/app/WebViewGoogle'] |
38 _CHROME_PACKAGE_REGEX = re.compile('.*chrom.*') | 39 _CHROME_PACKAGE_REGEX = re.compile('.*chrom.*') |
39 _TOMBSTONE_REGEX = re.compile('tombstone.*') | 40 _TOMBSTONE_REGEX = re.compile('tombstone.*') |
40 | 41 |
41 | 42 |
42 class _DEFAULT_TIMEOUTS(object): | 43 class _DEFAULT_TIMEOUTS(object): |
43 # L can take a while to reboot after a wipe. | 44 # L can take a while to reboot after a wipe. |
44 LOLLIPOP = 600 | 45 LOLLIPOP = 600 |
45 PRE_LOLLIPOP = 180 | 46 PRE_LOLLIPOP = 180 |
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
420 device: The DeviceUtils instance for the device to which the adb_reboot | 421 device: The DeviceUtils instance for the device to which the adb_reboot |
421 binary should be pushed. | 422 binary should be pushed. |
422 target: The build target (example, Debug or Release) which helps in | 423 target: The build target (example, Debug or Release) which helps in |
423 locating the adb_reboot binary. | 424 locating the adb_reboot binary. |
424 """ | 425 """ |
425 logging.info('Will push and launch adb_reboot on %s', str(device)) | 426 logging.info('Will push and launch adb_reboot on %s', str(device)) |
426 # Kill if adb_reboot is already running. | 427 # Kill if adb_reboot is already running. |
427 device.KillAll('adb_reboot', blocking=True, timeout=2, quiet=True) | 428 device.KillAll('adb_reboot', blocking=True, timeout=2, quiet=True) |
428 # Push adb_reboot | 429 # Push adb_reboot |
429 logging.info(' Pushing adb_reboot ...') | 430 logging.info(' Pushing adb_reboot ...') |
430 adb_reboot = os.path.join(constants.DIR_SOURCE_ROOT, | 431 adb_reboot = os.path.join(host_paths.DIR_SOURCE_ROOT, |
431 'out/%s/adb_reboot' % target) | 432 'out/%s/adb_reboot' % target) |
432 device.PushChangedFiles([(adb_reboot, '/data/local/tmp/')]) | 433 device.PushChangedFiles([(adb_reboot, '/data/local/tmp/')]) |
433 # Launch adb_reboot | 434 # Launch adb_reboot |
434 logging.info(' Launching adb_reboot ...') | 435 logging.info(' Launching adb_reboot ...') |
435 device.RunShellCommand( | 436 device.RunShellCommand( |
436 ['/data/local/tmp/adb_reboot'], | 437 ['/data/local/tmp/adb_reboot'], |
437 check_return=True) | 438 check_return=True) |
438 | 439 |
439 | 440 |
440 def _LaunchHostHeartbeat(): | 441 def _LaunchHostHeartbeat(): |
441 # Kill if existing host_heartbeat | 442 # Kill if existing host_heartbeat |
442 KillHostHeartbeat() | 443 KillHostHeartbeat() |
443 # Launch a new host_heartbeat | 444 # Launch a new host_heartbeat |
444 logging.info('Spawning host heartbeat...') | 445 logging.info('Spawning host heartbeat...') |
445 subprocess.Popen([os.path.join(constants.DIR_SOURCE_ROOT, | 446 subprocess.Popen([os.path.join(host_paths.DIR_SOURCE_ROOT, |
446 'build/android/host_heartbeat.py')]) | 447 'build/android/host_heartbeat.py')]) |
447 | 448 |
448 def KillHostHeartbeat(): | 449 def KillHostHeartbeat(): |
449 ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE) | 450 ps = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE) |
450 stdout, _ = ps.communicate() | 451 stdout, _ = ps.communicate() |
451 matches = re.findall('\\n.*host_heartbeat.*', stdout) | 452 matches = re.findall('\\n.*host_heartbeat.*', stdout) |
452 for match in matches: | 453 for match in matches: |
453 logging.info('An instance of host heart beart running... will kill') | 454 logging.info('An instance of host heart beart running... will kill') |
454 pid = re.findall(r'(\S+)', match)[1] | 455 pid = re.findall(r'(\S+)', match)[1] |
455 subprocess.call(['kill', str(pid)]) | 456 subprocess.call(['kill', str(pid)]) |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 | 519 |
519 run_tests_helper.SetLogLevel(args.verbose) | 520 run_tests_helper.SetLogLevel(args.verbose) |
520 | 521 |
521 devil_chromium.Initialize() | 522 devil_chromium.Initialize() |
522 | 523 |
523 return ProvisionDevices(args) | 524 return ProvisionDevices(args) |
524 | 525 |
525 | 526 |
526 if __name__ == '__main__': | 527 if __name__ == '__main__': |
527 sys.exit(main()) | 528 sys.exit(main()) |
OLD | NEW |