Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2016 The Chromium Authors. All rights reserved. | 1 # Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """ | 5 """ |
| 6 Cache temperature specifies how the browser cache should be configured before | 6 Cache temperature specifies how the browser cache should be configured before |
| 7 the page run. | 7 the page run. |
| 8 | 8 |
| 9 See design doc for details: | 9 See design doc for details: |
| 10 https://docs.google.com/document/u/1/d/12D7tkhZi887g9d0U2askU9JypU_wYiEI7Lw0bfwx UgA | 10 https://docs.google.com/document/u/1/d/12D7tkhZi887g9d0U2askU9JypU_wYiEI7Lw0bfwx UgA |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 47 if exception_type: | 47 if exception_type: |
| 48 return True | 48 return True |
| 49 | 49 |
| 50 marker = 'telemetry.internal.%s.end' % self.identifier | 50 marker = 'telemetry.internal.%s.end' % self.identifier |
| 51 self.browser.tabs[0].ExecuteJavaScript( | 51 self.browser.tabs[0].ExecuteJavaScript( |
| 52 "console.time({{ marker }});", marker=marker) | 52 "console.time({{ marker }});", marker=marker) |
| 53 self.browser.tabs[0].ExecuteJavaScript( | 53 self.browser.tabs[0].ExecuteJavaScript( |
| 54 "console.timeEnd({{ marker }});", marker=marker) | 54 "console.timeEnd({{ marker }});", marker=marker) |
| 55 return True | 55 return True |
| 56 | 56 |
| 57 def ClearCache(browser): | |
| 58 with MarkTelemetryInternal(browser, 'clear_cache'): | |
| 59 any_tab = browser.tabs[0] | |
|
shimazu
2017/09/19 09:37:31
nit: |tab| seems enough.
yukiy
2017/09/21 08:23:44
Done.
| |
| 60 any_tab.ClearCache(force=True) | |
| 61 | |
| 62 def AvoidDoubleHashNavigation(page, browser): | |
| 63 if '#' in page.url: | |
|
shimazu
2017/09/19 09:37:31
nit: The opposite condition might be better to red
kouhei (in TOK)
2017/09/19 09:38:51
Would you mind keeping AvoidDoubleHashNavigation a
nednguyen
2017/09/19 09:50:05
+1. If the purpose is to make the EnsurePageCacheT
yukiy
2017/09/21 08:23:44
Done.
yukiy
2017/09/21 08:23:44
I chatted with kouhei@, and decided not to do this
yukiy
2017/09/21 08:23:44
Acknowledged.
| |
| 64 # Navigate to inexistent URL to avoid in-page hash navigation. | |
| 65 # Note: Unlike PCv1, PCv2 iterates the same URL for different cache | |
| 66 # configurations. This may issue blink in-page hash navigations, | |
| 67 # which isn't intended here. | |
| 68 with MarkTelemetryInternal(browser, 'avoid_double_hash_navigation'): | |
| 69 tab = browser.tabs[0] | |
| 70 tab.Navigate("http://does.not.exist") | |
| 71 tab.WaitForDocumentReadyStateToBeComplete() | |
| 72 | |
| 73 def WarmCache(page, browser): | |
| 74 with MarkTelemetryInternal(browser, 'warm_cache'): | |
| 75 tab = browser.tabs[0] | |
| 76 tab.Navigate(page.url) | |
| 77 py_utils.WaitFor(tab.HasReachedQuiescence, 60) | |
| 78 tab.WaitForDocumentReadyStateToBeComplete() | |
| 79 tab.Navigate("about:blank") | |
| 80 tab.WaitForDocumentReadyStateToBeComplete() | |
| 81 | |
| 57 def EnsurePageCacheTemperature(page, browser, previous_page=None): | 82 def EnsurePageCacheTemperature(page, browser, previous_page=None): |
| 58 temperature = page.cache_temperature | 83 temperature = page.cache_temperature |
| 59 logging.info('PageCacheTemperature: %s', temperature) | 84 logging.info('PageCacheTemperature: %s', temperature) |
| 60 | |
| 61 if temperature == ANY: | 85 if temperature == ANY: |
| 62 return | 86 return |
| 63 | |
| 64 if temperature == COLD: | 87 if temperature == COLD: |
| 65 with MarkTelemetryInternal(browser, 'clear_cache'): | 88 ClearCache(browser) |
| 66 any_tab = browser.tabs[0] | |
| 67 any_tab.ClearCache(force=True) | |
| 68 elif temperature == WARM: | 89 elif temperature == WARM: |
| 69 if (previous_page is not None and | 90 if (previous_page is not None and |
| 70 previous_page.url == page.url and | 91 previous_page.url == page.url and |
| 71 (previous_page.cache_temperature == COLD or | 92 (previous_page.cache_temperature == COLD or |
| 72 previous_page.cache_temperature == WARM)): | 93 previous_page.cache_temperature == WARM)): |
| 73 if '#' in page.url: | 94 AvoidDoubleHashNavigation(page, browser) |
| 74 # Navigate to inexistent URL to avoid in-page hash navigation. | |
| 75 # Note: Unlike PCv1, PCv2 iterates the same URL for different cache | |
| 76 # configurations. This may issue blink in-page hash navigations, | |
| 77 # which isn't intended here. | |
| 78 with MarkTelemetryInternal(browser, 'avoid_double_hash_navigation'): | |
| 79 tab = browser.tabs[0] | |
| 80 tab.Navigate("http://does.not.exist") | |
| 81 tab.WaitForDocumentReadyStateToBeComplete() | |
| 82 return | 95 return |
| 83 | 96 WarmCache(page, browser) |
| 84 with MarkTelemetryInternal(browser, 'warm_cache'): | |
| 85 tab = browser.tabs[0] | |
| 86 tab.Navigate(page.url) | |
| 87 py_utils.WaitFor(tab.HasReachedQuiescence, 60) | |
| 88 tab.WaitForDocumentReadyStateToBeComplete() | |
| 89 tab.Navigate("about:blank") | |
| 90 tab.WaitForDocumentReadyStateToBeComplete() | |
| OLD | NEW |