trybot_commit_size_checker.py: Show resource_sizes.py diff inline
* Removes obsolete command-line flags.
* Moves resource_sizes.py diff as well as failing size checks inline
Bug: 914654
Change-Id: I444da444a2bbed4a154ce1d4a64bb99549e81e86
Reviewed-on: https://chromium-review.googlesource.com/c/1407375
Reviewed-by: Eric Stevenson <estevenson@chromium.org>
Commit-Queue: agrieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#622156}
diff --git a/tools/binary_size/diagnose_bloat.py b/tools/binary_size/diagnose_bloat.py
index c1807647..a0c3c37c 100755
--- a/tools/binary_size/diagnose_bloat.py
+++ b/tools/binary_size/diagnose_bloat.py
@@ -148,13 +148,13 @@
return self._ResultLines()
def Summary(self):
- header_lines = [
+ footer_lines = [
+ '',
'For an explanation of these metrics, see:',
('https://chromium.googlesource.com/chromium/src/+/master/docs/speed/'
- 'binary_size/metrics.md#Metrics-for-Android'),
- '']
- return header_lines + self._ResultLines(
- include_sections=ResourceSizesDiff._SUMMARY_SECTIONS)
+ 'binary_size/metrics.md#Metrics-for-Android')]
+ return self._ResultLines(
+ include_sections=ResourceSizesDiff._SUMMARY_SECTIONS) + footer_lines
def ProduceDiff(self, before_dir, after_dir):
before = self._LoadResults(before_dir)
diff --git a/tools/binary_size/trybot_commit_size_checker.py b/tools/binary_size/trybot_commit_size_checker.py
index f023a1b..ca44c68 100755
--- a/tools/binary_size/trybot_commit_size_checker.py
+++ b/tools/binary_size/trybot_commit_size_checker.py
@@ -34,9 +34,8 @@
'for an explanation of Normalized APK Size')
_FAILURE_GUIDANCE = """
-Please look at the symbol diffs from the "Show Resource Sizes Diff",
-"Show Supersize Diff", and "Dex Method Count", and "Supersize HTML Report" bot
-steps. Try and understand the growth and see if it can be mitigated.
+Please look at size breakdowns, try to understand the growth, and see if it can
+be mitigated.
There is guidance at:
@@ -78,7 +77,7 @@
return cmp(self.name, other.name)
-def _CreateAndWriteMethodCountDelta(symbols, output_path):
+def _CreateAndWriteMethodCountDelta(symbols):
dex_symbols = symbols.WhereInSection(models.SECTION_DEX_METHOD)
dex_added = dex_symbols.WhereDiffStatusIs(models.DIFF_STATUS_ADDED)
dex_removed = dex_symbols.WhereDiffStatusIs(models.DIFF_STATUS_REMOVED)
@@ -91,31 +90,21 @@
lines.append('Removed: {}'.format(dex_removed_count))
lines.extend(sorted(s.full_name for s in dex_removed))
- if output_path:
- with open(output_path, 'w') as f:
- f.writelines(l + '\n' for l in lines)
-
return lines, _SizeDelta('Dex Methods', 'methods',
_MAX_DEX_METHOD_COUNT_INCREASE, dex_net_added,
_DEX_DETAILS)
-def _CreateAndWriteResourceSizesDelta(apk_name, before_dir, after_dir,
- output_path):
+def _CreateAndWriteResourceSizesDelta(apk_name, before_dir, after_dir):
sizes_diff = diagnose_bloat.ResourceSizesDiff(apk_name)
sizes_diff.ProduceDiff(before_dir, after_dir)
- lines = sizes_diff.Summary()
- if output_path:
- with open(output_path, 'w') as f:
- f.writelines(l + '\n' for l in lines)
-
- return lines, _SizeDelta(
+ return sizes_diff.Summary(), _SizeDelta(
'Normalized APK Size', 'bytes', _MAX_NORMALIZED_INCREASE,
sizes_diff.summary_stat.value, _NORMALIZED_APK_SIZE_DETAILS)
-def _CreateAndWriteSupersizeDiff(apk_name, before_dir, after_dir, output_path):
+def _CreateAndWriteSupersizeDiff(apk_name, before_dir, after_dir):
before_size_path = os.path.join(before_dir, apk_name + '.size')
after_size_path = os.path.join(after_dir, apk_name + '.size')
before = archive.LoadAndPostProcessSizeInfo(before_size_path)
@@ -123,11 +112,6 @@
size_info_delta = diff.Diff(before, after, sort=True)
lines = list(describe.GenerateLines(size_info_delta))
-
- if output_path:
- with open(output_path, 'w') as f:
- f.writelines(l + '\n' for l in lines)
-
return lines, size_info_delta
@@ -157,35 +141,22 @@
required=True,
help='Directory containing APK for the new build.')
parser.add_argument(
- '--resource-sizes-diff-path',
- help='Output path for the resource_sizes.py diff.')
- parser.add_argument(
- '--supersize-diff-path', help='Output path for the Supersize diff.')
- parser.add_argument(
- '--dex-method-count-diff-path',
- help='Output path for the dex method count diff.')
- parser.add_argument(
- '--ndjson-path', help='Output path for the Supersize HTML report.')
- parser.add_argument(
'--results-path',
required=True,
help='Output path for the trybot result .json file.')
parser.add_argument(
- '--staging-dir', help='Directory to write summary files to.')
+ '--staging-dir',
+ required=True,
+ help='Directory to write summary files to.')
parser.add_argument('-v', '--verbose', action='store_true')
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.INFO)
- ndjson_path = args.ndjson_path
- # TODO(agrieve): Remove above args once recipe is updated.
- if args.staging_dir:
- ndjson_path = os.path.join(args.staging_dir, _NDJSON_FILENAME)
-
logging.info('Creating Supersize diff')
supersize_diff_lines, delta_size_info = _CreateAndWriteSupersizeDiff(
- args.apk_name, args.before_dir, args.after_dir, args.supersize_diff_path)
+ args.apk_name, args.before_dir, args.after_dir)
changed_symbols = delta_size_info.raw_symbols.WhereDiffStatusIs(
models.DIFF_STATUS_UNCHANGED).Inverted()
@@ -193,8 +164,7 @@
# Monitor dex method growth since this correlates closely with APK size and
# may affect our dex file structure.
logging.info('Checking dex symbols')
- dex_delta_lines, dex_delta = _CreateAndWriteMethodCountDelta(
- changed_symbols, args.dex_method_count_diff_path)
+ dex_delta_lines, dex_delta = _CreateAndWriteMethodCountDelta(changed_symbols)
size_deltas = {dex_delta}
# Check for uncompressed .pak file entries being added to avoid unnecessary
@@ -206,56 +176,43 @@
logging.info('Creating sizes diff')
resource_sizes_lines, resource_sizes_delta = (
_CreateAndWriteResourceSizesDelta(args.apk_name, args.before_dir,
- args.after_dir,
- args.resource_sizes_diff_path))
+ args.after_dir))
size_deltas.add(resource_sizes_delta)
# .ndjson can be consumed by the html viewer.
logging.info('Creating HTML Report')
- html_report.BuildReportFromSizeInfo(
- ndjson_path, delta_size_info, all_symbols=True)
+ ndjson_path = os.path.join(args.staging_dir, _NDJSON_FILENAME)
+ html_report.BuildReportFromSizeInfo(ndjson_path, delta_size_info)
passing_deltas = set(m for m in size_deltas if m.IsAllowable())
failing_deltas = size_deltas - passing_deltas
is_roller = '-autoroll' in args.author
- checks_text = """
-
-Binary size checks {}.
-
-*******************************************************************************
+ failing_checks_text = '\n'.join(d.explanation for d in sorted(failing_deltas))
+ passing_checks_text = '\n'.join(d.explanation for d in sorted(passing_deltas))
+ checks_text = """\
FAILING:
-
{}
-*******************************************************************************
-
PASSING:
-
{}
-
-*******************************************************************************
-
-""".format('failed' if failing_deltas else 'passed', '\n\n'.join(
- d.explanation for d in sorted(failing_deltas)), '\n\n'.join(
- d.explanation for d in sorted(passing_deltas)))
+""".format(failing_checks_text, passing_checks_text)
if failing_deltas:
checks_text += _FAILURE_GUIDANCE
status_code = 1 if failing_deltas and not is_roller else 0
- summary = '<br>'.join([
- '',
- 'Normalized apk size delta: {}'.format(resource_sizes_delta.actual),
- 'Dex method count delta: {}'.format(dex_delta.actual),
- ])
+ summary = '<br>' + '<br>'.join(resource_sizes_lines)
+ if 'Empty Resource Sizes Diff' in summary:
+ summary = '<br>No size metrics were affected.'
+ if failing_deltas:
+ summary += '<br><br>Failed Size Checks:<br>'
+ summary += failing_checks_text.replace('\n', '<br>')
+ summary += '<br>Look at "Size Assertion Results" for guidance.'
- # TODO(agrieve): Remove once recipe is updated: details, normalized_apk_size
results_json = {
'status_code': status_code,
'summary': summary,
- 'details': checks_text,
- 'normalized_apk_size': resource_sizes_delta.actual,
'archive_filenames': [_NDJSON_FILENAME],
'links': [
{
@@ -263,10 +220,6 @@
'lines': checks_text.splitlines(),
},
{
- 'name': '>>> Resource Sizes Diff (high-level metrics) <<<',
- 'lines': resource_sizes_lines,
- },
- {
'name': '>>> Dex Method Diff <<<',
'lines': dex_delta_lines,
},