Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 # Copyright 2015 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 | |
| 5 import unittest | |
| 6 | |
| 7 from telemetry.internal.results import page_test_results | |
| 8 from telemetry.page import page | |
| 9 from telemetry.web_perf.metrics import memory_timeline | |
| 10 from telemetry.web_perf import timeline_interaction_record | |
| 11 | |
| 12 | |
| 13 class MockMemoryDump(object): | |
|
eakuefner
2015/06/25 15:56:20
Try using the mock library instead of mocking thes
perezju
2015/06/26 11:34:52
Done. Thanks for the suggestion, does look much cl
| |
| 14 def __init__(self, start, end, value): | |
| 15 self.start = start | |
| 16 self.end = end | |
| 17 # For simplicity, we tuck the same value on all reported metrics. | |
|
eakuefner
2015/06/25 15:56:20
I'm confused about what "tuck" means here.
perezju
2015/06/26 11:34:52
I re-phrased this a bit.
| |
| 18 # The correctness of reported values should be tested in MemoryDumpEvent. | |
| 19 self.has_mmaps = value is not None | |
| 20 if self.has_mmaps: | |
| 21 self._stats = {name: value for name in memory_timeline.REPORTED_METRICS} | |
| 22 else: | |
| 23 self._stats = dict.fromkeys(memory_timeline.REPORTED_METRICS, 0) | |
| 24 | |
| 25 def GetStatsSummary(self): | |
| 26 return self._stats | |
| 27 | |
| 28 | |
| 29 class MockModel(object): | |
| 30 def __init__(self, events): | |
| 31 assert events | |
| 32 self._memory_dump_events = events | |
| 33 | |
| 34 def IterMemoryDumpEvents(self, reverse=False): | |
| 35 if reverse: | |
| 36 return reversed(self._memory_dump_events) | |
| 37 else: | |
| 38 return iter(self._memory_dump_events) | |
| 39 | |
| 40 | |
| 41 def TestInteraction(start, end): | |
| 42 return timeline_interaction_record.TimelineInteractionRecord( | |
| 43 'Action_TestInteraction', start, end) | |
| 44 | |
| 45 | |
| 46 class MemoryTimelineMetricUnitTest(unittest.TestCase): | |
| 47 def getMetricValue(self, events, interactions): | |
| 48 def strip_prefix(key, prefix): | |
| 49 self.assertTrue(key.startswith(prefix)) | |
| 50 return key[len(prefix):] | |
| 51 | |
| 52 results = page_test_results.PageTestResults() | |
| 53 test_page = page.Page('http://google.com') | |
| 54 results.WillRunPage(test_page) | |
| 55 metric = memory_timeline.MemoryTimelineMetric() | |
| 56 metric.AddResults(MockModel(events), None, interactions, results) | |
| 57 result_dict = {strip_prefix(v.name, 'memory_infra_'): v.value | |
| 58 for v in results.current_page_run.values} | |
| 59 results.DidRunPage(test_page) | |
| 60 # REPORTED_METRICS are exactly the ones reported | |
| 61 self.assertItemsEqual(memory_timeline.REPORTED_METRICS, | |
| 62 result_dict.keys()) | |
| 63 values = set(result_dict.values()) | |
| 64 # all values should be the same in our simple test | |
| 65 self.assertEquals(1, len(values)) | |
| 66 return values.pop() | |
| 67 | |
| 68 def testSingleMemoryDump(self): | |
| 69 events = [MockMemoryDump(2, 4, 123)] | |
| 70 interactions = [TestInteraction(1, 10)] | |
| 71 self.assertEquals(123, | |
| 72 self.getMetricValue(events, interactions)) | |
| 73 | |
| 74 def testMultipleMemoryDumps(self): | |
| 75 events = [MockMemoryDump(2, 4, 123), | |
| 76 MockMemoryDump(5, 6, 456)] | |
| 77 interactions = [TestInteraction(1, 10)] | |
| 78 self.assertEquals(456, | |
| 79 self.getMetricValue(events, interactions)) | |
| 80 | |
| 81 def testMultipleInteractions_withDumpInSecond(self): | |
| 82 events = [MockMemoryDump(2, 4, 123), | |
| 83 MockMemoryDump(5, 6, 456), | |
| 84 MockMemoryDump(13, 14, 789)] | |
| 85 interactions = [TestInteraction(1, 10), | |
| 86 TestInteraction(12, 15)] | |
| 87 self.assertEquals(789, | |
| 88 self.getMetricValue(events, interactions)) | |
| 89 | |
| 90 def testMultipleInteractions_withoutDumpInSecond(self): | |
| 91 events = [MockMemoryDump(2, 4, 123), | |
| 92 MockMemoryDump(5, 6, 456), | |
| 93 MockMemoryDump(11, 12, 789)] | |
| 94 interactions = [TestInteraction(1, 10), | |
| 95 TestInteraction(12, 15)] | |
| 96 self.assertEquals(456, | |
| 97 self.getMetricValue(events, interactions)) | |
| 98 | |
| 99 def testMemoryDumpsOutsideInteractionIgnored(self): | |
| 100 events = [MockMemoryDump(0, 1, 555), | |
| 101 MockMemoryDump(2, 4, 123), | |
| 102 MockMemoryDump(5, 6, 456), | |
| 103 MockMemoryDump(8, 11, 789)] | |
| 104 interactions = [TestInteraction(1, 10)] | |
| 105 self.assertEquals(456, | |
| 106 self.getMetricValue(events, interactions)) | |
| 107 | |
| 108 def testNoMemoryDumps(self): | |
| 109 events = [MockMemoryDump(0, 1, 555), | |
| 110 MockMemoryDump(8, 11, 789)] | |
| 111 interactions = [TestInteraction(1, 10)] | |
| 112 self.assertEquals(None, | |
| 113 self.getMetricValue(events, interactions)) | |
| 114 | |
| 115 def testNoMmapsIgnoredMemoryDumps(self): | |
| 116 events = [MockMemoryDump(2, 4, 123), | |
| 117 MockMemoryDump(5, 6, None)] | |
| 118 interactions = [TestInteraction(1, 10)] | |
| 119 self.assertEquals(123, | |
| 120 self.getMetricValue(events, interactions)) | |
| OLD | NEW |