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

Unified Diff: tools/telemetry/telemetry/timeline/memory_dump_event_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, 6 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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
diff --git a/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py b/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
new file mode 100644
index 0000000000000000000000000000000000000000..5ad9de10dfa64a736b3b759820e89b7d5b0c9267
--- /dev/null
+++ b/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
@@ -0,0 +1,96 @@
+# Copyright 2015 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import unittest
+
+from telemetry.timeline import memory_dump_event
+
+
+def TestDumpEvent(dump_id='123456ABCDEF', pid=1234, start=0, mmaps=None):
+ def hexify(byte_stats):
+ return {k: hex(v) for k, v in byte_stats.iteritems()}
+
+ event = {'ph': 'v', 'id': dump_id, 'pid': pid, 'ts': start * 1000}
+ if mmaps:
+ vm_regions = [{'mf': mapped_file, 'bs': hexify(byte_stats)}
+ for mapped_file, byte_stats in mmaps.iteritems()]
+ event['args'] = {'dumps': {'process_mmaps': {'vm_regions': vm_regions}}}
+ return event
+
+
+class ProcessMemoryDumpUnitTest(unittest.TestCase):
+ def testProcessMemoryDump_categories(self):
+ ALL = [2 ** x for x in range(8)]
+ (JAVA_SPACES, JAVA_CACHE, ASHMEM, NATIVE_1, NATIVE_2,
+ STACK, FILES_APK, DEVICE_GPU) = ALL
+
+ memory_dump = memory_dump_event.ProcessMemoryDump(TestDumpEvent(mmaps={
+ '/dev/ashmem/dalvik-space-foo': {'pss': JAVA_SPACES},
+ '/dev/ashmem/dalvik-jit-code-cache': {'pss': JAVA_CACHE},
+ '/dev/ashmem/other-random-stuff': {'pss': ASHMEM},
+ '[heap] bar': {'pss': NATIVE_1},
+ '': {'pss': NATIVE_2},
+ '[stack thingy]': {'pss': STACK},
+ 'my_little_app.apk': {'pss': FILES_APK},
+ '/dev/mali': {'pss': DEVICE_GPU},
+ }))
+
+ EXPECTED = {
+ '/': sum(ALL),
+ '/Android/Java runtime': JAVA_SPACES + JAVA_CACHE,
+ '/Android/Ashmem': ASHMEM,
+ '/Android': JAVA_SPACES + JAVA_CACHE + ASHMEM,
+ '/Native heap': NATIVE_1 + NATIVE_2,
+ '/Stack': STACK,
+ '/Files/apk': FILES_APK,
+ '/Devices': DEVICE_GPU}
+
+ self.assertTrue(memory_dump.has_mmaps)
+ for path, value in EXPECTED.iteritems():
+ self.assertEquals(value,
+ memory_dump.GetMemoryBucket(path).GetValue(
+ 'proportional_resident'))
+
+
+class MemoryDumpEventUnitTest(unittest.TestCase):
+ def testMemoryDumpEvent_timing(self):
+ memory_dump = memory_dump_event.MemoryDumpEvent([
+ TestDumpEvent(pid=3, start=8),
+ TestDumpEvent(pid=1, start=4),
+ TestDumpEvent(pid=2, start=13),
+ TestDumpEvent(pid=4, start=7)])
+
+ self.assertFalse(memory_dump.has_mmaps)
+ self.assertEquals(4,
+ len(memory_dump.process_dumps))
+ self.assertAlmostEquals(4.0,
+ memory_dump.start)
+ self.assertAlmostEquals(13.0,
+ memory_dump.end)
+ self.assertAlmostEquals(9.0,
+ memory_dump.duration)
+
+ def testMemoryDumpEvent_GetStatsSummary(self):
+ ALL = [2 ** x for x in range(7)]
+ (JAVA_HEAP_1, JAVA_HEAP_2, ASHMEM_1, ASHMEM_2, NATIVE,
+ DIRTY_1, DIRTY_2) = ALL
+
+ memory_dump = memory_dump_event.MemoryDumpEvent([
+ TestDumpEvent(pid=1, mmaps={
+ '/dev/ashmem/dalvik-thing': {'pss': JAVA_HEAP_1}}),
+ TestDumpEvent(pid=2, mmaps={
+ '/dev/ashmem/other-ashmem': {'pss': ASHMEM_1, 'pd': DIRTY_1}}),
+ TestDumpEvent(pid=3, mmaps={
+ '[heap] native': {'pss': NATIVE, 'pd': DIRTY_2},
+ '/dev/ashmem/dalvik-thing': {'pss': JAVA_HEAP_2}}),
+ TestDumpEvent(pid=4, mmaps={
+ '/dev/ashmem/other-ashmem': {'pss': ASHMEM_2}})])
+
+ self.assertTrue(memory_dump.has_mmaps)
+ self.assertEquals({'overall_pss': sum(ALL[:5]),
+ 'private_dirty': DIRTY_1 + DIRTY_2,
+ 'java_heap': JAVA_HEAP_1 + JAVA_HEAP_2,
+ 'ashmem': ASHMEM_1 + ASHMEM_2,
+ 'native_heap': NATIVE},
+ memory_dump.GetStatsSummary())

Powered by Google App Engine
This is Rietveld 408576698