| 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
|
| deleted file mode 100644
|
| index 29cfae33fa89e18176f68c3e70f21e21ea96ccc9..0000000000000000000000000000000000000000
|
| --- a/tools/memory_inspector/memory_inspector/backends/android/android_backend_unittest.py
|
| +++ /dev/null
|
| @@ -1,177 +0,0 @@
|
| -# Copyright 2014 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.
|
| -
|
| -"""Unittests for the backends.android modules."""
|
| -
|
| -import os
|
| -import unittest
|
| -
|
| -from memory_inspector.backends import prebuilts_fetcher
|
| -from memory_inspector.backends.android import android_backend
|
| -from memory_inspector.unittest.mock_adb import mock_adb
|
| -
|
| -
|
| -_MOCK_ADB_PATH = os.path.dirname(mock_adb.__file__)
|
| -
|
| -_MOCK_DEVICES_OUT = """List of devices attached
|
| -0000000000000001\tdevice
|
| -0000000000000002\tdevice
|
| -"""
|
| -
|
| -_MOCK_MEMDUMP_OUT = ("""[ PID=1]
|
| -8000-33000 r-xp 0 private_unevictable=8192 private=8192 shared_app=[] """
|
| - """shared_other_unevictable=147456 shared_other=147456 "/init" [v///fv0D]
|
| -33000-35000 r--p 2a000 private_unevictable=4096 private=4096 shared_app=[] """
|
| - """shared_other_unevictable=4096 shared_other=4096 "/init" [Aw==]
|
| -35000-37000 rw-p 2c000 private_unevictable=8192 private=8192 shared_app=[] """
|
| - """shared_other_unevictable=0 shared_other=0 "/init" [Aw==]
|
| -37000-6d000 rw-p 0 private_unevictable=221184 private=221184 shared_app=[] """
|
| - """shared_other_unevictable=0 shared_other=0 "[heap]" [////////Pw==]
|
| -400c5000-400c7000 rw-p 0 private_unevictable=0 private=0 shared_app=[] """
|
| - """shared_other_unevictable=0 shared_other=0 "" [AA==]
|
| -400f4000-400f5000 r--p 0 private_unevictable=4096 private=4096 shared_app=[] """
|
| - """shared_other_unevictable=0 shared_other=0 "" [AQ==]
|
| -40127000-40147000 rw-s 0 private_unevictable=4096 private=4096 shared_app=[] """
|
| - """shared_other_unevictable=32768 shared_other=32768 "/X" [/////w==]
|
| -be8b7000-be8d8000 rw-p 8 private_unevictable=8192 private=8192 shared_app=[] """
|
| - """shared_other_unevictable=4096 shared_other=12288 "[stack]" [//8=]
|
| -ffff00ffff0000-ffff00ffff1000 r-xp 0 private_unevictable=0 private=0 """
|
| - """shared_app=[] shared_other_unevictable=0 shared_other=0 "[vectors]" []"""
|
| -)
|
| -
|
| -_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 = """
|
| -{
|
| - "time": { "ticks": 1000100, "rate": 100},
|
| - "mem": {
|
| - "MemTotal:": 998092, "MemFree:": 34904,
|
| - "Buffers:": 24620, "Cached:": 498916 },
|
| - "cpu": [{"usr": 32205, "sys": 49826, "idle": 7096196}],
|
| - "processes": {
|
| - "1": {
|
| - "name": "foo", "n_threads": 42, "start_time": 1000000, "user_time": 82,
|
| - "sys_time": 445, "min_faults": 0, "maj_faults": 0, "vm_rss": 528},
|
| - "2": {
|
| - "name": "bar", "n_threads": 142, "start_time": 1, "user_time": 82,
|
| - "sys_time": 445, "min_faults": 0, "maj_faults": 0, "vm_rss": 528}}
|
| -}
|
| -"""
|
| -
|
| -
|
| -class AndroidBackendTest(unittest.TestCase):
|
| - def setUp(self):
|
| - prebuilts_fetcher.in_test_harness = True
|
| - self._mock_adb = mock_adb.MockAdb()
|
| - planned_adb_responses = {
|
| - 'devices': _MOCK_DEVICES_OUT,
|
| - 'shell getprop ro.product.model': 'Mock device',
|
| - 'shell getprop ro.build.type': 'userdebug',
|
| - 'shell getprop ro.build.id': 'ZZ007',
|
| - '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 /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():
|
| - self._mock_adb.PrepareResponse(cmd, response)
|
| - self._mock_adb.Start()
|
| -
|
| - def runTest(self):
|
| - ab = android_backend.AndroidBackend()
|
| -
|
| - # Test settings load/store logic and setup the mock adb path.
|
| - self.assertTrue('adb_path' in ab.settings.expected_keys)
|
| - ab.settings['adb_path'] = _MOCK_ADB_PATH
|
| - self.assertEqual(ab.settings['adb_path'], _MOCK_ADB_PATH)
|
| -
|
| - # Test device enumeration.
|
| - devices = list(ab.EnumerateDevices())
|
| - self.assertEqual(len(devices), 2)
|
| - self.assertEqual(devices[0].name, 'Mock device ZZ007')
|
| - self.assertEqual(devices[0].id, '0000000000000001')
|
| - self.assertEqual(devices[1].name, 'Mock device ZZ007')
|
| - self.assertEqual(devices[1].id, '0000000000000002')
|
| -
|
| - # Initialize device (checks that sha1 are checked in).
|
| - device = devices[0]
|
| - device.Initialize()
|
| -
|
| - # Test process enumeration.
|
| - processes = list(device.ListProcesses())
|
| - self.assertEqual(len(processes), 2)
|
| - self.assertEqual(processes[0].pid, 1)
|
| - self.assertEqual(processes[0].name, 'foo')
|
| - self.assertEqual(processes[1].pid, 2)
|
| - self.assertEqual(processes[1].name, 'bar')
|
| -
|
| - # Test process stats.
|
| - stats = processes[0].GetStats()
|
| - self.assertEqual(stats.threads, 42)
|
| - self.assertEqual(stats.cpu_usage, 0)
|
| - self.assertEqual(stats.run_time, 1)
|
| - self.assertEqual(stats.vm_rss, 528)
|
| - self.assertEqual(stats.page_faults, 0)
|
| -
|
| - # Test memdump parsing.
|
| - mmaps = processes[0].DumpMemoryMaps()
|
| - self.assertEqual(len(mmaps), 9)
|
| - self.assertIsNone(mmaps.Lookup(0))
|
| - self.assertIsNone(mmaps.Lookup(7999))
|
| - self.assertIsNotNone(mmaps.Lookup(0x8000))
|
| - self.assertIsNotNone(mmaps.Lookup(0x32FFF))
|
| - self.assertIsNotNone(mmaps.Lookup(0x33000))
|
| - self.assertIsNone(mmaps.Lookup(0x6d000))
|
| - self.assertIsNotNone(mmaps.Lookup(0xffff00ffff0000))
|
| - self.assertIsNone(mmaps.Lookup(0xffff0000))
|
| -
|
| - entry = mmaps.Lookup(0xbe8b7000)
|
| - self.assertIsNotNone(entry)
|
| - self.assertEqual(entry.start, 0xbe8b7000)
|
| - self.assertEqual(entry.end, 0xbe8d7fff)
|
| - self.assertEqual(entry.mapped_offset, 0x8)
|
| - self.assertEqual(entry.prot_flags, 'rw-p')
|
| - self.assertEqual(entry.priv_dirty_bytes, 8192)
|
| - self.assertEqual(entry.priv_clean_bytes, 0)
|
| - self.assertEqual(entry.shared_dirty_bytes, 4096)
|
| - self.assertEqual(entry.shared_clean_bytes, 8192)
|
| - for i in xrange(16):
|
| - self.assertTrue(entry.IsPageResident(i))
|
| - for i in xrange(16, 33):
|
| - self.assertFalse(entry.IsPageResident(i))
|
| -
|
| - # Test heap_dump parsing.
|
| - heap = processes[0].DumpNativeHeap()
|
| - 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()
|
|
|