| Index: tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| diff --git a/tools/telemetry/telemetry/core/platform/android_platform_backend.py b/tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| index 3e058503fe8d1e415970e39a765ff5d80475fc61..16c0d89327b013d6b87fc7e8928cffe84a735aa0 100644
|
| --- a/tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| +++ b/tools/telemetry/telemetry/core/platform/android_platform_backend.py
|
| @@ -44,6 +44,11 @@ try:
|
| except Exception:
|
| surface_stats_collector = None
|
|
|
| +try:
|
| + import psutil # pylint: disable=import-error
|
| +except ImportError:
|
| + psutil = None
|
| +
|
|
|
| class AndroidPlatformBackend(
|
| linux_based_platform_backend.LinuxBasedPlatformBackend):
|
| @@ -85,6 +90,8 @@ class AndroidPlatformBackend(
|
| self._device_cert_util = None
|
| self._is_test_ca_installed = False
|
|
|
| + _FixPossibleAdbInstability()
|
| +
|
| @classmethod
|
| def SupportsDevice(cls, device):
|
| return isinstance(device, android_device.AndroidDevice)
|
| @@ -592,3 +599,25 @@ class AndroidPlatformBackend(
|
| self._adb.device_serial()],
|
| stdout=subprocess.PIPE).communicate()[0])
|
| return ret
|
| +
|
| +
|
| +def _FixPossibleAdbInstability():
|
| + """Host side workaround for crbug.com/268450 (adb instability).
|
| +
|
| + The adb server has a race which is mitigated by binding to a single core.
|
| + """
|
| + if not psutil:
|
| + return
|
| + for process in psutil.process_iter():
|
| + try:
|
| + if 'adb' in process.name:
|
| + if 'cpu_affinity' in dir(process):
|
| + process.cpu_affinity([0]) # New versions of psutil.
|
| + elif 'set_cpu_affinity' in dir(process):
|
| + process.set_cpu_affinity([0]) # Older versions.
|
| + else:
|
| + logging.warn(
|
| + 'Cannot set CPU affinity due to stale psutil version: %s',
|
| + '.'.join(str(x) for x in psutil.version_info))
|
| + except (psutil.NoSuchProcess, psutil.AccessDenied):
|
| + logging.warn('Failed to set adb process CPU affinity')
|
|
|