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

Unified Diff: tools/binary_size/libsupersize/cluster_symbols.py

Issue 2858793002: Create a star symbol for gaps at the start & end of sections (Closed)
Patch Set: Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/binary_size/libsupersize/archive.py ('k') | tools/binary_size/libsupersize/describe.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/binary_size/libsupersize/cluster_symbols.py
diff --git a/tools/binary_size/libsupersize/cluster_symbols.py b/tools/binary_size/libsupersize/cluster_symbols.py
index ae85c1b844c85490de062e3294406126afea80a8..2c1f407da43b3c9b4e301100373f07c2bb026c2d 100644
--- a/tools/binary_size/libsupersize/cluster_symbols.py
+++ b/tools/binary_size/libsupersize/cluster_symbols.py
@@ -22,13 +22,13 @@ def ClusterSymbols(symbols):
logging.debug('Creating name -> symbol map')
clone_indices = []
indices_by_full_name = {}
- # (name, full_name) -> [(index, sym),...]
- replacements_by_name = collections.defaultdict(list)
+ # (section_name, name, full_name) -> [(index, sym),...]
+ replacements_by_tup = collections.defaultdict(list)
for i, symbol in enumerate(symbols):
if symbol.name.startswith('**'):
# "symbol gap 3" -> "symbol gaps"
- name = re.sub(r'\s+\d+$', 's', symbol.name)
- replacements_by_name[(name, None)].append((i, symbol))
+ name = re.sub(r'\s+\d+( \(.*\))?$', 's', symbol.name)
+ replacements_by_tup[(symbol.section_name, name, None)].append((i, symbol))
elif symbol.full_name:
if symbol.full_name.endswith(']') and ' [clone ' in symbol.full_name:
clone_indices.append(i)
@@ -43,8 +43,8 @@ def ClusterSymbols(symbols):
# Multiple attributes could exist, so search from left-to-right.
stripped_name = symbol.name[:symbol.name.index(' [clone ')]
stripped_full_name = symbol.full_name[:symbol.full_name.index(' [clone ')]
- name_tup = (stripped_name, stripped_full_name)
- replacement_list = replacements_by_name[name_tup]
+ name_tup = (symbol.section_name, stripped_name, stripped_full_name)
+ replacement_list = replacements_by_tup[name_tup]
if not replacement_list:
# First occurance, check for non-clone symbol.
@@ -60,29 +60,29 @@ def ClusterSymbols(symbols):
# Step 3: Undo clustering when length=1.
# Removing these groups means Diff() logic must know about [clone] suffix.
to_clear = []
- for name_tup, replacement_list in replacements_by_name.iteritems():
+ for name_tup, replacement_list in replacements_by_tup.iteritems():
if len(replacement_list) == 1:
to_clear.append(name_tup)
for name_tup in to_clear:
- del replacements_by_name[name_tup]
+ del replacements_by_tup[name_tup]
# Step 4: Replace first symbol from each cluster with a SymbolGroup.
- before_symbol_count = sum(len(x) for x in replacements_by_name.itervalues())
+ before_symbol_count = sum(len(x) for x in replacements_by_tup.itervalues())
logging.debug('Creating %d symbol groups from %d symbols. %d clones had only '
- 'one symbol.', len(replacements_by_name), before_symbol_count,
+ 'one symbol.', len(replacements_by_tup), before_symbol_count,
len(to_clear))
- len_delta = len(replacements_by_name) - before_symbol_count
+ len_delta = len(replacements_by_tup) - before_symbol_count
grouped_symbols = [None] * (len(symbols) + len_delta)
dest_index = 0
src_index = 0
- seen_names = set()
- replacement_names_by_index = {}
- for name_tup, replacement_list in replacements_by_name.iteritems():
+ seen_tups = set()
+ replacement_tup_by_index = {}
+ for name_tup, replacement_list in replacements_by_tup.iteritems():
for tup in replacement_list:
- replacement_names_by_index[tup[0]] = name_tup
+ replacement_tup_by_index[tup[0]] = name_tup
- sorted_items = replacement_names_by_index.items()
+ sorted_items = replacement_tup_by_index.items()
sorted_items.sort(key=lambda tup: tup[0])
for index, name_tup in sorted_items:
count = index - src_index
@@ -90,12 +90,12 @@ def ClusterSymbols(symbols):
symbols[src_index:src_index + count])
src_index = index + 1
dest_index += count
- if name_tup not in seen_names:
- seen_names.add(name_tup)
- group_symbols = [tup[1] for tup in replacements_by_name[name_tup]]
+ if name_tup not in seen_tups:
+ seen_tups.add(name_tup)
+ group_symbols = [tup[1] for tup in replacements_by_tup[name_tup]]
grouped_symbols[dest_index] = symbols._CreateTransformed(
- group_symbols, name=name_tup[0], full_name=name_tup[1],
- section_name=group_symbols[0].section_name)
+ group_symbols, name=name_tup[1], full_name=name_tup[2],
+ section_name=name_tup[0])
dest_index += 1
assert len(grouped_symbols[dest_index:None]) == len(symbols[src_index:None])
« no previous file with comments | « tools/binary_size/libsupersize/archive.py ('k') | tools/binary_size/libsupersize/describe.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698