Index: build/android/emulator.py |
diff --git a/build/android/emulator.py b/build/android/emulator.py |
index 681a3c17bbb9debf514fc0179ed5ada49314dbf1..a4b6167f357e9d5201fbbf2284cf2eac84e97bb8 100755 |
--- a/build/android/emulator.py |
+++ b/build/android/emulator.py |
@@ -90,7 +90,7 @@ class Emulator(object): |
_WAITFORDEVICE_TIMEOUT = 5 |
# Time to wait for a "wait for boot complete" (property set on device). |
- _WAITFORBOOT_TIMEOUT = 120 |
+ _WAITFORBOOT_TIMEOUT = 300 |
def __init__(self): |
try: |
@@ -115,21 +115,27 @@ class Emulator(object): |
""" |
_KillAllEmulators() # just to be sure |
(self.device, port) = self._DeviceName() |
- self.popen = subprocess.Popen(args=[ |
+ emulator_command = [ |
self.emulator, |
# Speed up emulator launch by 40%. Really. |
'-no-boot-anim', |
# The default /data size is 64M. |
# That's not enough for 4 unit test bundles and their data. |
'-partition-size', '256', |
+ # ALWAYS wipe the data. We've seen cases where an emulator |
+ # gets 'stuck' if we don't do this (every thousand runs or |
+ # so). |
+ '-wipe-data', |
# Use a familiar name and port. |
'-avd', 'buildbot', |
- '-port', str(port)], |
- stderr=subprocess.STDOUT) |
+ '-port', str(port)] |
+ logging.info('Emulator launch command: %s', ' '.join(emulator_command)) |
+ self.popen = subprocess.Popen(args=emulator_command, |
bulach
2011/12/07 22:55:57
nit: popen is too generic.. perhaps rather than se
John Grabowski
2011/12/07 22:57:31
It returns a popen object.
Class is emulator so I
|
+ stderr=subprocess.STDOUT) |
self._InstallKillHandler() |
self._ConfirmLaunch() |
- def _ConfirmLaunch(self): |
+ def _ConfirmLaunch(self, wait_for_boot=False): |
"""Confirm the emulator launched properly. |
Loop on a wait-for-device with a very small timeout. On each |
@@ -159,10 +165,14 @@ class Emulator(object): |
if seconds_waited >= self._LAUNCH_TIMEOUT: |
raise EmulatorLaunchException('TIMEOUT with wait-for-device') |
logging.info('Seconds waited on wait-for-device: %d', seconds_waited) |
- # Now that we checked for obvious problems, wait for a boot complete. |
- # Waiting for the package manager has been problematic. |
- a.Adb().SetTargetSerial(self.device) |
- a.Adb().WaitForBootComplete(self._WAITFORBOOT_TIMEOUT) |
+ if wait_for_boot: |
+ # Now that we checked for obvious problems, wait for a boot complete. |
+ # Waiting for the package manager is sometimes problematic. |
+ # TODO(jrg): for reasons I don't understand, sometimes this |
+ # gives an "error: device not found" which is only fixed with an |
+ # 'adb kill-server' command. Fix. |
+ a.Adb().SetTargetSerial(self.device) |
+ a.Adb().WaitForBootComplete(self._WAITFORBOOT_TIMEOUT) |
def Shutdown(self): |
"""Shuts down the process started by launch.""" |