| Index: third_party/android_testrunner/adb_interface.py
|
| diff --git a/third_party/android_testrunner/adb_interface.py b/third_party/android_testrunner/adb_interface.py
|
| index 1928c73a8e6ba7c41c4a725d1988f6044dfe0829..9109916e116223169e47ace61cfc82f45897c176 100644
|
| --- a/third_party/android_testrunner/adb_interface.py
|
| +++ b/third_party/android_testrunner/adb_interface.py
|
| @@ -51,6 +51,21 @@ class AdbInterface:
|
| """Direct all future commands to Android target with the given serial."""
|
| self._target_arg = "-s %s" % serial
|
|
|
| + def RestartAdbServer(self):
|
| + """Restart the adb server."""
|
| + self.KillAdbServer()
|
| + self.StartAdbServer()
|
| +
|
| + def KillAdbServer(self):
|
| + """Kill adb server."""
|
| + adb_cmd = "adb kill-server"
|
| + return run_command.RunCommand(adb_cmd)
|
| +
|
| + def StartAdbServer(self):
|
| + """Start adb server."""
|
| + adb_cmd = "adb start-server"
|
| + return run_command.RunCommand(adb_cmd)
|
| +
|
| def SendCommand(self, command_string, timeout_time=20, retry_count=3):
|
| """Send a command via adb.
|
|
|
| @@ -419,6 +434,39 @@ class AdbInterface:
|
| if not success:
|
| raise errors.WaitForResponseTimedOutError()
|
|
|
| + def WaitForSystemBootCompleted(self, wait_time=120):
|
| + """Waits for targeted system's boot_completed flag to be set.
|
| +
|
| + Args:
|
| + wait_time: time in seconds to wait
|
| +
|
| + Raises:
|
| + WaitForResponseTimedOutError if wait_time elapses and flag still not
|
| + set.
|
| + """
|
| + logger.Log("Waiting for system boot completed...")
|
| + self.SendCommand("wait-for-device")
|
| + # Now the device is there, but system not boot completed.
|
| + # Query the sys.boot_completed flag with a basic command
|
| + boot_completed = False
|
| + attempts = 0
|
| + wait_period = 5
|
| + while not boot_completed and (attempts*wait_period) < wait_time:
|
| + output = self.SendShellCommand("getprop sys.boot_completed", retry_count=1)
|
| + output = output.strip()
|
| + if output == "1":
|
| + boot_completed = True
|
| + else:
|
| + # If 'error: xxx' returned when querying the flag, it means
|
| + # adb server lost the connection to the emulator, so restart the adb server.
|
| + if "error:" in output:
|
| + self.RestartAdbServer()
|
| + time.sleep(wait_period)
|
| + attempts += 1
|
| + if not boot_completed:
|
| + raise errors.WaitForResponseTimedOutError(
|
| + "sys.boot_completed flag was not set after %s seconds" % wait_time)
|
| +
|
| def WaitForBootComplete(self, wait_time=120):
|
| """Waits for targeted device's bootcomplete flag to be set.
|
|
|
|
|