Reland r210268: "Improve forwarder2 setup/tear down in telemetry."

This CL kills the host_forwarder daemon before running the tests and also makes
Forwarder.Close() unmap the previously mapped ports.

BUG=242846
TBR=bulach@chromium.org

Review URL: https://codereview.chromium.org/18907002

git-svn-id: http://src.chromium.org/svn/trunk/src/build@210574 4ff67af0-8c30-449e-8e8b-ad334ec8d88c
This commit is contained in:
pliard@chromium.org 2013-07-09 15:44:02 +00:00
Родитель e94f646c94
Коммит b48bb4cd34
2 изменённых файлов: 29 добавлений и 14 удалений

Просмотреть файл

@ -58,6 +58,7 @@ import sys
from pylib import android_commands
from pylib import cmd_helper
from pylib import constants
from pylib import forwarder
from pylib import ports
@ -164,6 +165,7 @@ def _PrintAllStepsOutput(steps):
def _KillPendingServers():
for retry in range(5):
forwarder.Forwarder.KillHost()
for server in ['lighttpd', 'web-page-replay']:
pids = cmd_helper.GetCmdOutput(['pgrep', '-f', server])
pids = [pid.strip() for pid in pids.split('\n') if pid.strip()]

Просмотреть файл

@ -40,6 +40,7 @@ class Forwarder(object):
"""
assert build_type in ('Release', 'Debug')
self._adb = adb
self._device_to_host_port_map = dict()
self._host_to_device_port_map = dict()
self._device_initialized = False
self._host_adb_control_port = 0
@ -89,6 +90,7 @@ class Forwarder(object):
'expected "device_port:host_port"') % output)
device_port = int(tokens[0])
host_port = int(tokens[1])
self._device_to_host_port_map[device_port] = host_port
self._host_to_device_port_map[host_port] = device_port
logging.info('Forwarding device port: %d to host port: %d.',
device_port, host_port)
@ -115,24 +117,35 @@ class Forwarder(object):
device_port: A previously forwarded port (through Run()).
"""
with self._lock:
redirection_command = [
'--serial-id=' + self._adb.Adb().GetSerialNumber(), '--unmap',
str(device_port)]
(exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
[self._host_forwarder_path] + redirection_command)
if exit_code != 0:
logging.error('%s exited with %d:\n%s' % (
self._host_forwarder_path, exit_code, '\n'.join(output)))
self._UnmapDevicePortInternalLocked(device_port)
def _UnmapDevicePortInternalLocked(self, device_port):
if not device_port in self._device_to_host_port_map:
return
redirection_command = [
'--serial-id=' + self._adb.Adb().GetSerialNumber(), '--unmap',
str(device_port)]
(exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
[self._host_forwarder_path] + redirection_command)
if exit_code != 0:
logging.error('%s exited with %d:\n%s' % (
self._host_forwarder_path, exit_code, '\n'.join(output)))
host_port = self._device_to_host_port_map[device_port]
del self._device_to_host_port_map[device_port]
del self._host_to_device_port_map[host_port]
@staticmethod
def KillHost(build_type):
def KillHost(build_type='Debug'):
"""Kills the forwarder process running on the host.
Args:
build_type: 'Release' or 'Debug'
build_type: 'Release' or 'Debug' (default='Debug')
"""
logging.info('Killing host_forwarder.')
host_forwarder_path = _MakeBinaryPath(build_type, 'host_forwarder')
if not os.path.exists(host_forwarder_path):
host_forwarder_path = _MakeBinaryPath(
'Release' if build_type == 'Debug' else 'Debug', 'host_forwarder')
assert os.path.exists(host_forwarder_path), 'Please build forwarder2'
(exit_code, output) = cmd_helper.GetCmdStatusAndOutput(
[host_forwarder_path, '--kill-server'])
@ -173,8 +186,8 @@ class Forwarder(object):
with self._lock:
return self._host_to_device_port_map.get(host_port)
# Deprecated.
def Close(self):
"""Terminates the forwarder process."""
# TODO(pliard): Remove references in client code.
pass
"""Releases the previously forwarded ports."""
with self._lock:
for device_port in self._device_to_host_port_map.copy():
self._UnmapDevicePortInternalLocked(device_port)