| OLD | NEW |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 import unittest | 5 import unittest |
| 6 | 6 |
| 7 from telemetry.core import browser_options | 7 from telemetry.core import browser_options |
| 8 from telemetry.page import page_runner | 8 from telemetry.page import page_runner |
| 9 from telemetry.results import page_test_results | 9 from telemetry.results import page_test_results |
| 10 from telemetry.unittest import simple_mock | 10 from telemetry.unittest import simple_mock |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 | 87 |
| 88 class FakePlatform(object): | 88 class FakePlatform(object): |
| 89 def GetOSName(self): | 89 def GetOSName(self): |
| 90 return 'fake' | 90 return 'fake' |
| 91 def CanMonitorPower(self): | 91 def CanMonitorPower(self): |
| 92 return False | 92 return False |
| 93 | 93 |
| 94 | 94 |
| 95 class PageCyclerUnitTest(unittest.TestCase): | 95 class PageCyclerUnitTest(unittest.TestCase): |
| 96 | 96 |
| 97 def SetUpCycler(self, args, setup_memory_module=False): | 97 def SetUpCycler(self, page_repeat=1, pageset_repeat=10, cold_load_percent=50, |
| 98 cycler = page_cycler.PageCycler() | 98 record_v8_object_stats=False, report_speed_index=False, |
| 99 setup_memory_module=False): |
| 100 cycler = page_cycler.PageCycler( |
| 101 page_repeat = page_repeat, |
| 102 pageset_repeat = pageset_repeat, |
| 103 cold_load_percent = cold_load_percent, |
| 104 record_v8_object_stats = record_v8_object_stats, |
| 105 report_speed_index = report_speed_index) |
| 99 options = browser_options.BrowserFinderOptions() | 106 options = browser_options.BrowserFinderOptions() |
| 100 options.browser_options.platform = FakePlatform() | 107 options.browser_options.platform = FakePlatform() |
| 101 parser = options.CreateParser() | 108 parser = options.CreateParser() |
| 102 page_runner.AddCommandLineArgs(parser) | 109 page_runner.AddCommandLineArgs(parser) |
| 103 cycler.AddCommandLineArgs(parser) | 110 args = ['--page-repeat=%i' % page_repeat, |
| 104 cycler.SetArgumentDefaults(parser) | 111 '--pageset-repeat=%i' % pageset_repeat] |
| 105 parser.parse_args(args) | 112 parser.parse_args(args) |
| 106 page_runner.ProcessCommandLineArgs(parser, options) | 113 page_runner.ProcessCommandLineArgs(parser, options) |
| 107 cycler.ProcessCommandLineArgs(parser, options) | |
| 108 cycler.CustomizeBrowserOptions(options.browser_options) | 114 cycler.CustomizeBrowserOptions(options.browser_options) |
| 109 | 115 |
| 110 if setup_memory_module: | 116 if setup_memory_module: |
| 111 # Mock out memory metrics; the real ones require a real browser. | 117 # Mock out memory metrics; the real ones require a real browser. |
| 112 mock_memory_metric = MockMemoryMetric() | 118 mock_memory_metric = MockMemoryMetric() |
| 113 | 119 |
| 114 mock_memory_module = simple_mock.MockObject() | 120 mock_memory_module = simple_mock.MockObject() |
| 115 mock_memory_module.ExpectCall( | 121 mock_memory_module.ExpectCall( |
| 116 'MemoryMetric').WithArgs(simple_mock.DONT_CARE).WillReturn( | 122 'MemoryMetric').WithArgs(simple_mock.DONT_CARE).WillReturn( |
| 117 mock_memory_metric) | 123 mock_memory_metric) |
| 118 | 124 |
| 119 real_memory_module = page_cycler.memory | 125 real_memory_module = page_cycler.memory |
| 120 try: | 126 try: |
| 121 page_cycler.memory = mock_memory_module | 127 page_cycler.memory = mock_memory_module |
| 122 browser = FakeBrowser() | 128 browser = FakeBrowser() |
| 123 cycler.WillStartBrowser(options.browser_options.platform) | 129 cycler.WillStartBrowser(options.browser_options.platform) |
| 124 cycler.DidStartBrowser(browser) | 130 cycler.DidStartBrowser(browser) |
| 125 finally: | 131 finally: |
| 126 page_cycler.memory = real_memory_module | 132 page_cycler.memory = real_memory_module |
| 127 | 133 |
| 128 return cycler | 134 return cycler |
| 129 | 135 |
| 130 def testOptionsColdLoadNoArgs(self): | 136 def testOptionsColdLoadNoArgs(self): |
| 131 cycler = self.SetUpCycler([]) | 137 cycler = self.SetUpCycler() |
| 132 | 138 |
| 133 self.assertEquals(cycler._cold_run_start_index, 5) | 139 self.assertEquals(cycler._cold_run_start_index, 5) |
| 134 | 140 |
| 135 def testOptionsColdLoadPagesetRepeat(self): | 141 def testOptionsColdLoadPagesetRepeat(self): |
| 136 cycler = self.SetUpCycler(['--pageset-repeat=20', '--page-repeat=2']) | 142 cycler = self.SetUpCycler(pageset_repeat=20, page_repeat=2) |
| 137 | 143 |
| 138 self.assertEquals(cycler._cold_run_start_index, 20) | 144 self.assertEquals(cycler._cold_run_start_index, 20) |
| 139 | 145 |
| 140 def testOptionsColdLoadRequested(self): | 146 def testOptionsColdLoadRequested(self): |
| 141 cycler = self.SetUpCycler(['--pageset-repeat=21', '--page-repeat=2', | 147 cycler = self.SetUpCycler(pageset_repeat=21, page_repeat=2, |
| 142 '--cold-load-percent=40']) | 148 cold_load_percent=40) |
| 143 | 149 |
| 144 self.assertEquals(cycler._cold_run_start_index, 26) | 150 self.assertEquals(cycler._cold_run_start_index, 26) |
| 145 | 151 |
| 146 def testCacheHandled(self): | 152 def testCacheHandled(self): |
| 147 cycler = self.SetUpCycler(['--pageset-repeat=5', | 153 cycler = self.SetUpCycler(pageset_repeat=5, |
| 148 '--cold-load-percent=50'], | 154 cold_load_percent=50, |
| 149 True) | 155 setup_memory_module=True) |
| 150 | 156 |
| 151 url_name = 'http://fakepage.com' | 157 url_name = 'http://fakepage.com' |
| 152 page = FakePage(url_name) | 158 page = FakePage(url_name) |
| 153 tab = FakeTab() | 159 tab = FakeTab() |
| 154 | 160 |
| 155 for i in range(5): | 161 for i in range(5): |
| 156 results = page_test_results.PageTestResults() | 162 results = page_test_results.PageTestResults() |
| 157 results.WillRunPage(page) | 163 results.WillRunPage(page) |
| 158 cycler.WillNavigateToPage(page, tab) | 164 cycler.WillNavigateToPage(page, tab) |
| 159 self.assertEqual(max(0, i - 2), tab.clear_cache_calls, | 165 self.assertEqual(max(0, i - 2), tab.clear_cache_calls, |
| 160 'Iteration %d tab.clear_cache_calls %d' % | 166 'Iteration %d tab.clear_cache_calls %d' % |
| 161 (i, tab.clear_cache_calls)) | 167 (i, tab.clear_cache_calls)) |
| 162 cycler.ValidateAndMeasurePage(page, tab, results) | 168 cycler.ValidateAndMeasurePage(page, tab, results) |
| 163 results.DidRunPage(page) | 169 results.DidRunPage(page) |
| 164 | 170 |
| 165 values = results.all_page_specific_values | 171 values = results.all_page_specific_values |
| 166 self.assertGreater(len(values), 2) | 172 self.assertGreater(len(values), 2) |
| 167 | 173 |
| 168 self.assertEqual(values[0].page, page) | 174 self.assertEqual(values[0].page, page) |
| 169 chart_name = 'cold_times' if i == 0 or i > 2 else 'warm_times' | 175 chart_name = 'cold_times' if i == 0 or i > 2 else 'warm_times' |
| 170 self.assertEqual(values[0].name, '%s.page_load_time' % chart_name) | 176 self.assertEqual(values[0].name, '%s.page_load_time' % chart_name) |
| 171 self.assertEqual(values[0].units, 'ms') | 177 self.assertEqual(values[0].units, 'ms') |
| 172 | 178 |
| 173 cycler.DidNavigateToPage(page, tab) | 179 cycler.DidNavigateToPage(page, tab) |
| 174 | 180 |
| 175 def testColdWarm(self): | 181 def testColdWarm(self): |
| 176 cycler = self.SetUpCycler(['--pageset-repeat=3'], True) | 182 cycler = self.SetUpCycler(pageset_repeat=3, setup_memory_module=True) |
| 177 pages = [FakePage('http://fakepage1.com'), FakePage('http://fakepage2.com')] | 183 pages = [FakePage('http://fakepage1.com'), FakePage('http://fakepage2.com')] |
| 178 tab = FakeTab() | 184 tab = FakeTab() |
| 179 for i in range(3): | 185 for i in range(3): |
| 180 for page in pages: | 186 for page in pages: |
| 181 results = page_test_results.PageTestResults() | 187 results = page_test_results.PageTestResults() |
| 182 results.WillRunPage(page) | 188 results.WillRunPage(page) |
| 183 cycler.WillNavigateToPage(page, tab) | 189 cycler.WillNavigateToPage(page, tab) |
| 184 cycler.ValidateAndMeasurePage(page, tab, results) | 190 cycler.ValidateAndMeasurePage(page, tab, results) |
| 185 results.DidRunPage(page) | 191 results.DidRunPage(page) |
| 186 | 192 |
| 187 values = results.all_page_specific_values | 193 values = results.all_page_specific_values |
| 188 self.assertGreater(len(values), 2) | 194 self.assertGreater(len(values), 2) |
| 189 | 195 |
| 190 self.assertEqual(values[0].page, page) | 196 self.assertEqual(values[0].page, page) |
| 191 | 197 |
| 192 chart_name = 'cold_times' if i == 0 or i > 1 else 'warm_times' | 198 chart_name = 'cold_times' if i == 0 or i > 1 else 'warm_times' |
| 193 self.assertEqual(values[0].name, '%s.page_load_time' % chart_name) | 199 self.assertEqual(values[0].name, '%s.page_load_time' % chart_name) |
| 194 self.assertEqual(values[0].units, 'ms') | 200 self.assertEqual(values[0].units, 'ms') |
| 195 | 201 |
| 196 cycler.DidNavigateToPage(page, tab) | 202 cycler.DidNavigateToPage(page, tab) |
| 197 | 203 |
| 198 def testResults(self): | 204 def testResults(self): |
| 199 cycler = self.SetUpCycler([], True) | 205 cycler = self.SetUpCycler(setup_memory_module=True) |
| 200 | 206 |
| 201 pages = [FakePage('http://fakepage1.com'), FakePage('http://fakepage2.com')] | 207 pages = [FakePage('http://fakepage1.com'), FakePage('http://fakepage2.com')] |
| 202 tab = FakeTab() | 208 tab = FakeTab() |
| 203 | 209 |
| 204 for i in range(2): | 210 for i in range(2): |
| 205 for page in pages: | 211 for page in pages: |
| 206 results = page_test_results.PageTestResults() | 212 results = page_test_results.PageTestResults() |
| 207 results.WillRunPage(page) | 213 results.WillRunPage(page) |
| 208 cycler.WillNavigateToPage(page, tab) | 214 cycler.WillNavigateToPage(page, tab) |
| 209 cycler.ValidateAndMeasurePage(page, tab, results) | 215 cycler.ValidateAndMeasurePage(page, tab, results) |
| (...skipping 11 matching lines...) Expand all Loading... |
| 221 self.assertEqual(value.page, page) | 227 self.assertEqual(value.page, page) |
| 222 self.assertEqual(value.name, | 228 self.assertEqual(value.name, |
| 223 'cpu_utilization.cpu_utilization_%s' % expected) | 229 'cpu_utilization.cpu_utilization_%s' % expected) |
| 224 self.assertEqual(value.units, '%') | 230 self.assertEqual(value.units, '%') |
| 225 | 231 |
| 226 cycler.DidNavigateToPage(page, tab) | 232 cycler.DidNavigateToPage(page, tab) |
| 227 | 233 |
| 228 def testLegacyPagesAvoidCrossRenderNavigation(self): | 234 def testLegacyPagesAvoidCrossRenderNavigation(self): |
| 229 # For legacy page cyclers with file URLs, verify that WillNavigateToPage | 235 # For legacy page cyclers with file URLs, verify that WillNavigateToPage |
| 230 # does an initial navigate to avoid paying for a cross-renderer navigation. | 236 # does an initial navigate to avoid paying for a cross-renderer navigation. |
| 231 cycler = self.SetUpCycler([], True) | 237 cycler = self.SetUpCycler(setup_memory_module=True) |
| 232 pages = [FakePage('file://fakepage1.com'), FakePage('file://fakepage2.com')] | 238 pages = [FakePage('file://fakepage1.com'), FakePage('file://fakepage2.com')] |
| 233 tab = FakeTab() | 239 tab = FakeTab() |
| 234 | 240 |
| 235 self.assertEqual([], tab.navigated_urls) | 241 self.assertEqual([], tab.navigated_urls) |
| 236 for page in pages * 2: | 242 for page in pages * 2: |
| 237 cycler.WillNavigateToPage(page, tab) | 243 cycler.WillNavigateToPage(page, tab) |
| 238 self.assertEqual( | 244 self.assertEqual( |
| 239 ['http://fakeserver:99999/nonexistent.html'], tab.navigated_urls) | 245 ['http://fakeserver:99999/nonexistent.html'], tab.navigated_urls) |
| OLD | NEW |