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

Side by Side Diff: tools/telemetry/telemetry/web_perf/metrics/memory_timeline_unittest.py

Issue 1196253011: [Telemetry] Adding Memory Timeline Metric (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: memory_timeline metric should use IterMemoryDumpEvents Created 5 years, 5 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
OLDNEW
(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))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698