| Index: tools/perf/measurements/page_cycler_unittest.py
|
| diff --git a/tools/perf/measurements/page_cycler_unittest.py b/tools/perf/measurements/page_cycler_unittest.py
|
| index 39356ad14d684bc7818498eeccc6a760d7ed83f8..13f4cd2921e3b50ad756fe2812e42934be4dd91f 100644
|
| --- a/tools/perf/measurements/page_cycler_unittest.py
|
| +++ b/tools/perf/measurements/page_cycler_unittest.py
|
| @@ -29,6 +29,22 @@ class MockMemoryMetric(object):
|
| def AddSummaryResults(self, tab, results):
|
| pass
|
|
|
| +# Used to mock loading a page.
|
| +class FakePage(object):
|
| + def __init__(self, url):
|
| + self.url = url
|
| +
|
| +# Used to mock a browser tab.
|
| +class FakeTab(object):
|
| + def __init__(self):
|
| + self.clear_cache_calls = 0
|
| + def ClearCache(self):
|
| + self.clear_cache_calls += 1
|
| + def EvaluateJavaScript(self, _):
|
| + return 1
|
| + def WaitForJavaScriptExpression(self, _, __):
|
| + pass
|
| +
|
| class PageCyclerUnitTest(unittest.TestCase):
|
|
|
| # TODO(tonyg): Remove this backfill when we can assume python 2.7 everywhere.
|
| @@ -36,7 +52,7 @@ class PageCyclerUnitTest(unittest.TestCase):
|
| self.assertTrue(first in second,
|
| msg="'%s' not found in '%s'" % (first, second))
|
|
|
| - def setupCycler(self, args):
|
| + def setupCycler(self, args, setup_memory_module=False):
|
| cycler = page_cycler.PageCycler()
|
| options = browser_options.BrowserFinderOptions()
|
| parser = options.CreateParser()
|
| @@ -44,26 +60,39 @@ class PageCyclerUnitTest(unittest.TestCase):
|
| parser.parse_args(args)
|
| cycler.CustomizeBrowserOptions(options)
|
|
|
| + if setup_memory_module:
|
| + # Mock out memory metrics; the real ones require a real browser.
|
| + mock_memory_metric = MockMemoryMetric()
|
| +
|
| + mock_memory_module = simple_mock.MockObject()
|
| + mock_memory_module.ExpectCall(
|
| + 'MemoryMetric').WithArgs(simple_mock.DONT_CARE).WillReturn(
|
| + mock_memory_metric)
|
| +
|
| + real_memory_module = page_cycler.memory
|
| + try:
|
| + page_cycler.memory = mock_memory_module
|
| + cycler.DidStartBrowser(None)
|
| + finally:
|
| + page_cycler.memory = real_memory_module
|
| +
|
| return cycler
|
|
|
| def testOptionsColdLoadNoArgs(self):
|
| cycler = self.setupCycler([])
|
|
|
| - self.assertFalse(cycler._cold_runs_requested)
|
| - self.assertEqual(cycler._number_warm_runs, 9)
|
| + self.assertEquals(cycler._cold_run_start_index, 10)
|
|
|
| def testOptionsColdLoadPagesetRepeat(self):
|
| cycler = self.setupCycler(['--pageset-repeat=20', '--page-repeat=2'])
|
|
|
| - self.assertFalse(cycler._cold_runs_requested)
|
| - self.assertEqual(cycler._number_warm_runs, 38)
|
| + self.assertEquals(cycler._cold_run_start_index, 40)
|
|
|
| def testOptionsColdLoadRequested(self):
|
| cycler = self.setupCycler(['--pageset-repeat=21', '--page-repeat=2',
|
| '--cold-load-percent=40'])
|
|
|
| - self.assertTrue(cycler._cold_runs_requested)
|
| - self.assertEqual(cycler._number_warm_runs, 24)
|
| + self.assertEquals(cycler._cold_run_start_index, 26)
|
|
|
| def testIncompatibleOptions(self):
|
| exception_seen = False
|
| @@ -79,36 +108,8 @@ class PageCyclerUnitTest(unittest.TestCase):
|
|
|
| def testCacheHandled(self):
|
| cycler = self.setupCycler(['--pageset-repeat=5',
|
| - '--cold-load-percent=50'])
|
| -
|
| - # Mock out memory metrics; the real ones require a real browser.
|
| - mock_memory_metric = MockMemoryMetric()
|
| -
|
| - mock_memory_module = simple_mock.MockObject()
|
| - mock_memory_module.ExpectCall(
|
| - 'MemoryMetric').WithArgs(simple_mock.DONT_CARE).WillReturn(
|
| - mock_memory_metric)
|
| -
|
| - real_memory_module = page_cycler.memory
|
| - try:
|
| - page_cycler.memory = mock_memory_module
|
| - cycler.DidStartBrowser(None)
|
| - finally:
|
| - page_cycler.memory = real_memory_module
|
| -
|
| - class FakePage(object):
|
| - def __init__(self, url):
|
| - self.url = url
|
| -
|
| - class FakeTab(object):
|
| - def __init__(self):
|
| - self.clear_cache_calls = 0
|
| - def ClearCache(self):
|
| - self.clear_cache_calls += 1
|
| - def EvaluateJavaScript(self, _):
|
| - return 1
|
| - def WaitForJavaScriptExpression(self, _, __):
|
| - pass
|
| + '--cold-load-percent=50'],
|
| + True)
|
|
|
| url_name = "http://fakepage.com"
|
| page = FakePage(url_name)
|
| @@ -129,9 +130,30 @@ class PageCyclerUnitTest(unittest.TestCase):
|
| self.assertEqual(1, len(values))
|
| self.assertEqual(values[0].page, page)
|
|
|
| - chart_name = 'warm_times' if i > 3 else 'cold_times'
|
| - print values[0].name
|
| + chart_name = 'cold_times' if i == 0 or i > 2 else 'warm_times'
|
| self.assertEqual(values[0].name, '%s.page_load_time' % chart_name)
|
| self.assertEqual(values[0].units, 'ms')
|
|
|
| cycler.DidNavigateToPage(page, tab)
|
| +
|
| + def testColdWarm(self):
|
| + cycler = self.setupCycler(['--pageset-repeat=3'], True)
|
| + pages = [FakePage("http://fakepage1.com"), FakePage("http://fakepage2.com")]
|
| + tab = FakeTab()
|
| + results = page_measurement_results.PageMeasurementResults()
|
| + for i in range(3):
|
| + for page in pages:
|
| + cycler.WillNavigateToPage(page, tab)
|
| + results.WillMeasurePage(page)
|
| + cycler.MeasurePage(page, tab, results)
|
| +
|
| + values = results.page_specific_values_for_current_page
|
| + results.DidMeasurePage()
|
| +
|
| + self.assertEqual(1, len(values))
|
| + self.assertEqual(values[0].page, page)
|
| +
|
| + chart_name = 'cold_times' if i == 0 else 'warm_times'
|
| + self.assertEqual(values[0].name, '%s.page_load_time' % chart_name)
|
| +
|
| + cycler.DidNavigateToPage(page, tab)
|
|
|