blob: e9825ee0b20c850035fd26c2049d56db150c4442 [file] [log] [blame]
# Copyright 2016 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.
import contextlib
from telemetry import decorators
from telemetry import page as page_module
from telemetry import story
from telemetry.internal.testing.test_page_sets import example_domain
from telemetry.page import cache_temperature
from telemetry.testing import browser_test_case
from telemetry.timeline import tracing_config
from telemetry.util import trace_processor
_TEST_URL = example_domain.HTTP_EXAMPLE
class CacheTemperatureTests(browser_test_case.BrowserTestCase):
def __init__(self, *args, **kwargs):
super(CacheTemperatureTests, self).__init__(*args, **kwargs)
self.markers = None
def setUp(self):
super(CacheTemperatureTests, self).setUp()
self._browser.platform.network_controller.StartReplay(
example_domain.FetchExampleDomainArchive())
def tearDown(self):
super(CacheTemperatureTests, self).tearDown()
self._browser.platform.network_controller.StopReplay()
@contextlib.contextmanager
def CaptureTraceMarkers(self):
tracing_controller = self._browser.platform.tracing_controller
options = tracing_config.TracingConfig()
options.enable_chrome_trace = True
tracing_controller.StartTracing(options)
try:
yield
finally:
trace_data = tracing_controller.StopTracing()
self.markers = trace_processor.ExtractTimelineMarkers(trace_data)
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureAny(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.ANY, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
self.assertNotIn('telemetry.internal.ensure_diskcache.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.warm.end', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.end', self.markers)
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureCold(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.COLD, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
self.assertIn('telemetry.internal.ensure_diskcache.start', self.markers)
self.assertIn('telemetry.internal.ensure_diskcache.end', self.markers)
@decorators.Disabled('reference')
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureWarmAfterColdRun(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.COLD, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
previous_page = page
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.WARM, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(
page, self._browser, previous_page)
self.assertNotIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.warm.end', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.end', self.markers)
@decorators.Disabled('reference')
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureWarmFromScratch(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.WARM, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
self.assertIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertIn('telemetry.internal.warm_cache.warm.end', self.markers)
@decorators.Disabled('reference')
@decorators.Enabled('has tabs')
@decorators.Disabled('all') # crbug.com/840033 crbug.com/960552
def testEnsureHotAfterColdAndWarmRun(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.COLD, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
previous_page = page
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.WARM, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(
page, self._browser, previous_page)
previous_page = page
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.HOT, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(
page, self._browser, previous_page)
self.assertNotIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.warm.end', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.end', self.markers)
@decorators.Disabled('reference')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureHotAfterColdRun(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.COLD, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
previous_page = page
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.HOT, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(
page, self._browser, previous_page)
# After navigation for another origin url, traces in previous origin page
# does not appear in |markers|, so we can not check this:
# self.assertIn('telemetry.internal.warm_cache.hot.start', markers)
# TODO: Ensure all traces are in |markers|
self.assertIn('telemetry.internal.warm_cache.hot.end', self.markers)
@decorators.Disabled('reference')
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureHotFromScratch(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.HOT, name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(page, self._browser)
self.assertIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertIn('telemetry.internal.warm_cache.warm.end', self.markers)
self.assertIn('telemetry.internal.warm_cache.hot.start', self.markers)
self.assertIn('telemetry.internal.warm_cache.hot.end', self.markers)
@decorators.Disabled('reference')
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureWarmBrowser(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.WARM_BROWSER,
name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(
page, self._browser)
# Browser cache warming happens in a different tab so markers shouldn't
# appear.
self.assertNotIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.warm.end', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.end', self.markers)
@decorators.Disabled('reference')
@decorators.Enabled('has tabs')
@decorators.Disabled('chromeos') # crbug.com/840033
def testEnsureHotBrowser(self):
with self.CaptureTraceMarkers():
story_set = story.StorySet()
page = page_module.Page(
_TEST_URL, page_set=story_set,
cache_temperature=cache_temperature.HOT_BROWSER,
name=_TEST_URL)
cache_temperature.EnsurePageCacheTemperature(
page, self._browser)
# Browser cache warming happens in a different tab so markers shouldn't
# appear.
self.assertNotIn('telemetry.internal.warm_cache.warm.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.warm.end', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.start', self.markers)
self.assertNotIn('telemetry.internal.warm_cache.hot.end', self.markers)