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