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

[Telemetry] Add a PageTest option to clear cache before each run.

This will be used for the network simulation page cycler where we need to
ensure that each page load requests the resources from WPR instead of from
the browser cache.

BUG=None
TEST=top_25 page cycler on linux
NOTRY=True

Review URL: https://chromiumcodereview.appspot.com/16154007

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@207979 0039d316-1c4b-4281-b951-d872f2087c98
parent 59c61c81
......@@ -46,13 +46,14 @@
<a href="telemetry.core.chrome.inspector_console_unittest.html">inspector_console_unittest</a><br>
<a href="telemetry.core.chrome.inspector_memory.html">inspector_memory</a><br>
<a href="telemetry.core.chrome.inspector_memory_unittest.html">inspector_memory_unittest</a><br>
<a href="telemetry.core.chrome.inspector_network.html">inspector_network</a><br>
<a href="telemetry.core.chrome.inspector_page.html">inspector_page</a><br>
<a href="telemetry.core.chrome.inspector_page_unittest.html">inspector_page_unittest</a><br>
<a href="telemetry.core.chrome.inspector_runtime.html">inspector_runtime</a><br>
<a href="telemetry.core.chrome.inspector_runtime_unittest.html">inspector_runtime_unittest</a><br>
<a href="telemetry.core.chrome.inspector_timeline.html">inspector_timeline</a><br>
<a href="telemetry.core.chrome.inspector_timeline_unittest.html">inspector_timeline_unittest</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.chrome.misc_web_contents_backend.html">misc_web_contents_backend</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.chrome.inspector_timeline_unittest.html">inspector_timeline_unittest</a><br>
<a href="telemetry.core.chrome.misc_web_contents_backend.html">misc_web_contents_backend</a><br>
<a href="telemetry.core.chrome.png_bitmap.html">png_bitmap</a><br>
<a href="telemetry.core.chrome.png_bitmap_unittest.html">png_bitmap_unittest</a><br>
<a href="telemetry.core.chrome.tab_list_backend.html">tab_list_backend</a><br>
......
......@@ -22,16 +22,17 @@
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="telemetry.core.exceptions.html">telemetry.core.exceptions</a><br>
<a href="telemetry.core.chrome.inspector_console.html">telemetry.core.chrome.inspector_console</a><br>
<a href="telemetry.core.chrome.inspector_memory.html">telemetry.core.chrome.inspector_memory</a><br>
<a href="telemetry.core.chrome.inspector_page.html">telemetry.core.chrome.inspector_page</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.chrome.inspector_runtime.html">telemetry.core.chrome.inspector_runtime</a><br>
<a href="telemetry.core.chrome.inspector_network.html">telemetry.core.chrome.inspector_network</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.chrome.inspector_page.html">telemetry.core.chrome.inspector_page</a><br>
<a href="telemetry.core.chrome.inspector_runtime.html">telemetry.core.chrome.inspector_runtime</a><br>
<a href="telemetry.core.chrome.inspector_timeline.html">telemetry.core.chrome.inspector_timeline</a><br>
<a href="json.html">json</a><br>
<a href="logging.html">logging</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.chrome.png_bitmap.html">telemetry.core.chrome.png_bitmap</a><br>
</td><td width="25%" valign=top><a href="logging.html">logging</a><br>
<a href="telemetry.core.chrome.png_bitmap.html">telemetry.core.chrome.png_bitmap</a><br>
<a href="socket.html">socket</a><br>
<a href="sys.html">sys</a><br>
<a href="telemetry.core.util.html">telemetry.core.util</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.chrome.websocket.html">telemetry.core.chrome.websocket</a><br>
</td><td width="25%" valign=top><a href="telemetry.core.util.html">telemetry.core.util</a><br>
<a href="telemetry.core.chrome.websocket.html">telemetry.core.chrome.websocket</a><br>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
......@@ -63,6 +64,8 @@
<td width="100%">Methods defined here:<br>
<dl><dt><a name="InspectorBackend-Activate"><strong>Activate</strong></a>(self)</dt></dl>
<dl><dt><a name="InspectorBackend-ClearCache"><strong>ClearCache</strong></a>(self)</dt></dl>
<dl><dt><a name="InspectorBackend-Close"><strong>Close</strong></a>(self)</dt></dl>
<dl><dt><a name="InspectorBackend-CollectGarbage"><strong>CollectGarbage</strong></a>(self)</dt></dl>
......
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module telemetry.core.chrome.inspector_network</title>
</head><body bgcolor="#f0f0f8">
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="telemetry.html"><font color="#ffffff">telemetry</font></a>.<a href="telemetry.core.html"><font color="#ffffff">core</font></a>.<a href="telemetry.core.chrome.html"><font color="#ffffff">chrome</font></a>.inspector_network</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="../telemetry/core/chrome/inspector_network.py">telemetry/core/chrome/inspector_network.py</a></font></td></tr></table>
<p><tt>#&nbsp;Copyright&nbsp;(c)&nbsp;2013&nbsp;The&nbsp;Chromium&nbsp;Authors.&nbsp;All&nbsp;rights&nbsp;reserved.<br>
#&nbsp;Use&nbsp;of&nbsp;this&nbsp;source&nbsp;code&nbsp;is&nbsp;governed&nbsp;by&nbsp;a&nbsp;BSD-style&nbsp;license&nbsp;that&nbsp;can&nbsp;be<br>
#&nbsp;found&nbsp;in&nbsp;the&nbsp;LICENSE&nbsp;file.</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="__builtin__.html#object">__builtin__.object</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="telemetry.core.chrome.inspector_network.html#InspectorNetwork">InspectorNetwork</a>
</font></dt></dl>
</dd>
</dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="InspectorNetwork">class <strong>InspectorNetwork</strong></a>(<a href="__builtin__.html#object">__builtin__.object</a>)</font></td></tr>
<tr><td bgcolor="#ffc8d8"><tt>&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="InspectorNetwork-ClearCache"><strong>ClearCache</strong></a>(self, timeout<font color="#909090">=60</font>)</dt><dd><tt>Clears&nbsp;the&nbsp;browser's&nbsp;disk&nbsp;and&nbsp;memory&nbsp;cache.</tt></dd></dl>
<dl><dt><a name="InspectorNetwork-__init__"><strong>__init__</strong></a>(self, inspector_backend)</dt></dl>
<hr>
Data descriptors defined here:<br>
<dl><dt><strong>__dict__</strong></dt>
<dd><tt>dictionary&nbsp;for&nbsp;instance&nbsp;variables&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
<dl><dt><strong>__weakref__</strong></dt>
<dd><tt>list&nbsp;of&nbsp;weak&nbsp;references&nbsp;to&nbsp;the&nbsp;object&nbsp;(if&nbsp;defined)</tt></dd>
</dl>
</td></tr></table></td></tr></table>
</body></html>
\ No newline at end of file
......@@ -69,6 +69,8 @@ and&nbsp;the&nbsp;page's&nbsp;documentVisibilityState&nbsp;becoming&nbsp;'visibl
delay&nbsp;until&nbsp;the&nbsp;actual&nbsp;tab&nbsp;is&nbsp;visible&nbsp;to&nbsp;the&nbsp;user.&nbsp;None&nbsp;of&nbsp;these&nbsp;delays<br>
are&nbsp;included&nbsp;in&nbsp;this&nbsp;call.</tt></dd></dl>
<dl><dt><a name="Tab-ClearCache"><strong>ClearCache</strong></a>(self)</dt><dd><tt>Clears&nbsp;the&nbsp;browser's&nbsp;HTTP&nbsp;disk&nbsp;cache&nbsp;and&nbsp;the&nbsp;tab's&nbsp;HTTP&nbsp;memory&nbsp;cache.</tt></dd></dl>
<dl><dt><a name="Tab-CollectGarbage"><strong>CollectGarbage</strong></a>(self)</dt></dl>
<dl><dt><a name="Tab-GetCookieByName"><strong>GetCookieByName</strong></a>(self, name, timeout<font color="#909090">=60</font>)</dt><dd><tt>Returns&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;cookie&nbsp;by&nbsp;the&nbsp;given&nbsp;|name|.</tt></dd></dl>
......
......@@ -276,7 +276,7 @@ Put&nbsp;together:<br>
<dl><dt><a name="PageMeasurement-PrepareResults"><strong>PrepareResults</strong></a>(self, options)</dt></dl>
<dl><dt><a name="PageMeasurement-__init__"><strong>__init__</strong></a>(self, action_name_to_run<font color="#909090">=''</font>, needs_browser_restart_after_each_run<font color="#909090">=False</font>, discard_first_result<font color="#909090">=False</font>)</dt></dl>
<dl><dt><a name="PageMeasurement-__init__"><strong>__init__</strong></a>(self, action_name_to_run<font color="#909090">=''</font>, needs_browser_restart_after_each_run<font color="#909090">=False</font>, discard_first_result<font color="#909090">=False</font>, clear_cache_before_each_run<font color="#909090">=False</font>)</dt></dl>
<hr>
Data descriptors defined here:<br>
......@@ -339,6 +339,10 @@ Data descriptors inherited from <a href="telemetry.page.page_test.html#PageTest"
</dl>
<dl><dt><strong>action_name_to_run</strong></dt>
</dl>
<dl><dt><strong>clear_cache_before_each_run</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;browser's&nbsp;disk&nbsp;and&nbsp;memory&nbsp;cache&nbsp;will&nbsp;be&nbsp;cleared<br>
before&nbsp;each&nbsp;run.</tt></dd>
</dl>
<dl><dt><strong>discard_first_result</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;first&nbsp;run&nbsp;of&nbsp;the&nbsp;test&nbsp;is&nbsp;discarded.&nbsp;&nbsp;This&nbsp;is<br>
useful&nbsp;for&nbsp;cases&nbsp;where&nbsp;it's&nbsp;desirable&nbsp;to&nbsp;have&nbsp;some&nbsp;test&nbsp;resource&nbsp;cached&nbsp;so<br>
......@@ -378,6 +382,8 @@ and&nbsp;the&nbsp;page's&nbsp;documentVisibilityState&nbsp;becoming&nbsp;'visibl
delay&nbsp;until&nbsp;the&nbsp;actual&nbsp;tab&nbsp;is&nbsp;visible&nbsp;to&nbsp;the&nbsp;user.&nbsp;None&nbsp;of&nbsp;these&nbsp;delays<br>
are&nbsp;included&nbsp;in&nbsp;this&nbsp;call.</tt></dd></dl>
<dl><dt><a name="Tab-ClearCache"><strong>ClearCache</strong></a>(self)</dt><dd><tt>Clears&nbsp;the&nbsp;browser's&nbsp;HTTP&nbsp;disk&nbsp;cache&nbsp;and&nbsp;the&nbsp;tab's&nbsp;HTTP&nbsp;memory&nbsp;cache.</tt></dd></dl>
<dl><dt><a name="Tab-CollectGarbage"><strong>CollectGarbage</strong></a>(self)</dt></dl>
<dl><dt><a name="Tab-GetCookieByName"><strong>GetCookieByName</strong></a>(self, name, timeout<font color="#909090">=60</font>)</dt><dd><tt>Returns&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;cookie&nbsp;by&nbsp;the&nbsp;given&nbsp;|name|.</tt></dd></dl>
......
......@@ -172,7 +172,7 @@ Put&nbsp;together:<br>
<dl><dt><a name="PageMeasurement-PrepareResults"><strong>PrepareResults</strong></a>(self, options)</dt></dl>
<dl><dt><a name="PageMeasurement-__init__"><strong>__init__</strong></a>(self, action_name_to_run<font color="#909090">=''</font>, needs_browser_restart_after_each_run<font color="#909090">=False</font>, discard_first_result<font color="#909090">=False</font>)</dt></dl>
<dl><dt><a name="PageMeasurement-__init__"><strong>__init__</strong></a>(self, action_name_to_run<font color="#909090">=''</font>, needs_browser_restart_after_each_run<font color="#909090">=False</font>, discard_first_result<font color="#909090">=False</font>, clear_cache_before_each_run<font color="#909090">=False</font>)</dt></dl>
<hr>
Data descriptors defined here:<br>
......@@ -235,6 +235,10 @@ Data descriptors inherited from <a href="telemetry.page.page_test.html#PageTest"
</dl>
<dl><dt><strong>action_name_to_run</strong></dt>
</dl>
<dl><dt><strong>clear_cache_before_each_run</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;browser's&nbsp;disk&nbsp;and&nbsp;memory&nbsp;cache&nbsp;will&nbsp;be&nbsp;cleared<br>
before&nbsp;each&nbsp;run.</tt></dd>
</dl>
<dl><dt><strong>discard_first_result</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;first&nbsp;run&nbsp;of&nbsp;the&nbsp;test&nbsp;is&nbsp;discarded.&nbsp;&nbsp;This&nbsp;is<br>
useful&nbsp;for&nbsp;cases&nbsp;where&nbsp;it's&nbsp;desirable&nbsp;to&nbsp;have&nbsp;some&nbsp;test&nbsp;resource&nbsp;cached&nbsp;so<br>
......
......@@ -158,7 +158,7 @@ is&nbsp;torn&nbsp;down.</tt></dd></dl>
<dl><dt><a name="PageTest-WillRunPageSet"><strong>WillRunPageSet</strong></a>(self, tab)</dt><dd><tt>Override&nbsp;to&nbsp;do&nbsp;operations&nbsp;before&nbsp;the&nbsp;page&nbsp;set&nbsp;is&nbsp;navigated.</tt></dd></dl>
<dl><dt><a name="PageTest-__init__"><strong>__init__</strong></a>(self, test_method_name, action_name_to_run<font color="#909090">=''</font>, needs_browser_restart_after_each_run<font color="#909090">=False</font>, discard_first_result<font color="#909090">=False</font>)</dt></dl>
<dl><dt><a name="PageTest-__init__"><strong>__init__</strong></a>(self, test_method_name, action_name_to_run<font color="#909090">=''</font>, needs_browser_restart_after_each_run<font color="#909090">=False</font>, discard_first_result<font color="#909090">=False</font>, clear_cache_before_each_run<font color="#909090">=False</font>)</dt></dl>
<hr>
Data descriptors defined here:<br>
......@@ -170,6 +170,10 @@ Data descriptors defined here:<br>
</dl>
<dl><dt><strong>action_name_to_run</strong></dt>
</dl>
<dl><dt><strong>clear_cache_before_each_run</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;browser's&nbsp;disk&nbsp;and&nbsp;memory&nbsp;cache&nbsp;will&nbsp;be&nbsp;cleared<br>
before&nbsp;each&nbsp;run.</tt></dd>
</dl>
<dl><dt><strong>discard_first_result</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;first&nbsp;run&nbsp;of&nbsp;the&nbsp;test&nbsp;is&nbsp;discarded.&nbsp;&nbsp;This&nbsp;is<br>
useful&nbsp;for&nbsp;cases&nbsp;where&nbsp;it's&nbsp;desirable&nbsp;to&nbsp;have&nbsp;some&nbsp;test&nbsp;resource&nbsp;cached&nbsp;so<br>
......
......@@ -100,5 +100,12 @@ Data descriptors defined here:<br>
&nbsp;<br>
Args:<br>
&nbsp;&nbsp;base_dir:&nbsp;Path&nbsp;to&nbsp;directory&nbsp;containing&nbsp;tests&nbsp;and&nbsp;ProfileCreators.</tt></dd></dl>
</td></tr></table>
</td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#55aa55">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Data</strong></big></font></td></tr>
<tr><td bgcolor="#55aa55"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><strong>__warningregistry__</strong> = {("Not importing directory '/usr/local/google/code/...ls/telemetry/telemetry/test': missing __init__.py", &lt;type 'exceptions.ImportWarning'&gt;, 7): True}</td></tr></table>
</body></html>
\ No newline at end of file
......@@ -115,6 +115,10 @@ Data descriptors inherited from <a href="telemetry.page.page_test.html#PageTest"
</dl>
<dl><dt><strong>action_name_to_run</strong></dt>
</dl>
<dl><dt><strong>clear_cache_before_each_run</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;browser's&nbsp;disk&nbsp;and&nbsp;memory&nbsp;cache&nbsp;will&nbsp;be&nbsp;cleared<br>
before&nbsp;each&nbsp;run.</tt></dd>
</dl>
<dl><dt><strong>discard_first_result</strong></dt>
<dd><tt>When&nbsp;set&nbsp;to&nbsp;True,&nbsp;the&nbsp;first&nbsp;run&nbsp;of&nbsp;the&nbsp;test&nbsp;is&nbsp;discarded.&nbsp;&nbsp;This&nbsp;is<br>
useful&nbsp;for&nbsp;cases&nbsp;where&nbsp;it's&nbsp;desirable&nbsp;to&nbsp;have&nbsp;some&nbsp;test&nbsp;resource&nbsp;cached&nbsp;so<br>
......
......@@ -10,6 +10,7 @@ from telemetry.core import util
from telemetry.core import exceptions
from telemetry.core.chrome import inspector_console
from telemetry.core.chrome import inspector_memory
from telemetry.core.chrome import inspector_network
from telemetry.core.chrome import inspector_page
from telemetry.core.chrome import inspector_runtime
from telemetry.core.chrome import inspector_timeline
......@@ -35,6 +36,7 @@ class InspectorBackend(object):
self._page = inspector_page.InspectorPage(self)
self._runtime = inspector_runtime.InspectorRuntime(self)
self._timeline = inspector_timeline.InspectorTimeline(self)
self._network = inspector_network.InspectorNetwork(self)
def __del__(self):
self.Disconnect()
......@@ -199,6 +201,11 @@ class InspectorBackend(object):
def StopTimelineRecording(self):
self._timeline.Stop()
# Network public methods.
def ClearCache(self):
self._network.ClearCache()
# Methods used internally by other backends.
def DispatchNotifications(self, timeout=10):
......
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
class InspectorNetwork(object):
def __init__(self, inspector_backend):
self._inspector_backend = inspector_backend
def ClearCache(self, timeout=60):
"""Clears the browser's disk and memory cache."""
res = self._inspector_backend.SyncRequest({
'method': 'Network.canClearBrowserCache'
}, timeout)
assert res['result'], 'Cache clearing is not supported by this browser'
self._inspector_backend.SyncRequest({
'method': 'Network.clearBrowserCache'
}, timeout)
......@@ -98,3 +98,7 @@ class Tab(web_contents.WebContents):
def CollectGarbage(self):
self._inspector_backend.CollectGarbage()
def ClearCache(self):
"""Clears the browser's HTTP disk cache and the tab's HTTP memory cache."""
self._inspector_backend.ClearCache()
......@@ -44,12 +44,14 @@ class PageMeasurement(page_test.PageTest):
def __init__(self,
action_name_to_run='',
needs_browser_restart_after_each_run=False,
discard_first_result=False):
discard_first_result=False,
clear_cache_before_each_run=False):
super(PageMeasurement, self).__init__(
'_RunTest',
action_name_to_run,
needs_browser_restart_after_each_run,
discard_first_result)
discard_first_result,
clear_cache_before_each_run)
def _RunTest(self, page, tab, results):
results.WillMeasurePage(page)
......
......@@ -143,6 +143,8 @@ class PageState(object):
self._did_login = True
if test:
if test.clear_cache_before_each_run:
tab.ClearCache()
test.WillNavigateToPage(page, tab)
tab.Navigate(target_side_url, page.script_to_evaluate_on_commit)
if test:
......
......@@ -49,7 +49,8 @@ class PageTest(object):
test_method_name,
action_name_to_run='',
needs_browser_restart_after_each_run=False,
discard_first_result=False):
discard_first_result=False,
clear_cache_before_each_run=False):
self.options = None
try:
self._test_method = getattr(self, test_method_name)
......@@ -60,6 +61,7 @@ class PageTest(object):
self._needs_browser_restart_after_each_run = (
needs_browser_restart_after_each_run)
self._discard_first_result = discard_first_result
self._clear_cache_before_each_run = clear_cache_before_each_run
@property
def discard_first_result(self):
......@@ -68,6 +70,12 @@ class PageTest(object):
the first run of the test can warm things up. """
return self._discard_first_result
@property
def clear_cache_before_each_run(self):
"""When set to True, the browser's disk and memory cache will be cleared
before each run."""
return self._clear_cache_before_each_run
def NeedsBrowserRestartAfterEachRun(self, tab): # pylint: disable=W0613
"""Override to specify browser restart after each run."""
return self._needs_browser_restart_after_each_run
......
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