Index: tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
diff --git a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
index 7c23ea4881b3aa646a43a7e97444dcdd228305ac..6491d2c2b2391fd43215b31a2a3df5db2605eb7c 100644 |
--- a/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
+++ b/tools/telemetry/telemetry/core/backends/chrome/android_browser_finder.py |
@@ -20,6 +20,11 @@ from telemetry.core.backends.chrome import android_browser_backend |
from telemetry.core.platform import android_platform_backend |
from telemetry.core.platform.profiler import monsoon |
+try: |
+ import psutil # pylint: disable=F0401 |
+except ImportError: |
+ psutil = None |
+ |
CHROME_PACKAGE_NAMES = { |
'android-content-shell': |
@@ -232,19 +237,22 @@ Waiting for device... |
# Ignore result. |
adb.EnableAdbRoot() |
- if sys.platform.startswith('linux'): |
- # Host side workaround for crbug.com/268450 (adb instability) |
+ if psutil: |
+ # Host side workaround for crbug.com/268450 (adb instability). |
# The adb server has a race which is mitigated by binding to a single core. |
- import psutil # pylint: disable=F0401 |
- pids = [p.pid for p in psutil.process_iter() if 'adb' in p.name] |
- with open(os.devnull, 'w') as devnull: |
- for pid in pids: |
- ret = subprocess.call(['taskset', '-p', '-c', '0', str(pid)], |
- stdout=subprocess.PIPE, |
- stderr=subprocess.PIPE, |
- stdin=devnull) |
- if ret: |
- logging.warn('Failed to taskset %d (%s)', pid, ret) |
+ for proc in psutil.process_iter(): |
+ try: |
+ if 'adb' in proc.name: |
+ if 'cpu_affinity' in dir(proc): |
+ proc.cpu_affinity([0]) # New versions of psutil. |
+ elif 'set_cpu_affinity' in dir(proc): |
+ proc.set_cpu_affinity([0]) # Older versions. |
+ else: |
+ logging.warn( |
+ 'Cannot set CPU affinity due to stale psutil version: %s', |
+ '.'.join(psutil.version_info)) |
+ except (psutil.NoSuchProcess, psutil.AccessDenied): |
+ logging.warn('Failed to set adb process CPU affinity') |
if not os.environ.get('BUILDBOT_BUILDERNAME'): |
# Killing adbd before running tests has proven to make them less likely to |