Revert 224458 "Enabling MediaStreamInfoBarTest.DenyingCameraDoes..."
[chromium-blink-merge.git] / tools / perf / measurements / page_cycler_unittest.py
blobdb8c1981070748ecee9ee1eb0473217c3ba42be2
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
3 # found in the LICENSE file.
4 import unittest
6 from measurements import page_cycler
7 from telemetry.core import browser_options
8 from telemetry.page import page_measurement_results
9 from telemetry.unittest import simple_mock
11 # Allow testing protected members in the unit test.
12 # pylint: disable=W0212
14 # Used instead of simple_mock.MockObject so that the precise order and
15 # number of calls need not be specified.
16 class MockMemoryMetric(object):
17 def __init__(self):
18 pass
20 def Start(self, page, tab):
21 pass
23 def Stop(self, page, tab):
24 pass
26 def AddResults(self, tab, results):
27 pass
29 def AddSummaryResults(self, tab, results):
30 pass
32 class PageCyclerUnitTest(unittest.TestCase):
34 # TODO(tonyg): Remove this backfill when we can assume python 2.7 everywhere.
35 def assertIn(self, first, second, msg=None):
36 self.assertTrue(first in second,
37 msg="'%s' not found in '%s'" % (first, second))
39 def setupCycler(self, args):
40 cycler = page_cycler.PageCycler()
41 options = browser_options.BrowserFinderOptions()
42 parser = options.CreateParser()
43 cycler.AddCommandLineOptions(parser)
44 parser.parse_args(args)
45 cycler.CustomizeBrowserOptions(options)
47 return cycler
49 def testOptionsColdLoadNoArgs(self):
50 cycler = self.setupCycler([])
52 self.assertFalse(cycler._cold_runs_requested)
53 self.assertEqual(cycler._number_warm_runs, 9)
55 def testOptionsColdLoadPagesetRepeat(self):
56 cycler = self.setupCycler(['--pageset-repeat=20', '--page-repeat=2'])
58 self.assertFalse(cycler._cold_runs_requested)
59 self.assertEqual(cycler._number_warm_runs, 38)
61 def testOptionsColdLoadRequested(self):
62 cycler = self.setupCycler(['--pageset-repeat=21', '--page-repeat=2',
63 '--cold-load-percent=40'])
65 self.assertTrue(cycler._cold_runs_requested)
66 self.assertEqual(cycler._number_warm_runs, 24)
68 def testIncompatibleOptions(self):
69 exception_seen = False
70 try:
71 self.setupCycler(['--pageset-repeat=20s', '--page-repeat=2s',
72 '--cold-load-percent=40'])
73 except Exception as e:
74 exception_seen = True
75 self.assertEqual('--cold-load-percent is incompatible with '
76 'timed repeat', e.args[0])
78 self.assertTrue(exception_seen)
80 def testCacheHandled(self):
81 cycler = self.setupCycler(['--pageset-repeat=5',
82 '--cold-load-percent=50'])
84 # Mock out memory metrics; the real ones require a real browser.
85 mock_memory_metric = MockMemoryMetric()
87 mock_memory_module = simple_mock.MockObject()
88 mock_memory_module.ExpectCall(
89 'MemoryMetric').WithArgs(simple_mock.DONT_CARE).WillReturn(
90 mock_memory_metric)
92 real_memory_module = page_cycler.memory
93 try:
94 page_cycler.memory = mock_memory_module
95 cycler.DidStartBrowser(None)
96 finally:
97 page_cycler.memory = real_memory_module
99 class FakePage(object):
100 def __init__(self, url):
101 self.url = url
103 class FakeTab(object):
104 def __init__(self):
105 self.clear_cache_calls = 0
106 def ClearCache(self):
107 self.clear_cache_calls += 1
108 def EvaluateJavaScript(self, _):
109 return 1
111 url_name = "http://fakepage.com"
112 page = FakePage(url_name)
113 tab = FakeTab()
114 results = page_measurement_results.PageMeasurementResults()
116 for i in range(5):
117 cycler.WillNavigateToPage(page, tab)
118 self.assertEqual(max(0, i - 2), tab.clear_cache_calls,
119 "Iteration %d tab.clear_cache_calls %d" %
120 (i, tab.clear_cache_calls))
121 num_results = len(results.page_results)
122 results.WillMeasurePage(page)
123 cycler.MeasurePage(page, tab, results)
124 results.DidMeasurePage()
125 self.assertEqual(num_results+1, len(results.page_results))
126 result = results[-1]
127 self.assertEqual(result.page, page)
128 self.assertEqual(1, len(result.values))
129 self.assertEqual(result.values[0].trace_name, 'page_load_time')
130 self.assertEqual(result.values[0].units, 'ms')
131 self.assertEqual(result.values[0].chart_name,
132 'warm_times' if i < 3 else 'cold_times')
133 cycler.DidNavigateToPage(page, tab)