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

Unified Diff: tools/binary_size/query.py

Issue 2785483002: Reland of V2 of //tools/binary_size rewrite (diffs). (Closed)
Patch Set: add missing name= Created 3 years, 9 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/models.py ('k') | tools/binary_size/symbols.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/binary_size/query.py
diff --git a/tools/binary_size/query.py b/tools/binary_size/query.py
deleted file mode 100755
index f07f7313df969bcf454340fc18283a47c3d35e06..0000000000000000000000000000000000000000
--- a/tools/binary_size/query.py
+++ /dev/null
@@ -1,134 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2017 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""Tool for analyzing binary size of executables using nm or linker map files.
-
-Map files can be created by passing "-Map Foo.map" to the linker. If a map file
-is unavailable, this tool can also be pointed at an unstripped executable, but
-the information does not seem to be as accurate in this case.
-
-Inspired by SymbolSort for Windows:
- https://github.com/adrianstone55/SymbolSort
-"""
-
-import argparse
-import code
-import contextlib
-import logging
-import readline
-import subprocess
-import sys
-
-import analyze
-import helpers
-import symbols
-
-
-# Number of lines before using less for Print().
-_THRESHOLD_FOR_PAGER = 30
-
-
-@contextlib.contextmanager
-def _LessPipe():
- """Output to `less`. Yields the write function."""
- try:
- proc = subprocess.Popen(['less'], stdin=subprocess.PIPE, stdout=sys.stdout)
- yield proc.stdin.write
- proc.stdin.close()
-
- proc.wait()
- except IOError:
- pass # Happens when less is quit before all data is written.
- except KeyboardInterrupt:
- pass # Assume used to break out of less.
-
-
-def _PrintSymbolGroup(group, show_elided=True, use_pager=None):
- """Prints out the given list of symbols.
-
- Args:
- show_elided: Whether to print out group.filtered_symbols.
- """
- by_size = group.Sorted()
- # TODO(agrieve): Taking line-wrapping into account for groups vs. symbols
- # would make sense here.
- if use_pager is None:
- count = sum(1 if s.IsGroup() else 2 for s in group)
- if show_elided and group.filtered_symbols:
- count += 1
- use_pager = count > _THRESHOLD_FOR_PAGER
-
- def write_to_func(write):
- write('Showing {:,} results with total size: {:,} bytes\n'.format(
- len(group), group.size))
- for s in by_size:
- if s.IsGroup():
- write('{} {:<9,} {} ({})\n'.format(s.section, s.size, s.name, len(s)))
- else:
- template = '{}@0x{:<8x} {:<7} {}\n{:22}{}\n'
- write(template.format(s.section, s.address, s.size,
- s.path or '<no path>', '', s.name or '<no name>'))
- if show_elided and group.filtered_symbols:
- elided = group.Inverted()
- write('* Filtered out {:,} symbols comprising {:<7,} bytes.\n'.format(
- len(elided), elided.size))
-
- if use_pager:
- with _LessPipe() as write:
- write_to_func(write)
- else:
- write_to_func(sys.stdout.write)
-
-
-def main():
- parser = argparse.ArgumentParser()
- parser.add_argument('--query',
- help='Print the result of the given snippet. Example: '
- 'all_syms.WhereInSection("d").WhereBiggerThan(100)')
- analyze.AddOptions(parser)
- args = helpers.AddCommonOptionsAndParseArgs(parser)
-
- result = analyze.AnalyzeWithArgs(args)
-
- variables = {
- 'Print': _PrintSymbolGroup,
- 'all_syms': result.symbol_group,
- }
-
- if args.query:
- logging.info('Running query from command-line.')
- eval_result = eval(args.query, locals=variables)
- if isinstance(eval_result, symbols.SymbolGroup):
- _PrintSymbolGroup(eval_result, show_elided=False, use_pager=False)
- return
-
- logging.info('Entering interactive console.')
-
- print '*' * 80
- print 'Entering interactive Python shell. Here is some inspiration:'
- print
- print '# Show two levels of .text, grouped by first two subdirectories'
- print 'text_syms = all_syms.WhereInSection("t")'
- print 'by_path = text_syms.GroupByPath(depth=2)'
- print 'Print(by_path.WhereBiggerThan(1024, include_filtered=True))'
- print
- print '# Show all non-vtable generated symbols'
- print 'Print(all_syms.WhereNameMatches(r"(?<!vtable)(?<!\[)\]$"))'
- print
- print '*' * 80
- print
- print 'locals:', variables.keys()
- print 'method quick reference:', (
- [m for m in dir(symbols.SymbolGroup) if m[0].isupper()])
- print
- print '*' * 80
-
- # Without initializing readline, arrow keys don't even work!
- readline.parse_and_bind('tab: complete')
- code.InteractiveConsole(locals=variables).interact()
-
-
-if __name__ == '__main__':
- main()
« no previous file with comments | « tools/binary_size/models.py ('k') | tools/binary_size/symbols.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698