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

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: adding test 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..b49250068d421969938237a709696ee54612755c 100644
--- a/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
+++ b/tools/telemetry/telemetry/timeline/memory_dump_event_unittest.py
@@ -8,85 +8,156 @@ from telemetry.timeline import memory_dump_event
import mock
-def TestProcessDumpEvent(dump_id='123456ABCDEF', pid=1234, start=0, mmaps=None,
- allocators=None):
+def MakeRawMemoryDumpDict(dump_id, pid, start, mmaps=None, allocators=None):
+
def vm_region(mapped_file, byte_stats):
return {
'mf': mapped_file,
petrcermak 2016/01/07 18:59:28 nit: -2 indent
- 'bs': {k: hex(v) for k, v in byte_stats.iteritems()}}
+ 'bs': {k: hex(v)
petrcermak 2016/01/07 18:59:28 no need for a line break here
+ for k, v in byte_stats.iteritems()}
+ }
def attrs(sizes):
- return {'attrs': {k: {'value': hex(v), 'units': 'bytes'}
- for k, v in sizes.iteritems()}}
+ return {'attrs': {k: {'value': hex(v),
petrcermak 2016/01/07 18:59:28 no need for a line break here
+ 'units': 'bytes'}
+ for k, v in sizes.iteritems()}}
if allocators is None:
allocators = {}
- event = {'ph': 'v', 'id': dump_id, 'pid': pid, 'ts': start * 1000,
+ event = {'ph': 'v',
petrcermak 2016/01/07 18:59:29 nit: I think it's more readable to use the followi
+ 'id': dump_id,
+ 'pid': pid,
+ 'ts': start * 1000,
'args': {'dumps': {'allocators': {
- name: attrs(sizes) for name, sizes in allocators.iteritems()}}}}
+ name: attrs(sizes)
petrcermak 2016/01/07 18:59:29 no need for a blank line
+ for name, sizes in allocators.iteritems()
+ }}}}
if mmaps:
event['args']['dumps']['process_mmaps'] = {
'vm_regions': [vm_region(mapped_file, byte_stats)
petrcermak 2016/01/07 18:59:28 nit: this should be indented 2 spaces only
- for mapped_file, byte_stats in mmaps.iteritems()]}
+ for mapped_file, byte_stats in mmaps.iteritems()]
+ }
+
+ return event
+
+def TestProcessDumpEvent(dump_id='123456ABCDEF',
petrcermak 2016/01/07 18:59:28 nit: I wouldn't vertically stack the arguments (sa
+ pid=1234,
+ start=0,
+ mmaps=None,
+ allocators=None):
+ event = MakeRawMemoryDumpDict(dump_id,
+ pid,
+ start,
+ mmaps=mmaps,
+ allocators=allocators)
process = mock.Mock()
process.pid = event['pid']
- return memory_dump_event.ProcessMemoryDumpEvent(process, event)
+ memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process, dump_id,
+ event['ts'])
+ memory_dump.AddRawEvent(event)
+ memory_dump.ProcessAllocatorDumps()
+ return memory_dump
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}
- })
+ process = mock.Mock()
+ process.pid = 1234
+ dump_id = 'abcd'
+ start = 0
+ memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process, dump_id,
+ start)
+ memory_dump.AddRawEvent(
+ MakeRawMemoryDumpDict(dump_id,
petrcermak 2016/01/07 18:59:29 nit: unnecessary vertical stacking of arguments (w
+ process.pid,
+ start,
+ allocators={
+ 'v8': {'size': 10,
petrcermak 2016/01/07 18:59:29 nit: I think that the following is more readable a
+ 'allocated_objects_size': 5},
+ 'v8/allocated_objects': {'size': 4},
+ 'skia': {'not_size': 10,
+ 'allocated_objects_size': 5},
+ 'skia/cache1': {'size': 24}
+ }))
+ memory_dump.AddRawEvent(MakeRawMemoryDumpDict(
+ dump_id,
+ process.pid,
+ start,
+ allocators={
+ 'skia/cache2': {'not_size': 20},
petrcermak 2016/01/07 18:59:29 ditto
+ '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.ProcessAllocatorDumps()
+
EXPECTED = {
petrcermak 2016/01/07 18:59:28 nit: EXPECTED_what?
- 'skia': {'allocated_objects_size': 5, 'not_size': 30, 'size': 41},
- 'v8': {'allocated_objects_size': 5, 'size': 10},
- 'skia_different': {'size': 30}}
+ 'skia': {'allocated_objects_size': 5,
petrcermak 2016/01/07 18:59:28 ditto
+ 'not_size': 30,
+ 'size': 41},
+ 'v8': {'allocated_objects_size': 5,
+ 'size': 10},
+ 'skia_different': {'size': 30}
+ }
self.assertEquals(memory_dump._allocators, EXPECTED)
def testProcessMemoryDump_mmaps(self):
petrcermak 2016/01/07 18:59:29 It might also be worth checking that everything wo
ssid 2016/01/07 20:46:09 Done.
- 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 = TestProcessDumpEvent(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},
- })
+ ALL = [2**x for x in range(8)]
+ (JAVA_SPACES, JAVA_CACHE, ASHMEM, NATIVE_1, NATIVE_2, STACK, FILES_APK,
+ DEVICE_GPU) = ALL
- 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}
+ process = mock.Mock()
+ process.pid = 1234
+ dump_id = 'abcd'
+ start = 0
+ memory_dump = memory_dump_event.ProcessMemoryDumpEvent(process, dump_id,
+ start)
+ memory_dump.AddRawEvent(MakeRawMemoryDumpDict(dump_id,
petrcermak 2016/01/07 18:59:29 I wouldn't stack all the arguments vertically like
+ process.pid,
+ start,
+ allocators={
+ 'v8': {'size': 10}
+ }))
+ memory_dump.AddRawEvent(MakeRawMemoryDumpDict(
+ dump_id,
petrcermak 2016/01/07 18:59:28 Again, I wouldn't vertically stack the arguments.
+ process.pid,
+ start,
+ mmaps={
+ '/dev/ashmem/dalvik-space-foo': {'pss': JAVA_SPACES},
petrcermak 2016/01/07 18:59:28 You should indent by only 2 spaces in dictionaries
+ '/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},
+ }))
+ memory_dump.ProcessAllocatorDumps()
+
+ EXPECTED_ALLOCATORS = {'v8': {'size': 10}}
+ self.assertEquals(memory_dump._allocators, EXPECTED_ALLOCATORS)
+ EXPECTED_MMAPS = {
+ '/': sum(ALL),
petrcermak 2016/01/07 18:59:28 ditto (-2 indentation)
+ '/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'))
+ for path, value in EXPECTED_MMAPS.iteritems():
+ self.assertEquals(
+ value,
+ memory_dump.GetMemoryBucket(path).GetValue('proportional_resident'))
class MemoryDumpEventUnitTest(unittest.TestCase):
@@ -103,21 +174,18 @@ 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):
memory_dump = memory_dump_event.GlobalMemoryDump([
@@ -170,10 +238,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 +271,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