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) |