Index: tools/memory_inspector/memory_inspector/backends/android/android_backend_unittest.py |
diff --git a/tools/memory_inspector/memory_inspector/backends/android/android_backend_unittest.py b/tools/memory_inspector/memory_inspector/backends/android/android_backend_unittest.py |
index 5a2806273c09c302c194c3f5f61b8105845d83e1..9a843c4ed531eb552b6627a68352e33cf856532d 100644 |
--- a/tools/memory_inspector/memory_inspector/backends/android/android_backend_unittest.py |
+++ b/tools/memory_inspector/memory_inspector/backends/android/android_backend_unittest.py |
@@ -40,22 +40,20 @@ ffff00ffff0000-ffff00ffff1000 r-xp 0 private_unevictable=0 private=0 """ |
"""shared_app=[] shared_other_unevictable=0 shared_other=0 "[vectors]" []""" |
) |
-_MOCK_DUMPHEAP_OUT = """Android Native Heap Dump v1.0 |
- |
-Total memory: 1608601 |
-Allocation records: 2 |
- |
-z 1 sz 100 num 2 bt 9dcd1000 9dcd2000 b570e100 b570e000 |
-z 0 sz 1000 num 3 bt b570e100 00001234 b570e200 |
-MAPS |
-9dcd0000-9dcd6000 r-xp 00000000 103:00 815 /system/lib/libnbaio.so |
-9dcd6000-9dcd7000 r--p 00005000 103:00 815 /system/lib/libnbaio.so |
-9dcd7000-9dcd8000 rw-p 00006000 103:00 815 /system/lib/libnbaio.so |
-b570e000-b598c000 r-xp 00000000 103:00 680 /system/lib/libart.so |
-b598c000-b598d000 ---p 00000000 00:00 0 |
-b598d000-b5993000 r--p 0027e000 103:00 680 /system/lib/libart.so |
-b5993000-b5994000 rw-p 00284000 103:00 680 /system/lib/libart.so |
-END""" |
+_MOCK_HEAP_DUMP_OUT = """{ |
+ "total_allocated": 8192, |
+ "num_allocs": 2, |
+ "num_stacks": 2, |
+ "allocs": { |
+ "a1000": {"l": 100, "f": 0, "s": "a"}, |
+ "a2000": {"l": 100, "f": 0, "s": "a"}, |
+ "b1000": {"l": 1000, "f": 0, "s": "b"}, |
+ "b2000": {"l": 1000, "f": 0, "s": "b"}, |
+ "b3000": {"l": 1000, "f": 0, "s": "b"}}, |
+ "stacks": { |
+ "a": {"l": 200, "f": [10, 20, 30, 40]}, |
+ "b": {"l": 3000, "f": [50, 60, 70]}} |
+ }""" |
_MOCK_PS_EXT_OUT = """ |
{ |
@@ -83,10 +81,11 @@ class AndroidBackendTest(unittest.TestCase): |
'devices': _MOCK_DEVICES_OUT, |
'shell getprop ro.product.model': 'Mock device', |
'shell getprop ro.build.type': 'userdebug', |
+ 'shell getprop ro.product.cpu.abi': 'armeabi', |
'root': 'adbd is already running as root', |
'shell /data/local/tmp/ps_ext': _MOCK_PS_EXT_OUT, |
'shell /data/local/tmp/memdump': _MOCK_MEMDUMP_OUT, |
- 'shell cat "/data/local/tmp/heap': _MOCK_DUMPHEAP_OUT, |
+ 'shell /data/local/tmp/heap_dump': _MOCK_HEAP_DUMP_OUT, |
'shell test -e "/data/local/tmp/heap': '0', |
} |
for (cmd, response) in planned_adb_responses.iteritems(): |
@@ -156,35 +155,22 @@ class AndroidBackendTest(unittest.TestCase): |
for i in xrange(16, 33): |
self.assertFalse(entry.IsPageResident(i)) |
- # Test dumpheap parsing. |
+ # Test heap_dump parsing. |
heap = processes[0].DumpNativeHeap() |
- self.assertEqual(len(heap.allocations), 2) |
- |
- alloc_1 = heap.allocations[0] |
- self.assertEqual(alloc_1.size, 100) |
- self.assertEqual(alloc_1.count, 2) |
- self.assertEqual(alloc_1.total_size, 200) |
- self.assertEqual(alloc_1.stack_trace.depth, 4) |
- self.assertEqual(alloc_1.stack_trace[0].exec_file_rel_path, |
- '/system/lib/libnbaio.so') |
- self.assertEqual(alloc_1.stack_trace[0].address, 0x9dcd1000) |
- self.assertEqual(alloc_1.stack_trace[0].offset, 0x1000) |
- self.assertEqual(alloc_1.stack_trace[1].offset, 0x2000) |
- self.assertEqual(alloc_1.stack_trace[2].exec_file_rel_path, |
- '/system/lib/libart.so') |
- self.assertEqual(alloc_1.stack_trace[2].offset, 0x100) |
- self.assertEqual(alloc_1.stack_trace[3].offset, 0) |
- |
- alloc_2 = heap.allocations[1] |
- self.assertEqual(alloc_2.size, 1000) |
- self.assertEqual(alloc_2.count, 3) |
- self.assertEqual(alloc_2.total_size, 3000) |
- self.assertEqual(alloc_2.stack_trace.depth, 3) |
- # 0x00001234 is not present in the maps. It should be parsed anyways but |
- # no executable info is expected. |
- self.assertEqual(alloc_2.stack_trace[1].address, 0x00001234) |
- self.assertIsNone(alloc_2.stack_trace[1].exec_file_rel_path) |
- self.assertIsNone(alloc_2.stack_trace[1].offset) |
+ self.assertEqual(len(heap.allocations), 5) |
+ |
+ for alloc in heap.allocations: |
+ self.assertTrue(alloc.size == 100 or alloc.size == 1000) |
+ if alloc.size == 100: |
+ self.assertEqual(alloc.size, 100) |
+ self.assertEqual(alloc.stack_trace.depth, 4) |
+ self.assertEqual([x.address for x in alloc.stack_trace.frames], |
+ [10, 20, 30, 40]) |
+ elif alloc.size == 1000: |
+ self.assertEqual(alloc.size, 1000) |
+ self.assertEqual(alloc.stack_trace.depth, 3) |
+ self.assertEqual([x.address for x in alloc.stack_trace.frames], |
+ [50, 60, 70]) |
def tearDown(self): |
self._mock_adb.Stop() |