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

Unified Diff: build/android/pylib/forwarder.py

Issue 11360248: Use the new forwarder2's Daemon implementation in device_forwarder. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address David's comments Created 8 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « build/android/pylib/android_commands.py ('k') | tools/android/forwarder2/daemon.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: build/android/pylib/forwarder.py
diff --git a/build/android/pylib/forwarder.py b/build/android/pylib/forwarder.py
index 14373994f9e466270ca734c3181bb64bf631e0bb..305278f9a3a42b94b10d582cfba128ad57a11aa5 100644
--- a/build/android/pylib/forwarder.py
+++ b/build/android/pylib/forwarder.py
@@ -23,12 +23,12 @@ def _MakeBinaryPath(build_type, binary_name):
class Forwarder(object):
"""Class to manage port forwards from the device to the host."""
- _DEVICE_FORWARDER_PATH = constants.TEST_EXECUTABLE_DIR + '/device_forwarder'
-
# Unix Abstract socket path:
_DEVICE_ADB_CONTROL_PORT = 'chrome_device_forwarder'
_TIMEOUT_SECS = 30
+ _DEVICE_FORWARDER_PATH = constants.TEST_EXECUTABLE_DIR + '/device_forwarder'
+
def __init__(self, adb, build_type):
"""Forwards TCP ports on the device back to the host.
@@ -66,8 +66,8 @@ class Forwarder(object):
host_adb_control_port = ports.AllocateTestServerPort()
if not host_adb_control_port:
raise Exception('Failed to allocate a TCP port in the host machine.')
- self._adb.PushIfNeeded(self._device_forwarder_path,
- Forwarder._DEVICE_FORWARDER_PATH)
+ self._adb.PushIfNeeded(
+ self._device_forwarder_path, Forwarder._DEVICE_FORWARDER_PATH)
redirection_commands = [
'%d:%d:%d:%s' % (host_adb_control_port, device, host,
host_name) for device, host in port_pairs]
@@ -80,48 +80,19 @@ class Forwarder(object):
'localabstract:%s' % Forwarder._DEVICE_ADB_CONTROL_PORT]) != 0:
raise Exception('Error while running adb forward.')
- if not self._adb.ExtractPid('device_forwarder'):
- # TODO(pliard): Get rid of pexpect here and make device_forwarder a daemon
- # with a blocking CLI process that exits with a proper exit code and not
- # while the daemon is still setting up. This would be similar to how
- # host_forwarder works.
- self._device_process = pexpect.spawn(
- 'adb', ['-s',
- self._adb._adb.GetSerialNumber(),
- 'shell',
- '%s %s -D --adb_sock=%s' % (
- tool.GetUtilWrapper(),
- Forwarder._DEVICE_FORWARDER_PATH,
- Forwarder._DEVICE_ADB_CONTROL_PORT)])
- device_success_re = re.compile('Starting Device Forwarder.')
- device_failure_re = re.compile('.*:ERROR:(.*)')
- index = self._device_process.expect([device_success_re,
- device_failure_re,
- pexpect.EOF,
- pexpect.TIMEOUT],
- Forwarder._TIMEOUT_SECS)
- if index == 1:
- error_msg = str(self._device_process.match.group(1))
- logging.error(self._device_process.before)
- self._device_process.close()
- raise Exception('Failed to start Device Forwarder with Error: %s' %
- error_msg)
- elif index == 2:
- logging.error(self._device_process.before)
- self._device_process.close()
- raise Exception(
- 'Unexpected EOF while trying to start Device Forwarder.')
- elif index == 3:
- logging.error(self._device_process.before)
- self._device_process.close()
- raise Exception('Timeout while trying start Device Forwarder')
+ (exit_code, output) = self._adb.GetShellCommandStatusAndOutput(
+ '%s %s' % (Forwarder._DEVICE_FORWARDER_PATH,
+ Forwarder._DEVICE_ADB_CONTROL_PORT))
+ if exit_code != 0:
+ raise Exception(
+ 'Failed to start device forwarder:\n%s' % '\n'.join(output))
for redirection_command in redirection_commands:
(exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
[self._host_forwarder_path, redirection_command])
if exit_code != 0:
- raise Exception('%s exited with %d: %s' % (self._host_forwarder_path,
- exit_code, output))
+ raise Exception('%s exited with %d:\n%s' % (
+ self._host_forwarder_path, exit_code, '\n'.join(output)))
tokens = output.split(':')
if len(tokens) != 2:
raise Exception('Unexpected host forwarder output "%s", ' +
@@ -138,12 +109,19 @@ class Forwarder(object):
(exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
[host_forwarder_path, 'kill-server'])
if exit_code != 0:
- raise Exception('%s exited with %d: %s' % (host_forwarder_path,
- exit_code, output))
+ raise Exception('%s exited with %d:\n%s' % (host_forwarder_path,
+ exit_code, '\n'.join(output)))
@staticmethod
def KillDevice(adb):
logging.info('Killing device_forwarder.')
+ if not adb.FileExistsOnDevice(Forwarder._DEVICE_FORWARDER_PATH):
+ return
+ (exit_code, output) = adb.GetShellCommandStatusAndOutput(
+ '%s kill-server' % Forwarder._DEVICE_FORWARDER_PATH)
+ # TODO(pliard): Remove the following call to KillAllBlocking() when we are
+ # sure that the old version of device_forwarder (not supporting
+ # 'kill-server') is not running on the bots anymore.
timeout_sec = 5
processes_killed = adb.KillAllBlocking('device_forwarder', timeout_sec)
if not processes_killed:
« no previous file with comments | « build/android/pylib/android_commands.py ('k') | tools/android/forwarder2/daemon.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698