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

Unified Diff: tools/binary_size/console.py

Issue 2795593005: //tools/binary_size: Various enhancements to console.py (Closed)
Patch Set: Review fixes 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/README.md ('k') | tools/binary_size/describe.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/binary_size/console.py
diff --git a/tools/binary_size/console.py b/tools/binary_size/console.py
index 7bf877682d606ad932ccba243d4a3b8f2b33c3df..8b48c6d6adc882b01d63404e572cd0b86b5b3cf0 100755
--- a/tools/binary_size/console.py
+++ b/tools/binary_size/console.py
@@ -28,6 +28,7 @@ import describe
import file_format
import helpers
import map2size
+import match_util
import models
@@ -58,6 +59,7 @@ class _Session(object):
'Print': self._PrintFunc,
'Write': self._WriteFunc,
'Diff': models.Diff,
+ 'ExpandRegex': match_util.ExpandRegexIdentifierPlaceholder,
}
self._variables.update(extra_vars)
@@ -83,7 +85,6 @@ class _Session(object):
else:
describe.WriteLines(lines, sys.stdout.write)
-
def _WriteFunc(self, obj, path, verbose=False):
"""Same as Print(), but writes to a file.
@@ -96,13 +97,14 @@ class _Session(object):
lines = describe.GenerateLines(obj, verbose=verbose)
describe.WriteLines(lines, file_obj.write)
-
def _CreateBanner(self):
symbol_info_keys = sorted(m for m in dir(models.SizeInfo) if m[0] != '_')
- symbol_group_keys = sorted(m for m in dir(models.SymbolGroup)
- if m[0] != '_')
+ symbol_keys = sorted(m for m in dir(models.Symbol) if m[0] != '_')
+ symbol_group_keys = [m for m in dir(models.SymbolGroup) if m[0] != '_']
symbol_diff_keys = sorted(m for m in dir(models.SymbolDiff)
if m[0] != '_' and m not in symbol_group_keys)
+ symbol_group_keys = sorted(m for m in symbol_group_keys
+ if m not in symbol_keys)
functions = sorted(k for k in self._variables if k[0].isupper())
variables = sorted(k for k in self._variables if k[0].islower())
return '\n'.join([
@@ -113,20 +115,34 @@ class _Session(object):
'import models',
'help(models)',
'',
+ '# Show all attributes of all symbols & per-section totals:',
+ 'Print(size_info, verbose=True)',
+ '',
'# Show two levels of .text, grouped by first two subdirectories',
- 'text_syms = size_info1.symbols.WhereInSection("t")',
+ 'text_syms = symbols.WhereInSection("t")',
'by_path = text_syms.GroupBySourcePath(depth=2)',
'Print(by_path.WhereBiggerThan(1024))',
'',
'# Show all non-vtable generated symbols',
- 'generated_syms = size_info1.symbols.WhereIsGenerated()',
- 'Print(generated_syms.WhereNameMatches("vtable").Inverted())',
+ 'generated_syms = symbols.WhereIsGenerated()',
+ 'Print(generated_syms.WhereNameMatches(r"vtable").Inverted())',
+ '',
+ '# Show all symbols that have "print" in their name or path, except',
+ '# those within components/.',
+ '# Note: Could have also used Inverted(), as above.',
+ '# Note: Use "help(ExpandRegex)" for more about what {{_print_}} does.',
+ 'print_syms = symbols.WhereMatches(r"{{_print_}}")',
+ 'Print(print_syms - print_syms.WherePathMatches(r"^components/"))',
+ '',
+ '# Diff two .size files:',
+ 'Print(Diff(size_info1, size_info2))',
'',
'*' * 80,
'Here is some quick reference:',
'',
'SizeInfo: %s' % ', '.join(symbol_info_keys),
- 'SymbolGroup: %s' % ', '.join(symbol_group_keys),
+ 'Symbol: %s' % ', '.join(symbol_keys),
+ 'SymbolGroup (extends Symbol): %s' % ', '.join(symbol_group_keys),
'SymbolDiff (extends SymbolGroup): %s' % ', '.join(symbol_diff_keys),
'',
'Functions: %s' % ', '.join('%s()' % f for f in functions),
@@ -160,22 +176,29 @@ class _Session(object):
def main(argv):
parser = argparse.ArgumentParser()
parser.add_argument('inputs', nargs='*',
- help='Input .size/.map files to load. They will be '
- 'mapped to variables as: size_info1, size_info2,'
- ' etc.')
+ help='Input .size/.map files to load. For a single file, '
+ 'it will be mapped to variables as: size_info & '
+ 'symbols (where symbols = size_info.symbols). For '
+ 'multiple inputs, the names will be size_info1, '
+ 'symbols1, etc.')
parser.add_argument('--query',
help='Print the result of the given snippet. Example: '
- 'size_info1.symbols.WhereInSection("d").'
+ 'symbols.WhereInSection("d").'
'WhereBiggerThan(100)')
map2size.AddOptions(parser)
args = helpers.AddCommonOptionsAndParseArgs(parser, argv)
- info_variables = {}
+ variables = {}
for i, path in enumerate(args.inputs):
size_info = map2size.AnalyzeWithArgs(args, path)
- info_variables['size_info%d' % (i + 1)] = size_info
+ if len(args.inputs) == 1:
+ variables['size_info'] = size_info
+ variables['symbols'] = size_info.symbols
+ else:
+ variables['size_info%d' % (i + 1)] = size_info
+ variables['symbols%d' % (i + 1)] = size_info.symbols
- session = _Session(info_variables)
+ session = _Session(variables)
if args.query:
logging.info('Running query from command-line.')
« no previous file with comments | « tools/binary_size/README.md ('k') | tools/binary_size/describe.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698