| 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 |