| Index: tools/deep_memory_profiler/subcommands/expand.py
|
| diff --git a/tools/deep_memory_profiler/subcommands/expand.py b/tools/deep_memory_profiler/subcommands/expand.py
|
| index 2bb54563775f844314dc8a5c28ef6093138df431..48650c5cb4b42be0e07ad4187bafd7330d4f6c84 100644
|
| --- a/tools/deep_memory_profiler/subcommands/expand.py
|
| +++ b/tools/deep_memory_profiler/subcommands/expand.py
|
| @@ -87,31 +87,39 @@ class ExpandCommand(SubCommand):
|
|
|
| @staticmethod
|
| def _accumulate(dump, policy, bucket_set, component_name, depth, sizes):
|
| - rule = policy.find_rule(component_name)
|
| - if not rule:
|
| - pass
|
| - elif rule.allocator_type == 'malloc':
|
| - for bucket_id, _, committed, allocs, frees in dump.iter_stacktrace:
|
| - bucket = bucket_set.get(bucket_id)
|
| - if not bucket or bucket.allocator_type == 'malloc':
|
| - component_match = policy.find_malloc(bucket)
|
| - elif bucket.allocator_type == 'mmap':
|
| - continue
|
| - else:
|
| - assert False
|
| - if component_match == component_name:
|
| - precedence = ''
|
| - precedence += '(alloc=%d) ' % allocs
|
| - precedence += '(free=%d) ' % frees
|
| - if bucket.typeinfo:
|
| - precedence += '(type=%s) ' % bucket.symbolized_typeinfo
|
| - precedence += '(type.name=%s) ' % bucket.typeinfo_name
|
| - ExpandCommand._add_size(precedence, bucket, depth, committed, sizes)
|
| - elif rule.allocator_type == 'mmap':
|
| - for _, region in dump.iter_map:
|
| - if region[0] != 'hooked':
|
| - continue
|
| - component_match, bucket = policy.find_mmap(region, bucket_set)
|
| - if component_match == component_name:
|
| - ExpandCommand._add_size('', bucket, depth,
|
| - region[1]['committed'], sizes)
|
| + allocator_type = []
|
| + rule = None
|
| + while True:
|
| + rule = policy.find_rule(component_name, rule)
|
| + if not rule:
|
| + break
|
| + if rule.allocator_type not in allocator_type:
|
| + allocator_type.append(rule.allocator_type)
|
| + else:
|
| + continue
|
| +
|
| + if rule.allocator_type == 'malloc':
|
| + for bucket_id, _, committed, allocs, frees in dump.iter_stacktrace:
|
| + bucket = bucket_set.get(bucket_id)
|
| + if not bucket or bucket.allocator_type == 'malloc':
|
| + component_match = policy.find_malloc(bucket)
|
| + elif bucket.allocator_type == 'mmap':
|
| + continue
|
| + else:
|
| + assert False
|
| + if component_match == component_name:
|
| + precedence = ''
|
| + precedence += '(alloc=%d) ' % allocs
|
| + precedence += '(free=%d) ' % frees
|
| + if bucket.typeinfo:
|
| + precedence += '(type=%s) ' % bucket.symbolized_typeinfo
|
| + precedence += '(type.name=%s) ' % bucket.typeinfo_name
|
| + ExpandCommand._add_size(precedence, bucket, depth, committed, sizes)
|
| + elif rule.allocator_type == 'mmap':
|
| + for _, region in dump.iter_map:
|
| + if region[0] != 'hooked':
|
| + continue
|
| + component_match, bucket = policy.find_mmap(region, bucket_set)
|
| + if component_match == component_name:
|
| + ExpandCommand._add_size('', bucket, depth,
|
| + region[1]['committed'], sizes)
|
|
|