OLD | NEW |
1 # Copyright 2017 The Chromium Authors. All rights reserved. | 1 # Copyright 2017 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 """Classes that comprise the data model for binary size analysis. | 4 """Classes that comprise the data model for binary size analysis. |
5 | 5 |
6 The primary classes are Symbol, and SymbolGroup. | 6 The primary classes are Symbol, and SymbolGroup. |
7 | 7 |
8 Description of common properties: | 8 Description of common properties: |
9 * address: The start address of the symbol. | 9 * address: The start address of the symbol. |
10 May be 0 (e.g. for .bss or for SymbolGroups). | 10 May be 0 (e.g. for .bss or for SymbolGroups). |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 | 36 |
37 METADATA_GIT_REVISION = 'git_revision' | 37 METADATA_GIT_REVISION = 'git_revision' |
38 METADATA_APK_FILENAME = 'apk_file_name' # Path relative to output_directory. | 38 METADATA_APK_FILENAME = 'apk_file_name' # Path relative to output_directory. |
39 METADATA_MAP_FILENAME = 'map_file_name' # Path relative to output_directory. | 39 METADATA_MAP_FILENAME = 'map_file_name' # Path relative to output_directory. |
40 METADATA_ELF_ARCHITECTURE = 'elf_arch' # "Machine" field from readelf -h | 40 METADATA_ELF_ARCHITECTURE = 'elf_arch' # "Machine" field from readelf -h |
41 METADATA_ELF_FILENAME = 'elf_file_name' # Path relative to output_directory. | 41 METADATA_ELF_FILENAME = 'elf_file_name' # Path relative to output_directory. |
42 METADATA_ELF_MTIME = 'elf_mtime' # int timestamp in utc. | 42 METADATA_ELF_MTIME = 'elf_mtime' # int timestamp in utc. |
43 METADATA_ELF_BUILD_ID = 'elf_build_id' | 43 METADATA_ELF_BUILD_ID = 'elf_build_id' |
44 METADATA_GN_ARGS = 'gn_args' | 44 METADATA_GN_ARGS = 'gn_args' |
| 45 METADATA_TOOL_PREFIX = 'tool_prefix' # Path relative to SRC_ROOT. |
45 | 46 |
46 | 47 |
47 SECTION_TO_SECTION_NAME = { | 48 SECTION_TO_SECTION_NAME = { |
48 'b': '.bss', | 49 'b': '.bss', |
49 'd': '.data', | 50 'd': '.data', |
50 'r': '.rodata', | 51 'r': '.rodata', |
51 't': '.text', | 52 't': '.text', |
52 } | 53 } |
53 | 54 |
54 FLAG_ANONYMOUS = 1 | 55 FLAG_ANONYMOUS = 1 |
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 for symbol in self: | 450 for symbol in self: |
450 filtered_and_kept[int(bool(func(symbol)))].append(symbol) | 451 filtered_and_kept[int(bool(func(symbol)))].append(symbol) |
451 except: | 452 except: |
452 logging.warning('Filter failed on symbol %r', symbol) | 453 logging.warning('Filter failed on symbol %r', symbol) |
453 raise | 454 raise |
454 | 455 |
455 return self._CreateTransformed(filtered_and_kept[1], | 456 return self._CreateTransformed(filtered_and_kept[1], |
456 filtered_symbols=filtered_and_kept[0], | 457 filtered_symbols=filtered_and_kept[0], |
457 section_name=self.section_name) | 458 section_name=self.section_name) |
458 | 459 |
459 def WhereBiggerThan(self, min_size): | 460 def WhereSizeBiggerThan(self, min_size): |
460 return self.Filter(lambda s: s.size >= min_size) | 461 return self.Filter(lambda s: s.size >= min_size) |
461 | 462 |
| 463 def WherePssBiggerThan(self, min_pss): |
| 464 return self.Filter(lambda s: s.pss >= min_pss) |
| 465 |
462 def WhereInSection(self, section): | 466 def WhereInSection(self, section): |
463 if len(section) == 1: | 467 if len(section) == 1: |
464 ret = self.Filter(lambda s: s.section == section) | 468 ret = self.Filter(lambda s: s.section == section) |
465 ret.section_name = SECTION_TO_SECTION_NAME[section] | 469 ret.section_name = SECTION_TO_SECTION_NAME[section] |
466 else: | 470 else: |
467 ret = self.Filter(lambda s: s.section_name == section) | 471 ret = self.Filter(lambda s: s.section_name == section) |
468 ret.section_name = section | 472 ret.section_name = section |
469 return ret | 473 return ret |
470 | 474 |
471 def WhereIsTemplate(self): | 475 def WhereIsTemplate(self): |
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
745 | 749 |
746 | 750 |
747 def _ExtractSuffixAfterSeparator(string, separator, count): | 751 def _ExtractSuffixAfterSeparator(string, separator, count): |
748 prev_idx = len(string) + 1 | 752 prev_idx = len(string) + 1 |
749 for _ in xrange(count): | 753 for _ in xrange(count): |
750 idx = string.rfind(separator, 0, prev_idx - 1) | 754 idx = string.rfind(separator, 0, prev_idx - 1) |
751 if idx < 0: | 755 if idx < 0: |
752 break | 756 break |
753 prev_idx = idx | 757 prev_idx = idx |
754 return string[:prev_idx] | 758 return string[:prev_idx] |
OLD | NEW |