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

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

Issue 2817813003: supersize: Add "diff" command (Closed)
Patch Set: review commetns 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/main.py ('k') | tools/binary_size/libsupersize/paths.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/binary_size/libsupersize/models.py
diff --git a/tools/binary_size/libsupersize/models.py b/tools/binary_size/libsupersize/models.py
index dac0072bbe660d2b7aa48fd144def9a40191ae93..7e2ceb1c123752c70afe25604f95a280eec36b45 100644
--- a/tools/binary_size/libsupersize/models.py
+++ b/tools/binary_size/libsupersize/models.py
@@ -82,21 +82,21 @@ class SizeInfoDiff(object):
Fields:
section_sizes: A dict of section_name -> size delta.
symbols: A SymbolDiff with all symbols in it.
- old_metadata: metadata of the "old" SizeInfo.
- new_metadata: metadata of the "new" SizeInfo.
+ before_metadata: metadata of the "before" SizeInfo.
+ after_metadata: metadata of the "after" SizeInfo.
"""
__slots__ = (
'section_sizes',
'symbols',
- 'old_metadata',
- 'new_metadata',
+ 'before_metadata',
+ 'after_metadata',
)
- def __init__(self, section_sizes, symbols, old_metadata, new_metadata):
+ def __init__(self, section_sizes, symbols, before_metadata, after_metadata):
self.section_sizes = section_sizes
self.symbols = symbols
- self.old_metadata = old_metadata
- self.new_metadata = new_metadata
+ self.before_metadata = before_metadata
+ self.after_metadata = after_metadata
class BaseSymbol(object):
@@ -253,14 +253,15 @@ class SymbolGroup(BaseSymbol):
def __sub__(self, other):
other_ids = set(id(s) for s in other)
- new_symbols = [s for s in self if id(s) not in other_ids]
- return self._CreateTransformed(new_symbols, section_name=self.section_name)
+ after_symbols = [s for s in self if id(s) not in other_ids]
+ return self._CreateTransformed(after_symbols,
+ section_name=self.section_name)
def __add__(self, other):
self_ids = set(id(s) for s in self)
- new_symbols = self._symbols + [s for s in other if id(s) not in self_ids]
- return self._CreateTransformed(new_symbols, section_name=self.section_name,
- is_sorted=False)
+ after_symbols = self._symbols + [s for s in other if id(s) not in self_ids]
+ return self._CreateTransformed(
+ after_symbols, section_name=self.section_name, is_sorted=False)
@property
def address(self):
@@ -313,9 +314,9 @@ class SymbolGroup(BaseSymbol):
cmp_func = lambda a, b: cmp((a.IsBss(), abs(b.size), a.name),
(b.IsBss(), abs(a.size), b.name))
- new_symbols = sorted(self._symbols, cmp_func, key, reverse)
+ after_symbols = sorted(self._symbols, cmp_func, key, reverse)
return self._CreateTransformed(
- new_symbols, filtered_symbols=self._filtered_symbols,
+ after_symbols, filtered_symbols=self._filtered_symbols,
section_name=self.section_name, is_sorted=True)
def SortedByName(self, reverse=False):
@@ -416,7 +417,7 @@ class SymbolGroup(BaseSymbol):
Use a negative value to omit symbols entirely rather than
include them outside of a group.
"""
- new_syms = []
+ after_syms = []
filtered_symbols = []
symbols_by_token = collections.defaultdict(list)
# Index symbols by |func|.
@@ -430,15 +431,15 @@ class SymbolGroup(BaseSymbol):
min_count = abs(min_count)
for token, symbols in symbols_by_token.iteritems():
if len(symbols) >= min_count:
- new_syms.append(self._CreateTransformed(
+ after_syms.append(self._CreateTransformed(
symbols, name=token, section_name=self.section_name,
is_sorted=False))
elif include_singles:
- new_syms.extend(symbols)
+ after_syms.extend(symbols)
else:
filtered_symbols.extend(symbols)
return self._CreateTransformed(
- new_syms, filtered_symbols=filtered_symbols,
+ after_syms, filtered_symbols=filtered_symbols,
section_name=self.section_name, is_sorted=False)
def GroupBySectionName(self):
@@ -589,7 +590,7 @@ class SymbolDiff(SymbolGroup):
return self.Filter(lambda s: not self.IsSimilar(s) or s.size)
-def Diff(new, old):
+def Diff(before, after):
"""Diffs two SizeInfo or SymbolGroup objects.
When diffing SizeInfos, a SizeInfoDiff is returned.
@@ -599,15 +600,16 @@ def Diff(new, old):
Returns a SizeInfo when args are of type SizeInfo.
Returns a SymbolDiff when args are of type SymbolGroup.
"""
- if isinstance(new, SizeInfo):
- assert isinstance(old, SizeInfo)
- section_sizes = {
- k:new.section_sizes[k] - v for k, v in old.section_sizes.iteritems()}
- symbol_diff = Diff(new.symbols, old.symbols)
- return SizeInfoDiff(section_sizes, symbol_diff, old.metadata, new.metadata)
+ if isinstance(after, SizeInfo):
+ assert isinstance(before, SizeInfo)
+ section_sizes = {k: after.section_sizes[k] - v
+ for k, v in before.section_sizes.iteritems()}
+ symbol_diff = _DiffSymbols(before.symbols, after.symbols)
+ return SizeInfoDiff(section_sizes, symbol_diff, before.metadata,
+ after.metadata)
- assert isinstance(new, SymbolGroup) and isinstance(old, SymbolGroup)
- return _DiffSymbols(new, old)
+ assert isinstance(after, SymbolGroup) and isinstance(before, SymbolGroup)
+ return _DiffSymbols(before, after)
def _NegateAll(symbols):
@@ -625,9 +627,9 @@ def _NegateAll(symbols):
return ret
-def _DiffSymbols(new_group, old_group):
+def _DiffSymbols(before, after):
symbols_by_key = collections.defaultdict(list)
- for s in old_group:
+ for s in before:
symbols_by_key[s._Key()].append(s)
added = []
@@ -635,32 +637,33 @@ def _DiffSymbols(new_group, old_group):
# For similar symbols, padding is zeroed out. In order to not lose the
# information entirely, store it in aggregate.
padding_by_section_name = collections.defaultdict(int)
- for new_sym in new_group:
- matching_syms = symbols_by_key.get(new_sym._Key())
+ for after_sym in after:
+ matching_syms = symbols_by_key.get(after_sym._Key())
if matching_syms:
- old_sym = matching_syms.pop(0)
- if old_sym.IsGroup() and new_sym.IsGroup():
- merged_sym = _DiffSymbols(new_sym, old_sym)
+ before_sym = matching_syms.pop(0)
+ if before_sym.IsGroup() and after_sym.IsGroup():
+ merged_sym = _DiffSymbols(before_sym, after_sym)
else:
- size_diff = new_sym.size_without_padding - old_sym.size_without_padding
- merged_sym = Symbol(new_sym.section_name, size_diff,
- address=new_sym.address, name=new_sym.name,
- source_path=new_sym.source_path,
- object_path=new_sym.object_path,
- full_name=new_sym.full_name,
- is_anonymous=new_sym.is_anonymous)
+ size_diff = (after_sym.size_without_padding -
+ before_sym.size_without_padding)
+ merged_sym = Symbol(after_sym.section_name, size_diff,
+ address=after_sym.address, name=after_sym.name,
+ source_path=after_sym.source_path,
+ object_path=after_sym.object_path,
+ full_name=after_sym.full_name,
+ is_anonymous=after_sym.is_anonymous)
# Diffs are more stable when comparing size without padding, except when
# the symbol is a padding-only symbol.
- if new_sym.size_without_padding == 0 and size_diff == 0:
- merged_sym.padding = new_sym.padding - old_sym.padding
+ if after_sym.size_without_padding == 0 and size_diff == 0:
+ merged_sym.padding = after_sym.padding - before_sym.padding
else:
- padding_by_section_name[new_sym.section_name] += (
- new_sym.padding - old_sym.padding)
+ padding_by_section_name[after_sym.section_name] += (
+ after_sym.padding - before_sym.padding)
similar.append(merged_sym)
else:
- added.append(new_sym)
+ added.append(after_sym)
removed = []
for remaining_syms in symbols_by_key.itervalues():
@@ -671,9 +674,9 @@ def _DiffSymbols(new_group, old_group):
if padding != 0:
similar.append(Symbol(section_name, padding,
name="** aggregate padding of diff'ed symbols"))
- return SymbolDiff(added, removed, similar, name=new_group.name,
- full_name=new_group.full_name,
- section_name=new_group.section_name)
+ return SymbolDiff(added, removed, similar, name=after.name,
+ full_name=after.full_name,
+ section_name=after.section_name)
def _ExtractPrefixBeforeSeparator(string, separator, count=1):
« no previous file with comments | « tools/binary_size/libsupersize/main.py ('k') | tools/binary_size/libsupersize/paths.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698