Commit 2ebcde7b authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

milestone_apk_sizes.py - Update for TriChrome

Plus resource_sizes.py tweaks:
* Fixes failed sanity check for TrichromeWebView.apk
* Teaches it that TrichromeLibrary is a shared apk

Plus converts milestone_apk_sizes.py to python3

Bug: 1056320
Change-Id: I7691e9ccd7498dab180e104428ed7fe909c18fc7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2099765Reviewed-by: default avatarMohamed Heikal <mheikal@chromium.org>
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Cr-Commit-Position: refs/heads/master@{#749670}
parent a1cd2fe4
......@@ -316,9 +316,11 @@ def _DoApkAnalysis(apk_filename, apks_path, tool_prefix, out_dir, report_func):
# E.g. with obfuscation, the 4.04 changes to 4.46.
speed_profile_dex_multiplier = 1.17
orig_filename = apks_path or apk_filename
is_monochrome = 'Monochrome' in orig_filename
is_webview = 'WebView' in orig_filename
is_shared_apk = sdk_version >= 24 and (is_monochrome or is_webview)
is_monochrome = 'Monochrome' in orig_filename
is_library = 'Library' in orig_filename
is_shared_apk = sdk_version >= 24 and (is_monochrome or is_webview
or is_library)
if sdk_version < 21:
# JellyBean & KitKat
dex_multiplier = 1.16
......@@ -472,10 +474,12 @@ def _DoApkAnalysis(apk_filename, apks_path, tool_prefix, out_dir, report_func):
# As of now, padding_fraction ~= .007
padding_fraction = -_PercentageDifference(
native_code.ComputeUncompressedSize(), native_code_unaligned_size)
assert 0 <= padding_fraction < .02, (
'Padding was: {} (file_size={}, sections_sum={})'.format(
padding_fraction, native_code.ComputeUncompressedSize(),
native_code_unaligned_size))
# Ignore this check for small / no native code
if native_code.ComputeUncompressedSize() > 100000:
assert 0 <= padding_fraction < .02, (
'Padding was: {} (file_size={}, sections_sum={})'.format(
padding_fraction, native_code.ComputeUncompressedSize(),
native_code_unaligned_size))
if apks_path:
# Locale normalization not needed when measuring only one locale.
......
#!/usr/bin/env python
#!/usr/bin/env python3
# Copyright 2019 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.
......@@ -21,10 +21,6 @@ import zipfile
_DIR_SOURCE_ROOT = os.path.normpath(
os.path.join(os.path.dirname(__file__), '..', '..'))
sys.path.insert(1, os.path.join(_DIR_SOURCE_ROOT, 'build', 'android', 'gyp'))
from util import zipalign
zipalign.ApplyZipFileZipAlignFix()
_GSUTIL = os.path.join(_DIR_SOURCE_ROOT, 'third_party', 'depot_tools',
'gsutil.py')
_RESOURCE_SIZES = os.path.join(_DIR_SOURCE_ROOT, 'build', 'android',
......@@ -32,10 +28,9 @@ _RESOURCE_SIZES = os.path.join(_DIR_SOURCE_ROOT, 'build', 'android',
class _Artifact(object):
def __init__(self, signed_prefix, name):
def __init__(self, prefix, name):
self.name = name
self._gs_url = posixpath.join(signed_prefix, name)
self._gs_url = posixpath.join(prefix, name)
self._temp = tempfile.NamedTemporaryFile(suffix=posixpath.basename(name))
self._path = self._temp.name
self._resource_sizes_json = None
......@@ -55,20 +50,27 @@ class _Artifact(object):
logging.warning(' '.join(args))
self._resource_sizes_json = json.loads(subprocess.check_output(args))
def AddSize(self, metrics):
metrics[self.name] = self._resource_sizes_json['charts']['InstallSize'][
'APK size']['value']
def GetCompressedSize(self):
return self._resource_sizes_json['charts']['TransferSize'][
'Transfer size (deflate)']['value']
def GetApkSize(self):
return self._resource_sizes_json['charts']['InstallSize']['APK size'][
'value']
def AddAndroidGoSize(self, metrics):
metrics[self.name + ' (Android Go)'] = self._resource_sizes_json['charts'][
'InstallSize']['Estimated installed size (Android Go)']['value']
def GetAndroidGoSize(self):
return self._resource_sizes_json['charts']['InstallSize'][
'Estimated installed size (Android Go)']['value']
def AddSize(self, metrics):
metrics[self.name] = self.GetApkSize()
def AddMethodCount(self, metrics):
metrics[self.name + ' (method count)'] = self._resource_sizes_json[
'charts']['Dex']['unique methods']['value']
def AddDfmSizes(self, metrics):
for k, v in sorted(self._resource_sizes_json['charts'].iteritems()):
for k, v in sorted(self._resource_sizes_json['charts'].items()):
if k.startswith('DFM_'):
metrics['DFM: ' + k[4:]] = v['Size with hindi']['value']
......@@ -88,11 +90,11 @@ def _DumpCsv(metrics):
csv_writer.writerow(metrics)
def _DownloadAndAnalyze(signed_prefix):
def _DownloadAndAnalyze(signed_prefix, unsigned_prefix):
artifacts = []
def make_artifact(name):
artifacts.append(_Artifact(signed_prefix, name))
def make_artifact(name, prefix=signed_prefix):
artifacts.append(_Artifact(prefix, name))
return artifacts[-1]
chrome = make_artifact('arm/ChromeStable.apk')
......@@ -102,8 +104,29 @@ def _DownloadAndAnalyze(signed_prefix):
chrome_modern64 = make_artifact('arm_64/ChromeModernStable.apks')
monochrome = make_artifact('arm/MonochromeStable.apks')
monochrome64 = make_artifact('arm_64/MonochromeStable.apks')
# Download in parallel.
trichrome_chrome = make_artifact('arm/TrichromeChromeGoogleStable.apks')
trichrome_webview = make_artifact('arm/TrichromeWebViewGoogleStable.apk')
trichrome_library = make_artifact('arm/TrichromeLibraryGoogleStable.apk')
trichrome64_chrome = make_artifact('arm_64/TrichromeChromeGoogleStable.apks')
trichrome64_webview = make_artifact('arm_64/TrichromeWebViewGoogleStable.apk')
trichrome64_library = make_artifact('arm_64/TrichromeLibraryGoogleStable.apk')
trichrome_system_apks = [
make_artifact('arm/TrichromeWebViewGoogleSystemStable.apk'),
make_artifact('arm/TrichromeLibraryGoogleSystemStable.apk'),
make_artifact(
'arm/for-signing-only/TrichromeChromeGoogleSystemStable.apk',
prefix=unsigned_prefix),
]
trichrome_system_stubs = [
make_artifact('arm/TrichromeWebViewGoogleSystemStubStable.apk'),
make_artifact('arm/TrichromeLibraryGoogleSystemStubStable.apk'),
make_artifact(
'arm/for-signing-only/TrichromeChromeGoogleSystemStubStable.apk',
prefix=unsigned_prefix),
]
# Download and run resource_sizes.py concurrently.
pool = multiprocessing.dummy.Pool()
pool.map(_Artifact.FetchAndMeasure, artifacts)
pool.close()
......@@ -113,17 +136,34 @@ def _DownloadAndAnalyze(signed_prefix):
chrome.AddSize(metrics)
chrome_modern.AddSize(metrics)
chrome_modern64.AddSize(metrics)
monochrome.AddSize(metrics)
monochrome64.AddSize(metrics)
webview.AddSize(metrics)
webview64.AddSize(metrics)
monochrome.AddSize(metrics)
monochrome64.AddSize(metrics)
trichrome_chrome.AddSize(metrics)
trichrome_webview.AddSize(metrics)
trichrome_library.AddSize(metrics)
trichrome64_chrome.AddSize(metrics)
trichrome64_webview.AddSize(metrics)
trichrome64_library.AddSize(metrics)
_DumpCsv(metrics)
metrics = collections.OrderedDict()
monochrome.AddAndroidGoSize(metrics)
# AndroidGo size exists only for webview & library.
go_install_size = (
trichrome_chrome.GetApkSize() + trichrome_webview.GetAndroidGoSize() +
trichrome_library.GetAndroidGoSize())
metrics['Android Go TriChrome Install Size'] = go_install_size
system_apks_size = sum(x.GetCompressedSize() for x in trichrome_system_apks)
stubs_sizes = sum(x.GetApkSize() for x in trichrome_system_stubs)
metrics['Trichrome Compressed System Image'] = system_apks_size + stubs_sizes
chrome.AddMethodCount(metrics)
monochrome.AddMethodCount(metrics)
monochrome.AddDfmSizes(metrics)
trichrome_chrome.AddDfmSizes(metrics)
_DumpCsv(metrics)
webview.PrintLibraryCompression()
......@@ -139,7 +179,8 @@ def main():
options = parser.parse_args()
signed_prefix = posixpath.join(options.signed_bucket, options.version)
_DownloadAndAnalyze(signed_prefix)
unsigned_prefix = signed_prefix.replace('signed', 'unsigned')
_DownloadAndAnalyze(signed_prefix, unsigned_prefix)
if __name__ == '__main__':
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment