blob: af9bf9cf28dc9acb2402239f6431e5aea2476d61 [file] [log] [blame]
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import os
import time
from autotest_lib.client.bin import test
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import chrome
class platform_MemoryPressure(test.test):
version = 1
def run_once(self, tab_open_secs=1.5, timeout_secs=180):
perf_results = {}
time_limit = time.time() + timeout_secs
err = False
# 1 for initial tab opened
n_tabs = 1
# Open tabs until a tab discard notification arrives, or a time limit
# is reached.
with chrome.Chrome() as cr:
cr.browser.SetHTTPServerDirectories(self.bindir)
while time.time() <= time_limit and not err:
tab = cr.browser.tabs.New()
n_tabs += 1
# The program in js-bloat.html allocates a few large arrays and
# forces them in memory by touching some of their elements.
tab.Navigate(cr.browser.http_server.UrlOf(
os.path.join(self.bindir, 'js-bloat.html')))
tab.WaitForDocumentReadyStateToBeComplete()
time.sleep(tab_open_secs)
if n_tabs > len(cr.browser.tabs):
err = True
if err:
logging.info("tab discard after %d tabs", n_tabs)
else:
msg = "FAIL: no tab discard after opening %d tabs in %ds" % \
(n_tabs, timeout_secs)
logging.error(msg)
raise error.TestError(msg)
perf_results["NumberOfTabsAtFirstDiscard"] = n_tabs
self.write_perf_keyval(perf_results)