| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Generate a spatial analysis against an arbitrary library. | 6 """Generate a spatial analysis against an arbitrary library. |
| 7 | 7 |
| 8 To use, build the 'binary_size_tool' target. Then run this tool, passing | 8 To use, build the 'binary_size_tool' target. Then run this tool, passing |
| 9 in the location of the library to be analyzed along with any other options | 9 in the location of the library to be analyzed along with any other options |
| 10 you desire. | 10 you desire. |
| (...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 534 speed = 0 | 534 speed = 0 |
| 535 progress_percent = (100.0 * (progress.count + progress.skip_count) / | 535 progress_percent = (100.0 * (progress.count + progress.skip_count) / |
| 536 nm_output_lines_len) | 536 nm_output_lines_len) |
| 537 disambiguation_percent = 0 | 537 disambiguation_percent = 0 |
| 538 if progress.disambiguations != 0: | 538 if progress.disambiguations != 0: |
| 539 disambiguation_percent = (100.0 * progress.disambiguations / | 539 disambiguation_percent = (100.0 * progress.disambiguations / |
| 540 progress.was_ambiguous) | 540 progress.was_ambiguous) |
| 541 | 541 |
| 542 sys.stdout.write('\r%.1f%%: Looked up %d symbols (%d collisions, ' | 542 sys.stdout.write('\r%.1f%%: Looked up %d symbols (%d collisions, ' |
| 543 '%d disambiguations where %.1f%% succeeded)' | 543 '%d disambiguations where %.1f%% succeeded)' |
| 544 '- %.1f lookups/s.' % | 544 ' - %.1f lookups/s.' % |
| 545 (progress_percent, progress.count, progress.collisions, | 545 (progress_percent, progress.count, progress.collisions, |
| 546 progress.disambiguations, disambiguation_percent, speed)) | 546 progress.disambiguations, disambiguation_percent, speed)) |
| 547 | 547 |
| 548 # In case disambiguation was disabled, we remove the source path (which upon | 548 # In case disambiguation was disabled, we remove the source path (which upon |
| 549 # being set signals the symbolizer to enable disambiguation) | 549 # being set signals the symbolizer to enable disambiguation) |
| 550 if not disambiguate: | 550 if not disambiguate: |
| 551 src_path = None | 551 src_path = None |
| 552 symbolizer = elf_symbolizer.ELFSymbolizer(library, addr2line_binary, | 552 symbolizer = elf_symbolizer.ELFSymbolizer(library, addr2line_binary, |
| 553 map_address_symbol, | 553 map_address_symbol, |
| 554 max_concurrent_jobs=jobs, | 554 max_concurrent_jobs=jobs, |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 611 line_number = symbol.source_line | 611 line_number = symbol.source_line |
| 612 out.write('%s\t%s:%d\n' % (line, path, line_number)) | 612 out.write('%s\t%s:%d\n' % (line, path, line_number)) |
| 613 continue | 613 continue |
| 614 | 614 |
| 615 out.write('%s\n' % line) | 615 out.write('%s\n' % line) |
| 616 | 616 |
| 617 print('%d symbols in the results.' % len(address_symbol)) | 617 print('%d symbols in the results.' % len(address_symbol)) |
| 618 | 618 |
| 619 | 619 |
| 620 def RunNm(binary, nm_binary): | 620 def RunNm(binary, nm_binary): |
| 621 print('Starting nm') | |
| 622 cmd = [nm_binary, '-C', '--print-size', '--size-sort', '--reverse-sort', | 621 cmd = [nm_binary, '-C', '--print-size', '--size-sort', '--reverse-sort', |
| 623 binary] | 622 binary] |
| 624 nm_process = subprocess.Popen(cmd, | 623 nm_process = subprocess.Popen(cmd, |
| 625 stdout=subprocess.PIPE, | 624 stdout=subprocess.PIPE, |
| 626 stderr=subprocess.PIPE) | 625 stderr=subprocess.PIPE) |
| 627 (process_output, err_output) = nm_process.communicate() | 626 (process_output, err_output) = nm_process.communicate() |
| 628 | 627 |
| 629 if nm_process.returncode != 0: | 628 if nm_process.returncode != 0: |
| 630 if err_output: | 629 if err_output: |
| 631 raise Exception, err_output | 630 raise Exception, err_output |
| 632 else: | 631 else: |
| 633 raise Exception, process_output | 632 raise Exception, process_output |
| 634 | 633 |
| 635 print('Finished nm') | |
| 636 return process_output | 634 return process_output |
| 637 | 635 |
| 638 | 636 |
| 639 def GetNmSymbols(nm_infile, outfile, library, jobs, verbose, | 637 def GetNmSymbols(nm_infile, outfile, library, jobs, verbose, |
| 640 addr2line_binary, nm_binary, disambiguate, src_path): | 638 addr2line_binary, nm_binary, disambiguate, src_path): |
| 641 if nm_infile is None: | 639 if nm_infile is None: |
| 642 if outfile is None: | 640 if outfile is None: |
| 643 outfile = tempfile.NamedTemporaryFile(delete=False).name | 641 outfile = tempfile.NamedTemporaryFile(delete=False).name |
| 644 | 642 |
| 645 if verbose: | 643 if verbose: |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 924 shutil.copy(os.path.join(d3_src, 'LICENSE'), d3_out) | 922 shutil.copy(os.path.join(d3_src, 'LICENSE'), d3_out) |
| 925 shutil.copy(os.path.join(d3_src, 'd3.js'), d3_out) | 923 shutil.copy(os.path.join(d3_src, 'd3.js'), d3_out) |
| 926 shutil.copy(os.path.join(template_src, 'index.html'), opts.destdir) | 924 shutil.copy(os.path.join(template_src, 'index.html'), opts.destdir) |
| 927 shutil.copy(os.path.join(template_src, 'D3SymbolTreeMap.js'), opts.destdir) | 925 shutil.copy(os.path.join(template_src, 'D3SymbolTreeMap.js'), opts.destdir) |
| 928 | 926 |
| 929 print 'Report saved to ' + opts.destdir + '/index.html' | 927 print 'Report saved to ' + opts.destdir + '/index.html' |
| 930 | 928 |
| 931 | 929 |
| 932 if __name__ == '__main__': | 930 if __name__ == '__main__': |
| 933 sys.exit(main()) | 931 sys.exit(main()) |
| OLD | NEW |