summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortonyg@chromium.org <tonyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-16 20:10:45 +0000
committertonyg@chromium.org <tonyg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-16 20:10:45 +0000
commitc947202f15f1df3d1cc2224c10a4d981cd35e017 (patch)
treebffb211dbb9e603902ff5ae89060f917630167b6
parentea2177c92ed257f116ac7c41f5baaa8de7f7c32d (diff)
downloadchromium_src-c947202f15f1df3d1cc2224c10a4d981cd35e017.zip
chromium_src-c947202f15f1df3d1cc2224c10a4d981cd35e017.tar.gz
chromium_src-c947202f15f1df3d1cc2224c10a4d981cd35e017.tar.bz2
[Telemetry] Fix page cycler reliability on mac.
The page cyclers tend to fail on mac due to hitting the maximum number of open file descriptor limit. This was the reason typical 25 is disabled, the reason several page cyclers are failing on the waterfall now, and the reason for the connection closing hack. This patch raises the max fd limit rather than trying to stay below the limit. It removes the old hack, and re-enables typical 25. This problem is very hard to reproduce locally, so I'm not 100% confident in this patch. I'd like to land it, keep and eye on it, and revert if the failures don't get significantly better. BUG=269727,268646 Review URL: https://chromiumcodereview.appspot.com/23273002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218073 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--tools/perf/measurements/page_cycler.py6
-rw-r--r--tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py13
-rw-r--r--tools/telemetry/telemetry/core/util.py10
-rw-r--r--tools/telemetry/telemetry/page/page_runner.py1
-rw-r--r--tools/telemetry/telemetry/page/page_test.py5
5 files changed, 13 insertions, 22 deletions
diff --git a/tools/perf/measurements/page_cycler.py b/tools/perf/measurements/page_cycler.py
index f4d3cf2..c0bd2ec 100644
--- a/tools/perf/measurements/page_cycler.py
+++ b/tools/perf/measurements/page_cycler.py
@@ -16,7 +16,6 @@ cycling all pages.
"""
import os
-import sys
from metrics import io
from metrics import memory
@@ -65,11 +64,6 @@ class PageCycler(page_measurement.PageMeasurement):
# Old commandline flags used for reference builds.
options.AppendExtraBrowserArg('--dom-automation')
- # Temporarily disable typical_25 page set on mac.
- if sys.platform == 'darwin' and sys.argv[-1].endswith('/typical_25.json'):
- print 'typical_25 is currently disabled on mac. Skipping test.'
- sys.exit(0)
-
def MeasurePage(self, page, tab, results):
def _IsDone():
return bool(tab.EvaluateJavaScript('__pc_load_time'))
diff --git a/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py b/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py
index 7a154b9..c6e4212 100644
--- a/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py
+++ b/tools/telemetry/telemetry/core/chrome/desktop_browser_backend.py
@@ -15,6 +15,12 @@ from telemetry.core import util
from telemetry.core.backends import browser_backend
from telemetry.core.backends.chrome import chrome_browser_backend
+try:
+ import resource # pylint: disable=F0401
+except ImportError:
+ resource = None # Not available on all platforms
+
+
class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
"""The backend for controlling a locally-executed browser instance, on Linux,
Mac or Windows.
@@ -53,6 +59,13 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
self._delete_profile_dir_after_run = delete_profile_dir_after_run
self._tmp_minidump_dir = tempfile.mkdtemp()
+ if resource:
+ # Mac has a low soft limit for number of open files that can cause
+ # Chrome to hang when rapidly loading pages. Raise the limit if possible.
+ _, hard_limit = resource.getrlimit(resource.RLIMIT_NOFILE)
+ resource.setrlimit(resource.RLIMIT_NOFILE,
+ (min(4096, hard_limit), hard_limit))
+
self._SetupProfile()
def _SetupProfile(self):
diff --git a/tools/telemetry/telemetry/core/util.py b/tools/telemetry/telemetry/core/util.py
index fe20924..997976a 100644
--- a/tools/telemetry/telemetry/core/util.py
+++ b/tools/telemetry/telemetry/core/util.py
@@ -102,16 +102,6 @@ def GetAvailableLocalPort():
return port
-
-def CloseConnections(tab):
- """Closes all TCP sockets held open by the browser."""
- try:
- tab.ExecuteJavaScript("""window.chrome && chrome.benchmarking &&
- chrome.benchmarking.closeConnections()""")
- except Exception:
- pass
-
-
def GetBuildDirectories():
"""Yields all combination of Chromium build output directories."""
build_dirs = ['build',
diff --git a/tools/telemetry/telemetry/page/page_runner.py b/tools/telemetry/telemetry/page/page_runner.py
index 4687e42..8a97290 100644
--- a/tools/telemetry/telemetry/page/page_runner.py
+++ b/tools/telemetry/telemetry/page/page_runner.py
@@ -385,7 +385,6 @@ def _RunPage(test, page, state, expectation, results, options):
if state.repeat_state.ShouldNavigate(options.skip_navigate_on_repeat):
page_state.ImplicitPageNavigation(page, tab, test)
test.Run(options, page, tab, results)
- util.CloseConnections(tab)
except page_test.Failure:
logging.warning('%s:\n%s', page.url, traceback.format_exc())
if expectation == 'fail':
diff --git a/tools/telemetry/telemetry/page/page_test.py b/tools/telemetry/telemetry/page/page_test.py
index e9d7147..52e3566 100644
--- a/tools/telemetry/telemetry/page/page_test.py
+++ b/tools/telemetry/telemetry/page/page_test.py
@@ -3,7 +3,6 @@
# found in the LICENSE file.
import logging
-from telemetry.core import util
from telemetry.page import test_expectations
from telemetry.page.actions import all_page_actions
from telemetry.page.actions import navigate
@@ -198,10 +197,6 @@ class PageTest(object):
if run_setup_methods:
self.DidRunAction(page, tab, action)
- # Closing the connections periodically is needed; otherwise we won't be
- # able to open enough sockets, and the pages will time out.
- util.CloseConnections(tab)
-
def RunNavigateSteps(self, page, tab):
"""Navigates the tab to the page URL attribute.