Chromium Code Reviews| Index: telemetry/telemetry/page/cache_temperature.py |
| diff --git a/telemetry/telemetry/page/cache_temperature.py b/telemetry/telemetry/page/cache_temperature.py |
| index 3e22d02eac6e41389f4778bb07582113bbae4631..bedd33a9ddea26c2d3d6c1a7c4db55d9dcdddf3e 100644 |
| --- a/telemetry/telemetry/page/cache_temperature.py |
| +++ b/telemetry/telemetry/page/cache_temperature.py |
| @@ -12,17 +12,17 @@ https://docs.google.com/document/u/1/d/12D7tkhZi887g9d0U2askU9JypU_wYiEI7Lw0bfwx |
| import logging |
| -import py_utils |
| - |
| # Default Cache Temperature. The page doesn't care which browser cache state |
| # it is run on. |
| ANY = 'any' |
| # Emulates cold runs. Clears various caches and data with using tab.ClearCache() |
| # and tab.ClearDataForOrigin(). |
| COLD = 'cold' |
| -# Emulates warm runs. Ensures that the page was visited at least once just |
| -# before the run. |
| +# Emulates warm runs. Ensures that the page was visited once before the run. |
| WARM = 'warm' |
| +# Emulates hot runs. Ensures that the page was visited at least twice before |
| +# the run. |
| +HOT = 'hot' |
| # These regacy states will be removed after chromium test scripts are adapted |
| # to new states. |
| @@ -46,7 +46,6 @@ class MarkTelemetryInternal(object): |
| def __exit__(self, exception_type, exception_value, traceback): |
| if exception_type: |
| return True |
| - |
| marker = 'telemetry.internal.%s.end' % self.identifier |
| self.browser.tabs[0].ExecuteJavaScript( |
| "console.time({{ marker }});", marker=marker) |
| @@ -54,18 +53,19 @@ class MarkTelemetryInternal(object): |
| "console.timeEnd({{ marker }});", marker=marker) |
| return True |
| -def ClearCache(browser): |
| +def ClearCacheAndData(browser, url): |
| tab = browser.tabs[0] |
| tab.ClearCache(force=True) |
| + tab.ClearDataForOrigin(url) |
| -def WarmCache(page, browser): |
| - with MarkTelemetryInternal(browser, 'warm_cache'): |
| +def WarmCache(page, browser, temperature): |
| + with MarkTelemetryInternal(browser, 'warm_cache.%s' % temperature): |
| tab = browser.tabs[0] |
| - tab.Navigate(page.url) |
| - py_utils.WaitFor(tab.HasReachedQuiescence, 60) |
| - tab.WaitForDocumentReadyStateToBeComplete() |
| + page.RunNavigateSteps(tab.action_runner) |
| + page.RunPageInteractions(tab.action_runner) |
| tab.Navigate("about:blank") |
| tab.WaitForDocumentReadyStateToBeComplete() |
| + tab.StopAllServiceWorkers() |
| def EnsurePageCacheTemperature(page, browser, previous_page=None): |
| temperature = page.cache_temperature |
| @@ -84,12 +84,11 @@ def EnsurePageCacheTemperature(page, browser, previous_page=None): |
| tab = browser.tabs[0] |
| tab.Navigate("http://does.not.exist") |
| tab.WaitForDocumentReadyStateToBeComplete() |
| - ClearCache(browser) |
| + ClearCacheAndData(browser, page.url) |
| elif temperature == WARM: |
| if (previous_page is not None and |
| previous_page.url == page.url and |
| - (previous_page.cache_temperature == COLD or |
| - previous_page.cache_temperature == WARM)): |
| + previous_page.cache_temperature == COLD): |
| if '#' in page.url: |
| # Navigate to inexistent URL to avoid in-page hash navigation. |
| # Note: Unlike PCv1, PCv2 iterates the same URL for different cache |
| @@ -99,5 +98,28 @@ def EnsurePageCacheTemperature(page, browser, previous_page=None): |
| tab = browser.tabs[0] |
| tab.Navigate("http://does.not.exist") |
| tab.WaitForDocumentReadyStateToBeComplete() |
| - return |
| - WarmCache(page, browser) |
| + browser.tabs[0].StopAllServiceWorkers() |
|
kouhei (in TOK)
2017/09/26 04:40:52
Would you add a comment why this is needed?
yukiy
2017/09/26 05:23:32
Done.
Also added a comment for StopAllServiceWorke
|
| + else: |
| + ClearCacheAndData(browser, page.url) |
| + WarmCache(page, browser, WARM) |
| + elif temperature == HOT: |
| + if (previous_page is not None and |
| + previous_page.url == page.url and |
| + previous_page.cache_temperature != ANY): |
| + if previous_page.cache_temperature == COLD: |
| + WarmCache(page, browser, HOT) |
| + else: |
| + if '#' in page.url: |
| + # Navigate to inexistent URL to avoid in-page hash navigation. |
| + # Note: Unlike PCv1, PCv2 iterates the same URL for different cache |
| + # configurations. This may issue blink in-page hash navigations, |
| + # which isn't intended here. |
| + with MarkTelemetryInternal(browser, 'avoid_double_hash_navigation'): |
| + tab = browser.tabs[0] |
| + tab.Navigate("http://does.not.exist") |
| + tab.WaitForDocumentReadyStateToBeComplete() |
| + browser.tabs[0].StopAllServiceWorkers() |
| + else: |
| + ClearCacheAndData(browser, page.url) |
| + WarmCache(page, browser, WARM) |
| + WarmCache(page, browser, HOT) |