Commit a6e0965a authored by tonyg@chromium.org's avatar tonyg@chromium.org

[Telemetry] Fix --cold-load-percent.

Previously, we didn't properly clear all the network caches.
1. DNS and predictor caches were left in tact. This was fixed by calling the
   net benchmarking extension methods.
2. Live resources in the memory cache were left in tact. This is fixed by
   navigating to about:blank to destroy the old renderer.

Also, --enable-net-benchmarking is supported on the stable channel, so we can
remove the workaround.

With this, cold loads are consistent on Android:

*RESULT cold_times: page_load_time= [4637,4493,4479,4564,4611,4549] ms
Avg cold_times: 4555.500000ms
Sd  cold_times: 62.602716ms
RESULT warm_times_by_url: http___www.youtube.com_watch?v_LIJOhk6FscY= [2122,2104,2079,2094] ms
Avg warm_times_by_url: 2099.750000ms
Sd  warm_times_by_url: 18.043928ms

BUG=

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@251252 0039d316-1c4b-4281-b951-d872f2087c98
parent 9fdc6b1f
...@@ -80,7 +80,7 @@ class PageCycler(page_measurement.PageMeasurement): ...@@ -80,7 +80,7 @@ class PageCycler(page_measurement.PageMeasurement):
def WillNavigateToPage(self, page, tab): def WillNavigateToPage(self, page, tab):
page.script_to_evaluate_on_commit = self._page_cycler_js page.script_to_evaluate_on_commit = self._page_cycler_js
if self.ShouldRunCold(page.url): if self.ShouldRunCold(page.url):
tab.ClearCache() tab.ClearCache(force=True)
if self._report_speed_index: if self._report_speed_index:
self._speedindex_metric.Start(page, tab) self._speedindex_metric.Start(page, tab)
......
...@@ -38,7 +38,8 @@ class FakePage(object): ...@@ -38,7 +38,8 @@ class FakePage(object):
class FakeTab(object): class FakeTab(object):
def __init__(self): def __init__(self):
self.clear_cache_calls = 0 self.clear_cache_calls = 0
def ClearCache(self): def ClearCache(self, force=False):
assert force
self.clear_cache_calls += 1 self.clear_cache_calls += 1
def EvaluateJavaScript(self, _): def EvaluateJavaScript(self, _):
return 1 return 1
......
...@@ -93,9 +93,10 @@ class ChromeBrowserBackend(browser_backend.BrowserBackend): ...@@ -93,9 +93,10 @@ class ChromeBrowserBackend(browser_backend.BrowserBackend):
args = [] args = []
args.extend(self.browser_options.extra_browser_args) args.extend(self.browser_options.extra_browser_args)
args.append('--disable-background-networking') args.append('--disable-background-networking')
args.append('--enable-net-benchmarking')
args.append('--metrics-recording-only') args.append('--metrics-recording-only')
args.append('--no-first-run')
args.append('--no-default-browser-check') args.append('--no-default-browser-check')
args.append('--no-first-run')
args.append('--no-proxy-server') args.append('--no-proxy-server')
if self.browser_options.netsim: if self.browser_options.netsim:
args.append('--ignore-certificate-errors') args.append('--ignore-certificate-errors')
......
...@@ -55,7 +55,6 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend): ...@@ -55,7 +55,6 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
self._browser_directory = browser_directory self._browser_directory = browser_directory
self._port = None self._port = None
self._profile_dir = None self._profile_dir = None
self._supports_net_benchmarking = True
self._tmp_minidump_dir = tempfile.mkdtemp() self._tmp_minidump_dir = tempfile.mkdtemp()
self._SetupProfile() self._SetupProfile()
...@@ -119,10 +118,6 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend): ...@@ -119,10 +118,6 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
args.append('--window-size=1280,1024') args.append('--window-size=1280,1024')
if self._flash_path: if self._flash_path:
args.append('--ppapi-flash-path=%s' % self._flash_path) args.append('--ppapi-flash-path=%s' % self._flash_path)
if self._supports_net_benchmarking:
args.append('--enable-net-benchmarking')
else:
args.append('--enable-benchmarking')
if not self.browser_options.dont_override_profile: if not self.browser_options.dont_override_profile:
args.append('--user-data-dir=%s' % self._tmp_profile_dir) args.append('--user-data-dir=%s' % self._tmp_profile_dir)
return args return args
...@@ -140,13 +135,6 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend): ...@@ -140,13 +135,6 @@ class DesktopBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
def Start(self): def Start(self):
self._LaunchBrowser() self._LaunchBrowser()
# For old chrome versions, might have to relaunch to have the
# correct net_benchmarking switch.
if self.chrome_branch_number < 1418:
self.Close()
self._supports_net_benchmarking = False
self._LaunchBrowser()
@property @property
def pid(self): def pid(self):
if self._proc: if self._proc:
......
...@@ -253,6 +253,21 @@ class Tab(web_contents.WebContents): ...@@ -253,6 +253,21 @@ class Tab(web_contents.WebContents):
def CollectGarbage(self): def CollectGarbage(self):
self._inspector_backend.CollectGarbage() self._inspector_backend.CollectGarbage()
def ClearCache(self): def ClearCache(self, force):
"""Clears the browser's HTTP disk cache and the tab's HTTP memory cache.""" """Clears the browser's networking related disk, memory and other caches.
self._inspector_backend.ClearCache()
Args:
force: Iff true, navigates to about:blank which destroys the previous
renderer, ensuring that even "live" resources in the memory cache are
cleared.
"""
self.ExecuteJavaScript("""
if (window.chrome && chrome.benchmarking &&
chrome.benchmarking.clearCache) {
chrome.benchmarking.clearCache();
chrome.benchmarking.clearPredictorCache();
chrome.benchmarking.clearHostResolverCache();
}
""")
if force:
self.Navigate('about:blank')
...@@ -154,7 +154,7 @@ class PageState(object): ...@@ -154,7 +154,7 @@ class PageState(object):
if test: if test:
if test.clear_cache_before_each_run: if test.clear_cache_before_each_run:
self.tab.ClearCache() self.tab.ClearCache(force=True)
def ImplicitPageNavigation(self, test=None): def ImplicitPageNavigation(self, test=None):
"""Executes the implicit navigation that occurs for every page iteration. """Executes the implicit navigation that occurs for every page iteration.
......
...@@ -46,7 +46,7 @@ class RecordPage(page_test.PageTest): ...@@ -46,7 +46,7 @@ class RecordPage(page_test.PageTest):
def WillNavigateToPage(self, page, tab): def WillNavigateToPage(self, page, tab):
"""Override to ensure all resources are fetched from network.""" """Override to ensure all resources are fetched from network."""
tab.ClearCache() tab.ClearCache(force=False)
if self.test: if self.test:
self.test.WillNavigateToPage(page, tab) self.test.WillNavigateToPage(page, tab)
......
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