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

Side by Side Diff: tools/binary_size/diagnose_bloat.py

Issue 2876033002: diagnose_bloat.py: fix broken --subrepo. (Closed)
Patch Set: user accept message spacing Created 3 years, 7 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright 2017 The Chromium Authors. All rights reserved. 2 # Copyright 2017 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 """Tool for finding the cause of binary size bloat. 6 """Tool for finding the cause of binary size bloat.
7 7
8 See //tools/binary_size/README.md for example usage. 8 See //tools/binary_size/README.md for example usage.
9 9
10 Note: this tool will perform gclient sync/git checkout on your local repo if 10 Note: this tool will perform gclient sync/git checkout on your local repo if
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 rebased_tool_prefix = os.path.join(_SRC_ROOT, tool_prefix) 512 rebased_tool_prefix = os.path.join(_SRC_ROOT, tool_prefix)
513 if os.path.exists(rebased_tool_prefix + 'readelf'): 513 if os.path.exists(rebased_tool_prefix + 'readelf'):
514 return rebased_tool_prefix 514 return rebased_tool_prefix
515 tool_prefix = tool_prefix[tool_prefix.find(os.path.sep) + 1:] 515 tool_prefix = tool_prefix[tool_prefix.find(os.path.sep) + 1:]
516 return '' 516 return ''
517 517
518 518
519 def _SyncAndBuild(archive, build, subrepo): 519 def _SyncAndBuild(archive, build, subrepo):
520 """Sync, build and return non 0 if any commands failed.""" 520 """Sync, build and return non 0 if any commands failed."""
521 # Simply do a checkout if subrepo is used. 521 # Simply do a checkout if subrepo is used.
522 retcode = 0
522 if subrepo != _SRC_ROOT: 523 if subrepo != _SRC_ROOT:
523 _GitCmd(['checkout', archive.rev], subrepo) 524 _GitCmd(['checkout', archive.rev], subrepo)
524 return 0
525 else: 525 else:
526 # Move to a detached state since gclient sync doesn't work with local 526 # Move to a detached state since gclient sync doesn't work with local
527 # commits on a branch. 527 # commits on a branch.
528 _GitCmd(['checkout', '--detach'], subrepo) 528 _GitCmd(['checkout', '--detach'], subrepo)
529 logging.info('Syncing to %s', archive.rev) 529 logging.info('Syncing to %s', archive.rev)
530 return _GclientSyncCmd(archive.rev, subrepo) or build.Run() 530 retcode = _GclientSyncCmd(archive.rev, subrepo)
531 return retcode or build.Run()
531 532
532 533
533 def _GenerateRevList(rev, reference_rev, all_in_range, subrepo): 534 def _GenerateRevList(rev, reference_rev, all_in_range, subrepo):
534 """Normalize and optionally generate a list of commits in the given range. 535 """Normalize and optionally generate a list of commits in the given range.
535 536
536 Returns: 537 Returns:
537 A list of revisions ordered from oldest to newest. 538 A list of revisions ordered from oldest to newest.
538 """ 539 """
539 rev_seq = '%s^..%s' % (reference_rev, rev) 540 rev_seq = '%s^..%s' % (reference_rev, rev)
540 stdout = _GitCmd(['rev-list', rev_seq], subrepo) 541 stdout = _GitCmd(['rev-list', rev_seq], subrepo)
541 all_revs = stdout.splitlines()[::-1] 542 all_revs = stdout.splitlines()[::-1]
542 if all_in_range: 543 if all_in_range:
543 revs = all_revs 544 revs = all_revs
544 else: 545 else:
545 revs = [all_revs[0], all_revs[-1]] 546 revs = [all_revs[0], all_revs[-1]]
546 if len(revs) >= _COMMIT_COUNT_WARN_THRESHOLD: 547 if len(revs) >= _COMMIT_COUNT_WARN_THRESHOLD:
547 _VerifyUserAccepts( 548 _VerifyUserAccepts(
548 'You\'ve provided a commit range that contains %d commits' % len(revs)) 549 'You\'ve provided a commit range that contains %d commits.' % len(revs))
549 return revs 550 return revs
550 551
551 552
552 def _ValidateRevs(rev, reference_rev, subrepo): 553 def _ValidateRevs(rev, reference_rev, subrepo):
553 def git_fatal(args, message): 554 def git_fatal(args, message):
554 devnull = open(os.devnull, 'wb') 555 devnull = open(os.devnull, 'wb')
555 retcode = subprocess.call( 556 retcode = subprocess.call(
556 ['git', '-C', subrepo] + args, stdout=devnull, stderr=subprocess.STDOUT) 557 ['git', '-C', subrepo] + args, stdout=devnull, stderr=subprocess.STDOUT)
557 if retcode: 558 if retcode:
558 _Die(message) 559 _Die(message)
559 560
560 if rev == reference_rev: 561 if rev == reference_rev:
561 _Die('rev and reference-rev cannot be equal') 562 _Die('rev and reference-rev cannot be equal')
562 no_obj_message = ('%s either doesn\'t exist or your local repo is out of ' 563 no_obj_message = ('%s either doesn\'t exist or your local repo is out of '
563 'date, try "git fetch origin master"') 564 'date, try "git fetch origin master"')
564 git_fatal(['cat-file', '-e', rev], no_obj_message % rev) 565 git_fatal(['cat-file', '-e', rev], no_obj_message % rev)
565 git_fatal(['cat-file', '-e', reference_rev], no_obj_message % reference_rev) 566 git_fatal(['cat-file', '-e', reference_rev], no_obj_message % reference_rev)
566 git_fatal(['merge-base', '--is-ancestor', reference_rev, rev], 567 git_fatal(['merge-base', '--is-ancestor', reference_rev, rev],
567 'reference-rev is newer than rev') 568 'reference-rev is newer than rev')
568 return rev, reference_rev 569 return rev, reference_rev
569 570
570 571
571 def _VerifyUserAccepts(message): 572 def _VerifyUserAccepts(message):
572 print message + 'Do you want to proceed? [y/n]' 573 print message + ' Do you want to proceed? [y/n]'
573 if raw_input('> ').lower() != 'y': 574 if raw_input('> ').lower() != 'y':
574 sys.exit() 575 sys.exit()
575 576
576 577
577 def _EnsureDirectoryClean(subrepo): 578 def _EnsureDirectoryClean(subrepo):
578 logging.info('Checking source directory') 579 logging.info('Checking source directory')
579 stdout = _GitCmd(['status', '--porcelain'], subrepo) 580 stdout = _GitCmd(['status', '--porcelain'], subrepo)
580 # Ignore untracked files. 581 # Ignore untracked files.
581 if stdout and stdout[:2] != '??': 582 if stdout and stdout[:2] != '??':
582 logging.error('Failure: please ensure working directory is clean.') 583 logging.error('Failure: please ensure working directory is clean.')
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
754 logging.basicConfig(level=log_level, 755 logging.basicConfig(level=log_level,
755 format='%(levelname).1s %(relativeCreated)6d %(message)s') 756 format='%(levelname).1s %(relativeCreated)6d %(message)s')
756 build = _BuildHelper(args) 757 build = _BuildHelper(args)
757 if build.IsCloud() and args.subrepo: 758 if build.IsCloud() and args.subrepo:
758 parser.error('--subrepo doesn\'t work with --cloud') 759 parser.error('--subrepo doesn\'t work with --cloud')
759 760
760 subrepo = args.subrepo or _SRC_ROOT 761 subrepo = args.subrepo or _SRC_ROOT
761 _EnsureDirectoryClean(subrepo) 762 _EnsureDirectoryClean(subrepo)
762 _SetRestoreFunc(subrepo) 763 _SetRestoreFunc(subrepo)
763 if build.IsLinux(): 764 if build.IsLinux():
764 _VerifyUserAccepts('Linux diffs have known deficiencies (crbug/717550). ') 765 _VerifyUserAccepts('Linux diffs have known deficiencies (crbug/717550).')
765 766
766 rev, reference_rev = _ValidateRevs( 767 rev, reference_rev = _ValidateRevs(
767 args.rev, args.reference_rev or args.rev + '^', subrepo) 768 args.rev, args.reference_rev or args.rev + '^', subrepo)
768 revs = _GenerateRevList(rev, reference_rev, args.all, subrepo) 769 revs = _GenerateRevList(rev, reference_rev, args.all, subrepo)
769 with _TmpCopyBinarySizeDir() as supersize_path: 770 with _TmpCopyBinarySizeDir() as supersize_path:
770 diffs = [NativeDiff(build.size_name, supersize_path)] 771 diffs = [NativeDiff(build.size_name, supersize_path)]
771 if build.IsAndroid(): 772 if build.IsAndroid():
772 diffs += [ 773 diffs += [
773 ResourceSizesDiff( 774 ResourceSizesDiff(
774 build.apk_name, slow_options=args.include_slow_options) 775 build.apk_name, slow_options=args.include_slow_options)
(...skipping 26 matching lines...) Expand all
801 802
802 if i != 0: 803 if i != 0:
803 diff_mngr.MaybeDiff(i - 1, i) 804 diff_mngr.MaybeDiff(i - 1, i)
804 805
805 diff_mngr.Summarize() 806 diff_mngr.Summarize()
806 807
807 808
808 if __name__ == '__main__': 809 if __name__ == '__main__':
809 sys.exit(main()) 810 sys.exit(main())
810 811
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698