Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: tools/perf/measurements/oilpan_gc_times_unittest.py

Issue 968773002: [Oilpan] Measure time for forced/idle GC (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Work for a nit Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/perf/measurements/oilpan_gc_times.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 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 from measurements import oilpan_gc_times
6
7 from telemetry.results import page_test_results
8 from telemetry.timeline import model
9 from telemetry.timeline import slice as slice_data
10 from telemetry.timeline.event import TimelineEvent
5 from telemetry.unittest_util import options_for_unittests 11 from telemetry.unittest_util import options_for_unittests
6 from telemetry.unittest_util import page_test_test_case 12 from telemetry.unittest_util import page_test_test_case
13 from telemetry.page import page as page_module
7 14
8 from measurements import oilpan_gc_times 15
16 class TestOilpanGCTimesPage(page_module.Page):
17 def __init__(self, page_set):
18 super(TestOilpanGCTimesPage, self).__init__(
19 'file://blank.html', page_set, page_set.base_dir)
20
21 def RunPageInteractions(self, action_runner):
22 interaction = action_runner.BeginGestureInteraction('ScrollAction')
23 action_runner.ScrollPage()
24 interaction.End()
25
26
27 class OilpanGCTimesTestData(object):
28 def __init__(self, thread_name):
29 self._model = model.TimelineModel()
30 self._renderer_process = self._model.GetOrCreateProcess(1)
31 self._renderer_thread = self._renderer_process.GetOrCreateThread(2)
32 self._renderer_thread.name = thread_name
33 self._results = page_test_results.PageTestResults()
34
35 @property
36 def results(self):
37 return self._results
38
39 def AddSlice(self, name, timestamp, duration, args):
40 new_slice = slice_data.Slice(
41 None,
42 'category',
43 name,
44 timestamp,
45 duration,
46 timestamp,
47 duration,
48 args)
49 self._renderer_thread.all_slices.append(new_slice)
50 return new_slice
51
52 def ClearResults(self):
53 self._results = page_test_results.PageTestResults()
9 54
10 55
11 class OilpanGCTimesTest(page_test_test_case.PageTestTestCase): 56 class OilpanGCTimesTest(page_test_test_case.PageTestTestCase):
12 """Smoke test for Oilpan GC pause time measurements. 57 """Smoke test for Oilpan GC pause time measurements.
13 58
14 Runs OilpanGCTimes measurement on some simple pages and verifies 59 Runs OilpanGCTimes measurement on some simple pages and verifies
15 that all metrics were added to the results. The test is purely functional, 60 that all metrics were added to the results. The test is purely functional,
16 i.e. it only checks if the metrics are present and non-zero. 61 i.e. it only checks if the metrics are present and non-zero.
17 """ 62 """
63 _KEY_MARK = 'Heap::collectGarbage'
64 _KEY_LAZY_SWEEP = 'ThreadHeap::lazySweepPages'
65 _KEY_COMPLETE_SWEEP = 'ThreadState::completeSweep'
66 _KEY_COALESCE = 'ThreadHeap::coalesce'
67
18 def setUp(self): 68 def setUp(self):
19 self._options = options_for_unittests.GetCopy() 69 self._options = options_for_unittests.GetCopy()
20 70
71 def testForParsingOldFormat(self):
72 def getMetric(results, name):
73 metrics = results.FindAllPageSpecificValuesNamed(name)
74 self.assertEquals(1, len(metrics))
75 return metrics[0].GetBuildbotValue()
76
77 data = self._GenerateDataForParsingOldFormat()
78
79 measurement = oilpan_gc_times._OilpanGCTimesBase()
80 measurement._renderer_process = data._renderer_process
81 measurement._timeline_model = data._model
82 measurement.ValidateAndMeasurePage(None, None, data.results)
83
84 results = data.results
85 self.assertEquals(7, len(getMetric(results, 'oilpan_coalesce')))
86 self.assertEquals(3, len(getMetric(results, 'oilpan_precise_mark')))
87 self.assertEquals(3, len(getMetric(results, 'oilpan_precise_lazy_sweep')))
88 self.assertEquals(3, len(getMetric(results,
89 'oilpan_precise_complete_sweep')))
90 self.assertEquals(1, len(getMetric(results, 'oilpan_conservative_mark')))
91 self.assertEquals(1, len(getMetric(results,
92 'oilpan_conservative_lazy_sweep')))
93 self.assertEquals(1, len(getMetric(results,
94 'oilpan_conservative_complete_sweep')))
95 self.assertEquals(2, len(getMetric(results, 'oilpan_forced_mark')))
96 self.assertEquals(2, len(getMetric(results, 'oilpan_forced_lazy_sweep')))
97 self.assertEquals(2, len(getMetric(results,
98 'oilpan_forced_complete_sweep')))
99
100 def testForParsing(self):
101 def getMetric(results, name):
102 metrics = results.FindAllPageSpecificValuesNamed(name)
103 self.assertEquals(1, len(metrics))
104 return metrics[0].GetBuildbotValue()
105
106 data = self._GenerateDataForParsing()
107
108 measurement = oilpan_gc_times._OilpanGCTimesBase()
109 measurement._renderer_process = data._renderer_process
110 measurement._timeline_model = data._model
111 measurement.ValidateAndMeasurePage(None, None, data.results)
112
113 results = data.results
114 self.assertEquals(7, len(getMetric(results, 'oilpan_coalesce')))
115 self.assertEquals(2, len(getMetric(results, 'oilpan_precise_mark')))
116 self.assertEquals(2, len(getMetric(results, 'oilpan_precise_lazy_sweep')))
117 self.assertEquals(2, len(getMetric(results,
118 'oilpan_precise_complete_sweep')))
119 self.assertEquals(2, len(getMetric(results, 'oilpan_conservative_mark')))
120 self.assertEquals(2, len(getMetric(results,
121 'oilpan_conservative_lazy_sweep')))
122 self.assertEquals(2, len(getMetric(results,
123 'oilpan_conservative_complete_sweep')))
124 self.assertEquals(1, len(getMetric(results, 'oilpan_forced_mark')))
125 self.assertEquals(1, len(getMetric(results, 'oilpan_forced_lazy_sweep')))
126 self.assertEquals(1, len(getMetric(results,
127 'oilpan_forced_complete_sweep')))
128 self.assertEquals(1, len(getMetric(results, 'oilpan_idle_mark')))
129 self.assertEquals(1, len(getMetric(results, 'oilpan_idle_lazy_sweep')))
130 self.assertEquals(1, len(getMetric(results,
131 'oilpan_idle_complete_sweep')))
132
21 def testForSmoothness(self): 133 def testForSmoothness(self):
22 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html') 134 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html')
23 measurement = oilpan_gc_times.OilpanGCTimesForSmoothness() 135 measurement = oilpan_gc_times.OilpanGCTimesForSmoothness()
24 results = self.RunMeasurement(measurement, ps, options=self._options) 136 results = self.RunMeasurement(measurement, ps, options=self._options)
25 self.assertEquals(0, len(results.failures)) 137 self.assertEquals(0, len(results.failures))
26 138
27 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark') 139 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark')
28 conservative = results.FindAllPageSpecificValuesNamed( 140 conservative = results.FindAllPageSpecificValuesNamed(
29 'oilpan_conservative_mark') 141 'oilpan_conservative_mark')
30 self.assertLess(0, len(precise) + len(conservative)) 142 self.assertLess(0, len(precise) + len(conservative))
31 143
32 def testForBlinkPerf(self): 144 def testForBlinkPerf(self):
33 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html') 145 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html')
34 measurement = oilpan_gc_times.OilpanGCTimesForBlinkPerf() 146 measurement = oilpan_gc_times.OilpanGCTimesForBlinkPerf()
35 results = self.RunMeasurement(measurement, ps, options=self._options) 147 results = self.RunMeasurement(measurement, ps, options=self._options)
36 self.assertEquals(0, len(results.failures)) 148 self.assertEquals(0, len(results.failures))
37 149
38 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark') 150 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark')
39 conservative = results.FindAllPageSpecificValuesNamed( 151 conservative = results.FindAllPageSpecificValuesNamed(
40 'oilpan_conservative_mark') 152 'oilpan_conservative_mark')
41 self.assertLess(0, len(precise) + len(conservative)) 153 self.assertLess(0, len(precise) + len(conservative))
154
155 def _GenerateDataForEmptyPageSet(self):
156 page_set = self.CreateEmptyPageSet()
157 page = TestOilpanGCTimesPage(page_set)
158 page_set.AddUserStory(page)
159
160 data = OilpanGCTimesTestData('CrRendererMain')
161 # Pretend we are about to run the tests to silence lower level asserts.
162 data.results.WillRunPage(page)
163
164 return data
165
166 def _GenerateDataForParsingOldFormat(self):
167 data = self._GenerateDataForEmptyPageSet()
168 data.AddSlice(self._KEY_MARK, 1, 1, {'precise': True, 'forced': False})
169 data.AddSlice(self._KEY_LAZY_SWEEP, 2, 2, {})
170 data.AddSlice(self._KEY_COALESCE, 4, 3, {})
171 data.AddSlice(self._KEY_LAZY_SWEEP, 7, 4, {})
172 data.AddSlice(self._KEY_COALESCE, 11, 5, {})
173 data.AddSlice(self._KEY_COMPLETE_SWEEP, 16, 6, {})
174 data.AddSlice(self._KEY_MARK, 22, 7, {'precise': True, 'forced': False})
175 data.AddSlice(self._KEY_LAZY_SWEEP, 29, 8, {})
176 data.AddSlice(self._KEY_COALESCE, 37, 9, {})
177 data.AddSlice(self._KEY_COMPLETE_SWEEP, 46, 10, {})
178 data.AddSlice(self._KEY_MARK, 56, 11, {'precise': False, 'forced': False})
179 data.AddSlice(self._KEY_LAZY_SWEEP, 67, 12, {})
180 data.AddSlice(self._KEY_COALESCE, 79, 13, {})
181 data.AddSlice(self._KEY_COMPLETE_SWEEP, 92, 14, {})
182 data.AddSlice(self._KEY_MARK, 106, 15, {'precise': True, 'forced': False})
183 data.AddSlice(self._KEY_LAZY_SWEEP, 121, 16, {})
184 data.AddSlice(self._KEY_COALESCE, 137, 17, {})
185 data.AddSlice(self._KEY_COMPLETE_SWEEP, 154, 18, {})
186 data.AddSlice(self._KEY_MARK, 172, 19, {'precise': False, 'forced': True})
187 data.AddSlice(self._KEY_COALESCE, 191, 20, {})
188 data.AddSlice(self._KEY_LAZY_SWEEP, 211, 21, {})
189 data.AddSlice(self._KEY_COMPLETE_SWEEP, 232, 22, {})
190 data.AddSlice(self._KEY_MARK, 254, 23, {'precise': True, 'forced': True})
191 data.AddSlice(self._KEY_COALESCE, 277, 24, {})
192 data.AddSlice(self._KEY_LAZY_SWEEP, 301, 25, {})
193 data.AddSlice(self._KEY_COMPLETE_SWEEP, 326, 26, {})
194 return data
195
196 def _GenerateDataForParsing(self):
197 data = self._GenerateDataForEmptyPageSet()
198 data.AddSlice(self._KEY_MARK, 1, 1,
199 {'lazySweeping': True, 'gcReason': 'ConservativeGC'})
200 data.AddSlice(self._KEY_LAZY_SWEEP, 2, 2, {})
201 data.AddSlice(self._KEY_COALESCE, 4, 3, {})
202 data.AddSlice(self._KEY_LAZY_SWEEP, 7, 4, {})
203 data.AddSlice(self._KEY_COALESCE, 11, 5, {})
204 data.AddSlice(self._KEY_COMPLETE_SWEEP, 16, 6, {})
205 data.AddSlice(self._KEY_MARK, 22, 7,
206 {'lazySweeping': True, 'gcReason': 'PreciseGC'})
207 data.AddSlice(self._KEY_LAZY_SWEEP, 29, 8, {})
208 data.AddSlice(self._KEY_COALESCE, 37, 9, {})
209 data.AddSlice(self._KEY_COMPLETE_SWEEP, 46, 10, {})
210 data.AddSlice(self._KEY_MARK, 56, 11,
211 {'lazySweeping': False, 'gcReason': 'ConservativeGC'})
212 data.AddSlice(self._KEY_LAZY_SWEEP, 67, 12, {})
213 data.AddSlice(self._KEY_COALESCE, 79, 13, {})
214 data.AddSlice(self._KEY_COMPLETE_SWEEP, 92, 14, {})
215 data.AddSlice(self._KEY_MARK, 106, 15,
216 {'lazySweeping': False, 'gcReason': 'PreciseGC'})
217 data.AddSlice(self._KEY_LAZY_SWEEP, 121, 16, {})
218 data.AddSlice(self._KEY_COALESCE, 137, 17, {})
219 data.AddSlice(self._KEY_COMPLETE_SWEEP, 154, 18, {})
220 data.AddSlice(self._KEY_MARK, 172, 19,
221 {'lazySweeping': False, 'gcReason': 'ForcedGCForTesting'})
222 data.AddSlice(self._KEY_COALESCE, 191, 20, {})
223 data.AddSlice(self._KEY_LAZY_SWEEP, 211, 21, {})
224 data.AddSlice(self._KEY_COMPLETE_SWEEP, 232, 22, {})
225 data.AddSlice(self._KEY_MARK, 254, 23,
226 {'lazySweeping': False, 'gcReason': 'IdleGC'})
227 data.AddSlice(self._KEY_COALESCE, 277, 24, {})
228 data.AddSlice(self._KEY_LAZY_SWEEP, 301, 25, {})
229 data.AddSlice(self._KEY_COMPLETE_SWEEP, 326, 26, {})
230 return data
OLDNEW
« no previous file with comments | « tools/perf/measurements/oilpan_gc_times.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698