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

Side by Side Diff: tools/deep_memory_profiler/tests/dmprof_test.py

Issue 19346002: Refactor dmprof: Split dmprof.py into modules. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import cStringIO 6 import cStringIO
7 import logging 7 import logging
8 import os 8 import os
9 import sys 9 import sys
10 import textwrap 10 import textwrap
11 import unittest 11 import unittest
12 12
13 ROOT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 13 BASE_PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
14 sys.path.insert(0, ROOT_DIR) 14 sys.path.append(BASE_PATH)
15 15
16 try: 16 from lib.bucket import Bucket
17 from collections import OrderedDict # pylint: disable=E0611 17 from lib.ordered_dict import OrderedDict
18 except ImportError: 18 from lib.policy import Policy
19 SIMPLEJSON_PATH = os.path.join(ROOT_DIR, os.pardir, os.pardir, 'third_party') 19 from lib.symbol import SymbolMappingCache
20 sys.path.insert(0, SIMPLEJSON_PATH) 20 from lib.symbol import FUNCTION_SYMBOLS, SOURCEFILE_SYMBOLS, TYPEINFO_SYMBOLS
21 from simplejson import OrderedDict
22 21
23 import dmprof 22 import subcommands
24 from find_runtime_symbols import FUNCTION_SYMBOLS
25 from find_runtime_symbols import SOURCEFILE_SYMBOLS
26 from find_runtime_symbols import TYPEINFO_SYMBOLS
27 23
28 24
29 class SymbolMappingCacheTest(unittest.TestCase): 25 class SymbolMappingCacheTest(unittest.TestCase):
30 class MockBucketSet(object): 26 class MockBucketSet(object):
31 def __init__(self, addresses): 27 def __init__(self, addresses):
32 self._addresses = addresses 28 self._addresses = addresses
33 29
34 def iter_addresses(self, symbol_type): # pylint: disable=W0613 30 def iter_addresses(self, symbol_type): # pylint: disable=W0613
35 for address in self._addresses: 31 for address in self._addresses:
36 yield address 32 yield address
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 _TEST_FUNCTION_DICT = { 65 _TEST_FUNCTION_DICT = {
70 0x1: '0x0000000000000001', 66 0x1: '0x0000000000000001',
71 0x2: '0x0000000000000002', 67 0x2: '0x0000000000000002',
72 0x7fc33eebcaa4: '__gnu_cxx::new_allocator::allocate', 68 0x7fc33eebcaa4: '__gnu_cxx::new_allocator::allocate',
73 0x7fc33ef69242: 'void DispatchToMethod', 69 0x7fc33ef69242: 'void DispatchToMethod',
74 0x7fc33ef7bc3e: 'std::map::operator[]', 70 0x7fc33ef7bc3e: 'std::map::operator[]',
75 0x7fc34411f9d5: 'WTF::RefCounted::operator new', 71 0x7fc34411f9d5: 'WTF::RefCounted::operator new',
76 } 72 }
77 73
78 def test_update(self): 74 def test_update(self):
79 symbol_mapping_cache = dmprof.SymbolMappingCache() 75 symbol_mapping_cache = SymbolMappingCache()
80 cache_f = cStringIO.StringIO() 76 cache_f = cStringIO.StringIO()
81 cache_f.write(self._TEST_FUNCTION_CACHE) 77 cache_f.write(self._TEST_FUNCTION_CACHE)
82 78
83 # No update from self._TEST_FUNCTION_CACHE 79 # No update from self._TEST_FUNCTION_CACHE
84 symbol_mapping_cache.update( 80 symbol_mapping_cache.update(
85 FUNCTION_SYMBOLS, 81 FUNCTION_SYMBOLS,
86 self.MockBucketSet(self._TEST_FUNCTION_ADDRESS_LIST1), 82 self.MockBucketSet(self._TEST_FUNCTION_ADDRESS_LIST1),
87 self.MockSymbolFinder(self._TEST_FUNCTION_DICT), cache_f) 83 self.MockSymbolFinder(self._TEST_FUNCTION_DICT), cache_f)
88 for address in self._TEST_FUNCTION_ADDRESS_LIST1: 84 for address in self._TEST_FUNCTION_ADDRESS_LIST1:
89 self.assertEqual(self._TEST_FUNCTION_DICT[address], 85 self.assertEqual(self._TEST_FUNCTION_DICT[address],
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 "name": "malloc-catch-all", 153 "name": "malloc-catch-all",
158 "stacktrace": ".*", 154 "stacktrace": ".*",
159 "allocator": "malloc" 155 "allocator": "malloc"
160 } 156 }
161 ], 157 ],
162 "version": "POLICY_DEEP_3" 158 "version": "POLICY_DEEP_3"
163 } 159 }
164 """) 160 """)
165 161
166 def test_load(self): 162 def test_load(self):
167 policy = dmprof.Policy.parse(cStringIO.StringIO(self._TEST_POLICY), 'json') 163 policy = Policy.parse(cStringIO.StringIO(self._TEST_POLICY), 'json')
168 self.assertTrue(policy) 164 self.assertTrue(policy)
169 self.assertEqual('POLICY_DEEP_3', policy.version) 165 self.assertEqual('POLICY_DEEP_3', policy.version)
170 166
171 def test_find(self): 167 def test_find(self):
172 policy = dmprof.Policy.parse(cStringIO.StringIO(self._TEST_POLICY), 'json') 168 policy = Policy.parse(cStringIO.StringIO(self._TEST_POLICY), 'json')
173 self.assertTrue(policy) 169 self.assertTrue(policy)
174 170
175 symbol_mapping_cache = self.MockSymbolMappingCache() 171 symbol_mapping_cache = self.MockSymbolMappingCache()
176 symbol_mapping_cache.add(FUNCTION_SYMBOLS, 0x1212, 'v8::create') 172 symbol_mapping_cache.add(FUNCTION_SYMBOLS, 0x1212, 'v8::create')
177 symbol_mapping_cache.add(FUNCTION_SYMBOLS, 0x1381, 'WebKit::create') 173 symbol_mapping_cache.add(FUNCTION_SYMBOLS, 0x1381, 'WebKit::create')
178 174
179 bucket1 = dmprof.Bucket([0x1212, 0x013], 'malloc', 0x29492, '_Z') 175 bucket1 = Bucket([0x1212, 0x013], 'malloc', 0x29492, '_Z')
180 bucket1.symbolize(symbol_mapping_cache) 176 bucket1.symbolize(symbol_mapping_cache)
181 bucket2 = dmprof.Bucket([0x18242, 0x1381], 'malloc', 0x9492, '_Z') 177 bucket2 = Bucket([0x18242, 0x1381], 'malloc', 0x9492, '_Z')
182 bucket2.symbolize(symbol_mapping_cache) 178 bucket2.symbolize(symbol_mapping_cache)
183 bucket3 = dmprof.Bucket([0x18242, 0x181], 'malloc', 0x949, '_Z') 179 bucket3 = Bucket([0x18242, 0x181], 'malloc', 0x949, '_Z')
184 bucket3.symbolize(symbol_mapping_cache) 180 bucket3.symbolize(symbol_mapping_cache)
185 181
186 self.assertEqual('malloc-v8', policy.find_malloc(bucket1)) 182 self.assertEqual('malloc-v8', policy.find_malloc(bucket1))
187 self.assertEqual('malloc-WebKit', policy.find_malloc(bucket2)) 183 self.assertEqual('malloc-WebKit', policy.find_malloc(bucket2))
188 self.assertEqual('malloc-catch-all', policy.find_malloc(bucket3)) 184 self.assertEqual('malloc-catch-all', policy.find_malloc(bucket3))
189 185
190 186
191 class BucketsCommandTest(unittest.TestCase): 187 class BucketsCommandTest(unittest.TestCase):
192 def test(self): 188 def test(self):
193 with open(os.path.join(ROOT_DIR, 'tests', 'output', 'buckets')) as output_f: 189 BUCKETS_PATH = os.path.join(BASE_PATH, 'tests', 'output', 'buckets')
190 with open(BUCKETS_PATH) as output_f:
194 expected = output_f.read() 191 expected = output_f.read()
195 192
196 out = cStringIO.StringIO() 193 out = cStringIO.StringIO()
197 194
198 command = dmprof.BucketsCommand() 195 HEAP_PATH = os.path.join(BASE_PATH, 'tests', 'data', 'heap.01234.0001.heap')
199 returncode = command.do([ 196 subcommand = subcommands.BucketsCommand()
200 'buckets', 197 returncode = subcommand.do(['buckets', HEAP_PATH], out)
201 os.path.join(ROOT_DIR, 'tests', 'data', 'heap.01234.0001.heap')], out)
202 self.assertEqual(0, returncode) 198 self.assertEqual(0, returncode)
203 self.assertEqual(expected, out.getvalue()) 199 self.assertEqual(expected, out.getvalue())
204 200
205 201
206 class UploadCommandTest(unittest.TestCase): 202 class UploadCommandTest(unittest.TestCase):
207 def test(self): 203 def test(self):
208 command = dmprof.UploadCommand() 204 MOCK_GSUTIL_PATH = os.path.join(BASE_PATH, 'tests', 'mock_gsutil.py')
209 returncode = command.do([ 205 HEAP_PATH = os.path.join(BASE_PATH, 'tests', 'data', 'heap.01234.0001.heap')
206 subcommand = subcommands.UploadCommand()
207 returncode = subcommand.do([
210 'upload', 208 'upload',
211 '--gsutil', 209 '--gsutil',
212 os.path.join(ROOT_DIR, 'tests', 'mock_gsutil.py'), 210 MOCK_GSUTIL_PATH,
213 os.path.join(ROOT_DIR, 'tests', 'data', 'heap.01234.0001.heap'), 211 HEAP_PATH,
214 'gs://test-storage/']) 212 'gs://test-storage/'])
215 self.assertEqual(0, returncode) 213 self.assertEqual(0, returncode)
216 214
217 215
218 if __name__ == '__main__': 216 if __name__ == '__main__':
219 logging.basicConfig( 217 logging.basicConfig(
220 level=logging.DEBUG if '-v' in sys.argv else logging.ERROR, 218 level=logging.DEBUG if '-v' in sys.argv else logging.ERROR,
221 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s') 219 format='%(levelname)5s %(filename)15s(%(lineno)3d): %(message)s')
222 unittest.main() 220 unittest.main()
OLDNEW
« no previous file with comments | « tools/deep_memory_profiler/subcommands/upload.py ('k') | tools/deep_memory_profiler/tests/range_dict_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698