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

Unified Diff: tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py

Issue 1553183002: [telemetry] Add support for composable process dumps in memory-infra (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes. Created 4 years, 11 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
index 73239230ce3a7e7e40a9406fcd21ac868f0e6023..4ae86390f0abad94677f37d573163c85477495e5 100644
--- a/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
+++ b/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
@@ -8,16 +8,17 @@ from telemetry.timeline import memory_dump_event
import mock
-def TestProcessDumpEvent(dump_id='123456ABCDEF', pid=1234, start=0, mmaps=None,
- allocators=None):
+def MakeRawMemoryDumpEvent(dump_id='123456ABCDEF', pid=1234, start=0,
+ mmaps=None, allocators=None):
+
def vm_region(mapped_file, byte_stats):
return {
- 'mf': mapped_file,
- 'bs': {k: hex(v) for k, v in byte_stats.iteritems()}}
+ 'mf': mapped_file,
+ 'bs': {k: hex(v) for k, v in byte_stats.iteritems()}}
def attrs(sizes):
return {'attrs': {k: {'value': hex(v), 'units': 'bytes'}
- for k, v in sizes.iteritems()}}
+ for k, v in sizes.iteritems()}}
if allocators is None:
allocators = {}
@@ -27,39 +28,68 @@ def TestProcessDumpEvent(dump_id='123456ABCDEF', pid=1234, start=0, mmaps=None,
name: attrs(sizes) for name, sizes in allocators.iteritems()}}}}
if mmaps:
event['args']['dumps']['process_mmaps'] = {
- 'vm_regions': [vm_region(mapped_file, byte_stats)
- for mapped_file, byte_stats in mmaps.iteritems()]}
+ 'vm_regions': [vm_region(mapped_file, byte_stats)
+ for mapped_file, byte_stats in mmaps.iteritems()]}
+
+ return event
+
+def TestProcessDumpEvent(dump_id='123456ABCDEF', pid=1234, start=0, mmaps=None,
+ allocators=None):
+ event = MakeRawMemoryDumpEvent(dump_id, pid, start, mmaps=mmaps,
+ allocators=allocators)
process = mock.Mock()
process.pid = event['pid']
- return memory_dump_event.ProcessMemoryDumpEvent(process, event)
+ return memory_dump_event.ProcessMemoryDumpEvent(process, [event])
class ProcessMemoryDumpEventUnitTest(unittest.TestCase):
+
def testProcessMemoryDump_allocators(self):
- memory_dump = TestProcessDumpEvent(allocators={
- 'v8': {'size': 10, 'allocated_objects_size' : 5},
- 'v8/allocated_objects': {'size': 4},
- 'skia': {'not_size': 10, 'allocated_objects_size' : 5},
- 'skia/cache1': {'size': 24},
- 'skia/cache2': {'not_size': 20},
- 'skia/cache2/obj1': {'size': 8},
- 'skia/cache2/obj2': {'size': 9},
- 'skia_different/obj': {'size': 30},
- 'skia_different/obj/not_counted': {'size': 26},
- 'global/0xdead': {'size': 26}
- })
- EXPECTED = {
- 'skia': {'allocated_objects_size': 5, 'not_size': 30, 'size': 41},
- 'v8': {'allocated_objects_size': 5, 'size': 10},
- 'skia_different': {'size': 30}}
+ process = mock.Mock()
+ process.pid = 1234
+ events = [
+ MakeRawMemoryDumpEvent(
+ pid=process.pid, allocators={
+ 'v8': {'size': 10, 'allocated_objects_size': 5},
+ 'v8/allocated_objects': {'size': 4},
+ 'skia': {'not_size': 10,
+ 'allocated_objects_size': 5},
+ 'skia/cache1': {'size': 24}
+ }
+ ),
+ MakeRawMemoryDumpEvent(
+ pid=process.pid, allocators={
+ 'skia/cache2': {'not_size': 20},
+ 'skia/cache2/obj1': {'size': 8},
+ 'skia/cache2/obj2': {'size': 9},
+ 'skia_different/obj': {'size': 30},
+ 'skia_different/obj/not_counted': {'size': 26},
+ 'global/0xdead': {'size': 26}
+ }
+ )
+ ]
+ memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process, events)
+
+ EXPECTED_ALLOCATORS = {
+ 'skia': {
+ 'allocated_objects_size': 5,
+ 'not_size': 30,
+ 'size': 41
+ },
+ 'v8': {
+ 'allocated_objects_size': 5,
+ 'size': 10
+ },
+ 'skia_different': {'size': 30}
+ }
- self.assertEquals(memory_dump._allocators, EXPECTED)
+ self.assertEquals(memory_dump._allocators, EXPECTED_ALLOCATORS)
def testProcessMemoryDump_mmaps(self):
ALL = [2 ** x for x in range(8)]
- (JAVA_SPACES, JAVA_CACHE, ASHMEM, NATIVE_1, NATIVE_2,
- STACK, FILES_APK, DEVICE_GPU) = ALL
+ (JAVA_SPACES, JAVA_CACHE, ASHMEM, NATIVE_1, NATIVE_2, STACK, FILES_APK,
+ DEVICE_GPU) = ALL
memory_dump = TestProcessDumpEvent(mmaps={
'/dev/ashmem/dalvik-space-foo': {'pss': JAVA_SPACES},
@@ -69,7 +99,7 @@ class ProcessMemoryDumpEventUnitTest(unittest.TestCase):
'': {'pss': NATIVE_2},
'[stack thingy]': {'pss': STACK},
'my_little_app.apk': {'pss': FILES_APK},
- '/dev/mali': {'pss': DEVICE_GPU},
+ '/dev/mali': {'pss': DEVICE_GPU}
})
EXPECTED = {
@@ -84,9 +114,33 @@ class ProcessMemoryDumpEventUnitTest(unittest.TestCase):
self.assertTrue(memory_dump.has_mmaps)
for path, value in EXPECTED.iteritems():
+ self.assertEquals(
+ value,
+ memory_dump.GetMemoryBucket(path).GetValue('proportional_resident'))
+
+ def testProcessMemoryDump_composability(self):
+ java_spaces = 100
+ process = mock.Mock()
+ process.pid = 1234
+ allocators = {'v8': {'size': 10}}
+ mmaps = {'/dev/ashmem/dalvik-space-foo': {'pss': java_spaces}}
+
+ events = [MakeRawMemoryDumpEvent(pid=process.pid, allocators=allocators),
+ MakeRawMemoryDumpEvent(pid=process.pid, mmaps=mmaps)]
+ memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process, events)
+
+ self.assertEquals(memory_dump._allocators, allocators)
+
+ EXPECTED_MMAPS = {
+ '/': java_spaces,
+ '/Android/Java runtime': java_spaces,
+ '/Android': java_spaces,
+ }
+
+ self.assertTrue(memory_dump.has_mmaps)
+ for path, value in EXPECTED_MMAPS.iteritems():
self.assertEquals(value,
- memory_dump.GetMemoryBucket(path).GetValue(
- 'proportional_resident'))
+ memory_dump.GetMemoryBucket(path).GetValue('proportional_resident'))
class MemoryDumpEventUnitTest(unittest.TestCase):
@@ -103,38 +157,38 @@ class MemoryDumpEventUnitTest(unittest.TestCase):
self.assertEquals(
repr(process_dump1),
- 'ProcessMemoryDumpEvent[pid=1234, allocated_objects_v8=5,'
- ' allocator_v8=10, mmaps_ashmem=5, mmaps_java_heap=0,'
- ' mmaps_native_heap=0, mmaps_overall_pss=5, mmaps_private_dirty=0]')
+ 'ProcessMemoryDumpEvent[pid=1234, allocated_objects_v8=5, '
+ 'allocator_v8=10, mmaps_ashmem=5, mmaps_overall_pss=5]')
self.assertEquals(
repr(process_dump2),
- 'ProcessMemoryDumpEvent[pid=1234, allocated_objects_v8=10,'
- ' allocator_oilpan=40, allocator_v8=20, mmaps_ashmem=0,'
- ' mmaps_java_heap=0, mmaps_native_heap=42, mmaps_overall_pss=42,'
- ' mmaps_private_dirty=27]')
+ 'ProcessMemoryDumpEvent[pid=1234, allocated_objects_v8=10, '
+ 'allocator_oilpan=40, allocator_v8=20, mmaps_native_heap=42, '
+ 'mmaps_overall_pss=42, mmaps_private_dirty=27]')
self.assertEquals(
repr(global_dump),
- 'GlobalMemoryDump[id=123456ABCDEF, allocated_objects_v8=15,'
- ' allocator_oilpan=40, allocator_v8=30, mmaps_ashmem=5,'
- ' mmaps_java_heap=0, mmaps_native_heap=42, mmaps_overall_pss=47,'
- ' mmaps_private_dirty=27]')
+ 'GlobalMemoryDump[id=123456ABCDEF, allocated_objects_v8=15, '
+ 'allocator_oilpan=40, allocator_v8=30, mmaps_ashmem=5, '
+ 'mmaps_native_heap=42, mmaps_overall_pss=47, mmaps_private_dirty=27]')
def testDumpEventsTiming(self):
+ process = mock.Mock()
+ process.pid = 1
+ composable_events = [
+ MakeRawMemoryDumpEvent(pid=process.pid, start=8),
+ MakeRawMemoryDumpEvent(pid=process.pid, start=16),
+ MakeRawMemoryDumpEvent(pid=process.pid, start=10)
+ ]
memory_dump = memory_dump_event.GlobalMemoryDump([
+ memory_dump_event.ProcessMemoryDumpEvent(process, composable_events),
perezju 2016/01/13 16:30:34 keep the composed process_dump on a variable, and
ssid 2016/01/14 14:26:21 Done.
TestProcessDumpEvent(pid=3, start=8),
- TestProcessDumpEvent(pid=1, start=4),
TestProcessDumpEvent(pid=2, start=13),
TestProcessDumpEvent(pid=4, start=7)])
self.assertFalse(memory_dump.has_mmaps)
- self.assertEquals(4,
- len(list(memory_dump.IterProcessMemoryDumps())))
- self.assertAlmostEquals(4.0,
- memory_dump.start)
- self.assertAlmostEquals(13.0,
- memory_dump.end)
- self.assertAlmostEquals(9.0,
- memory_dump.duration)
+ self.assertEquals(4, len(list(memory_dump.IterProcessMemoryDumps())))
+ self.assertAlmostEquals(7.0, memory_dump.start)
+ self.assertAlmostEquals(16.0, memory_dump.end)
+ self.assertAlmostEquals(9.0, memory_dump.duration)
def testGetMemoryUsage(self):
ALL = [2 ** x for x in range(7)]
@@ -170,10 +224,7 @@ class MemoryDumpEventUnitTest(unittest.TestCase):
memory_dump = memory_dump_event.GlobalMemoryDump(
[process_dump1, process_dump2])
self.assertEquals({'mmaps_overall_pss': 10,
- 'mmaps_private_dirty': 0,
- 'mmaps_java_heap': 0,
'mmaps_ashmem': 10,
- 'mmaps_native_heap': 0,
'allocator_v8': 30,
'allocated_objects_v8': 15},
memory_dump.GetMemoryUsage())
@@ -206,8 +257,6 @@ class MemoryDumpEventUnitTest(unittest.TestCase):
self.assertEquals({'mmaps_overall_pss': HEAP,
'mmaps_private_dirty': DIRTY,
- 'mmaps_java_heap': 0,
- 'mmaps_ashmem': 0,
'mmaps_native_heap': HEAP,
'allocator_tracing': TRACING_1,
'allocator_malloc': MALLOC},

Powered by Google App Engine
This is Rietveld 408576698