| Index: tools/binary_size/libsupersize/describe.py
|
| diff --git a/tools/binary_size/libsupersize/describe.py b/tools/binary_size/libsupersize/describe.py
|
| index 30a1db86c5357875b1d1953491c82f96a635724c..38d99a53919a6210e2ce1887946b109403772f81 100644
|
| --- a/tools/binary_size/libsupersize/describe.py
|
| +++ b/tools/binary_size/libsupersize/describe.py
|
| @@ -228,26 +228,37 @@ def DescribeSizeInfoCoverage(size_info):
|
| expected_size = size_info.section_sizes[
|
| models.SECTION_TO_SECTION_NAME[section]]
|
|
|
| - def one_stat(group):
|
| - template = ('Section {}: has {:.1%} of {} bytes accounted for from '
|
| - '{} symbols. {} bytes are unaccounted for.')
|
| - actual_size = group.size
|
| - size_percent = float(actual_size) / expected_size
|
| - return template.format(section, size_percent, actual_size, len(group),
|
| - expected_size - actual_size)
|
|
|
| in_section = size_info.symbols.WhereInSection(section)
|
| - yield one_stat(in_section)
|
| + actual_size = in_section.size
|
| + size_percent = float(actual_size) / expected_size
|
| + yield ('Section {}: has {:.1%} of {} bytes accounted for from '
|
| + '{} symbols. {} bytes are unaccounted for.').format(
|
| + section, size_percent, actual_size, len(in_section),
|
| + expected_size - actual_size)
|
| + star_syms = in_section.WhereNameMatches(r'^\*')
|
| + padding = in_section.padding - star_syms.padding
|
| + anonymous_syms = star_syms.Inverted().WhereHasAnyAttribution().Inverted()
|
| yield '* Padding accounts for {} bytes ({:.1%})'.format(
|
| - in_section.padding, float(in_section.padding) / in_section.size)
|
| + padding, float(padding) / in_section.size)
|
| + if len(star_syms):
|
| + yield ('* {} placeholders (symbols that start with **) account for '
|
| + '{} bytes ({:.1%})').format(
|
| + len(star_syms), star_syms.pss, star_syms.pss / in_section.size)
|
| + if anonymous_syms:
|
| + yield '* {} anonymous symbols account for {} bytes ({:.1%})'.format(
|
| + len(anonymous_syms), int(anonymous_syms.pss),
|
| + star_syms.pss / in_section.size)
|
|
|
| aliased_symbols = in_section.Filter(lambda s: s.aliases)
|
| - if len(aliased_symbols):
|
| - uniques = sum(1 for s in aliased_symbols.IterUniqueSymbols())
|
| - yield '* Contains {} aliases, mapped to {} addresses ({} bytes)'.format(
|
| - len(aliased_symbols), uniques, aliased_symbols.size)
|
| - else:
|
| - yield '* Contains 0 aliases'
|
| + if section == 't':
|
| + if len(aliased_symbols):
|
| + uniques = sum(1 for s in aliased_symbols.IterUniqueSymbols())
|
| + yield ('* Contains {} aliases, mapped to {} unique addresses '
|
| + '({} bytes)').format(
|
| + len(aliased_symbols), uniques, aliased_symbols.size)
|
| + else:
|
| + yield '* Contains 0 aliases'
|
|
|
| inlined_symbols = in_section.WhereObjectPathMatches('{shared}')
|
| if len(inlined_symbols):
|
| @@ -256,17 +267,6 @@ def DescribeSizeInfoCoverage(size_info):
|
| else:
|
| yield '* 0 symbols have shared ownership'
|
|
|
| - star_syms = in_section.WhereNameMatches(r'^\*')
|
| - attributed_syms = star_syms.Inverted().WhereHasAnyAttribution()
|
| - anonymous_syms = attributed_syms.Inverted()
|
| - if star_syms or anonymous_syms:
|
| - missing_size = star_syms.pss + anonymous_syms.pss
|
| - anon_str = ''
|
| - if len(anonymous_syms):
|
| - anon_str = 'and {} anonymous entries '.format(len(anonymous_syms))
|
| - yield '* Without {} merge sections {}(accounting for {} bytes):'.format(
|
| - len(star_syms), anon_str, int(missing_size))
|
| - yield ' * ' + one_stat(attributed_syms)
|
|
|
|
|
| def _UtcToLocal(utc):
|
|
|