OLD | NEW |
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 | 5 from measurements import oilpan_gc_times |
| 6 from telemetry.timeline.event import TimelineEvent |
6 from telemetry.unittest_util import options_for_unittests | 7 from telemetry.unittest_util import options_for_unittests |
7 from telemetry.unittest_util import page_test_test_case | 8 from telemetry.unittest_util import page_test_test_case |
8 | 9 |
9 class OilpanGCTimesTest(page_test_test_case.PageTestTestCase): | 10 class OilpanGCTimesTest(page_test_test_case.PageTestTestCase): |
10 """Smoke test for Oilpan GC pause time measurements. | 11 """Smoke test for Oilpan GC pause time measurements. |
11 | 12 |
12 Runs OilpanGCTimes measurement on some simple pages and verifies | 13 Runs OilpanGCTimes measurement on some simple pages and verifies |
13 that all metrics were added to the results. The test is purely functional, | 14 that all metrics were added to the results. The test is purely functional, |
14 i.e. it only checks if the metrics are present and non-zero. | 15 i.e. it only checks if the metrics are present and non-zero. |
15 """ | 16 """ |
16 def setUp(self): | 17 def setUp(self): |
17 self._options = options_for_unittests.GetCopy() | 18 self._options = options_for_unittests.GetCopy() |
18 | 19 |
| 20 def testForParsing(self): |
| 21 def getMetric(results, name): |
| 22 metrics = results.FindAllPageSpecificValuesNamed(name) |
| 23 self.assertEquals(1, len(metrics)) |
| 24 return metrics[0].GetBuildbotValue() |
| 25 |
| 26 parser = oilpan_gc_times._OilpanGCTimesBase() |
| 27 events = [TimelineEvent('', 'Heap::collectGarbage', 0, 0, 11, 18, |
| 28 {'precise': True, 'forced': False}), |
| 29 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 0, 11, 18), |
| 30 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 31 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 0, 11, 18), |
| 32 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 33 TimelineEvent('', 'ThreadState::completeSweep', 0, 0, 11, 18), |
| 34 TimelineEvent('', 'Heap::collectGarbage', 0, 0, 11, 18, |
| 35 {'precise': True, 'forced': False}), |
| 36 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 0, 11, 18), |
| 37 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 38 TimelineEvent('', 'ThreadState::completeSweep', 0, 0, 11, 18), |
| 39 TimelineEvent('', 'Heap::collectGarbage', 0, 0, 11, 18, |
| 40 {'precise': False, 'forced': False}), |
| 41 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 180, 11, 18), |
| 42 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 43 TimelineEvent('', 'ThreadState::completeSweep', 0, 0, 11, 18), |
| 44 TimelineEvent('', 'Heap::collectGarbage', 0, 0, 11, 18, |
| 45 {'precise': True, 'forced': False}), |
| 46 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 0, 11, 18), |
| 47 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 48 TimelineEvent('', 'ThreadState::completeSweep', 0, 0, 11, 18), |
| 49 TimelineEvent('', 'Heap::collectGarbage', 0, 0, 11, 18, |
| 50 {'precise': False, 'forced': True}), |
| 51 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 52 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 0, 11, 18), |
| 53 TimelineEvent('', 'ThreadState::completeSweep', 0, 0, 11, 18), |
| 54 TimelineEvent('', 'Heap::collectGarbage', 0, 0, 11, 18, |
| 55 {'precise': True, 'forced': True}), |
| 56 TimelineEvent('', 'ThreadHeap::coalesce', 0, 0, 11, 18), |
| 57 TimelineEvent('', 'ThreadHeap::lazySweepPages', 0, 0, 11, 18), |
| 58 TimelineEvent('', 'ThreadState::completeSweep', 0, 0, 11, 18)] |
| 59 |
| 60 results = parser._ParseEventsForTest(events, False, options=self._options) |
| 61 self.assertEquals(7, len(getMetric(results, 'oilpan_coalesce'))) |
| 62 self.assertEquals(3, len(getMetric(results, 'oilpan_precise_mark'))) |
| 63 self.assertEquals(3, len(getMetric(results, 'oilpan_precise_lazy_sweep'))) |
| 64 self.assertEquals(3, len(getMetric(results, |
| 65 'oilpan_precise_complete_sweep'))) |
| 66 self.assertEquals(1, len(getMetric(results, 'oilpan_conservative_mark'))) |
| 67 self.assertEquals(1, len(getMetric(results, |
| 68 'oilpan_conservative_lazy_sweep'))) |
| 69 self.assertEquals(1, len(getMetric(results, |
| 70 'oilpan_conservative_complete_sweep'))) |
| 71 |
| 72 # Include forced GC events |
| 73 results = parser._ParseEventsForTest(events, True, options=self._options) |
| 74 self.assertEquals(7, len(getMetric(results, 'oilpan_coalesce'))) |
| 75 self.assertEquals(4, len(getMetric(results, 'oilpan_precise_mark'))) |
| 76 self.assertEquals(4, len(getMetric(results, 'oilpan_precise_lazy_sweep'))) |
| 77 self.assertEquals(4, len(getMetric(results, |
| 78 'oilpan_precise_complete_sweep'))) |
| 79 self.assertEquals(2, len(getMetric(results, 'oilpan_conservative_mark'))) |
| 80 self.assertEquals(2, len(getMetric(results, |
| 81 'oilpan_conservative_lazy_sweep'))) |
| 82 self.assertEquals(2, len(getMetric(results, |
| 83 'oilpan_conservative_complete_sweep'))) |
| 84 |
19 def testForSmoothness(self): | 85 def testForSmoothness(self): |
20 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html') | 86 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html') |
21 measurement = oilpan_gc_times.OilpanGCTimesForSmoothness() | 87 measurement = oilpan_gc_times.OilpanGCTimesForSmoothness() |
22 results = self.RunMeasurement(measurement, ps, options=self._options) | 88 results = self.RunMeasurement(measurement, ps, options=self._options) |
23 self.assertEquals(0, len(results.failures)) | 89 self.assertEquals(0, len(results.failures)) |
24 | 90 |
25 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark') | 91 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark') |
26 conservative = results.FindAllPageSpecificValuesNamed( | 92 conservative = results.FindAllPageSpecificValuesNamed( |
27 'oilpan_conservative_mark') | 93 'oilpan_conservative_mark') |
28 self.assertLess(0, len(precise) + len(conservative)) | 94 self.assertLess(0, len(precise) + len(conservative)) |
29 | 95 |
30 def testForBlinkPerf(self): | 96 def testForBlinkPerf(self): |
31 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html') | 97 ps = self.CreatePageSetFromFileInUnittestDataDir('create_many_objects.html') |
32 measurement = oilpan_gc_times.OilpanGCTimesForBlinkPerf() | 98 measurement = oilpan_gc_times.OilpanGCTimesForBlinkPerf() |
33 results = self.RunMeasurement(measurement, ps, options=self._options) | 99 results = self.RunMeasurement(measurement, ps, options=self._options) |
34 self.assertEquals(0, len(results.failures)) | 100 self.assertEquals(0, len(results.failures)) |
35 | 101 |
36 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark') | 102 precise = results.FindAllPageSpecificValuesNamed('oilpan_precise_mark') |
37 conservative = results.FindAllPageSpecificValuesNamed( | 103 conservative = results.FindAllPageSpecificValuesNamed( |
38 'oilpan_conservative_mark') | 104 'oilpan_conservative_mark') |
39 self.assertLess(0, len(precise) + len(conservative)) | 105 self.assertLess(0, len(precise) + len(conservative)) |
OLD | NEW |