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 |