Commit 8f36d53c authored by tonyg@chromium.org's avatar tonyg@chromium.org

[Telemetry] Fix a flake in android browser finder.

Traceback (most recent call last):
  File "tools/perf/../telemetry/telemetry/decorators.py", line 50, in wrapper
    func(*args, **kwargs)
  File "/b/build/slave/Android_Tests/build/src/tools/perf/benchmarks/benchmark_unittest.py", line 51, in BenchmarkSmokeTest
    self.assertEqual(0, SinglePageBenchmark().Run(options),
  File "tools/perf/../telemetry/telemetry/benchmark.py", line 84, in Run
    results = page_runner.Run(test, ps, expectations, args)
  File "tools/perf/../telemetry/telemetry/page/page_runner.py", line 346, in Run
    possible_browser = browser_finder.FindBrowser(finder_options)
  File "tools/perf/../telemetry/telemetry/decorators.py", line 26, in Cacher
    cache[key] = obj(*args, **kwargs)
  File "tools/perf/../telemetry/telemetry/core/browser_finder.py", line 73, in FindBrowser
    curr_browsers = finder.FindAllAvailableBrowsers(options)
  File "tools/perf/../telemetry/telemetry/core/backends/chrome/android_browser_finder.py", line 214, in FindAllAvailableBrowsers
    pids  = [p.pid for p in psutil.process_iter() if 'adb' in p.name]
  File "/usr/lib/python2.7/dist-packages/psutil/__init__.py", line 161, in name
    cmdline = self.cmdline
  File "/usr/lib/python2.7/dist-packages/psutil/__init__.py", line 188, in cmdline
    return self._platform_impl.get_process_cmdline()
  File "/usr/lib/python2.7/dist-packages/psutil/_pslinux.py", line 327, in wrapper
    raise NoSuchProcess(self.pid, self._process_name)
NoSuchProcess: process no longer exists (pid=13764)

Observed here:
http://build.chromium.org/p/chromium.linux/builders/Android%20Tests/builds/14626/steps/telemetry_perf_unittests/logs/stdio

BUG=

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284144 0039d316-1c4b-4281-b951-d872f2087c98
parent 55a62256
......@@ -19,6 +19,11 @@ from telemetry.core.backends import adb_commands
from telemetry.core.backends.chrome import android_browser_backend
from telemetry.core.platform import android_platform_backend
try:
import psutil # pylint: disable=F0401
except ImportError:
psutil = None
CHROME_PACKAGE_NAMES = {
'android-content-shell':
......@@ -207,19 +212,15 @@ def FindAllAvailableBrowsers(finder_options, logging=real_logging):
# 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:
proc.set_cpu_affinity([0])
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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment