Commit 16fbe188 authored by Andrew Grieve's avatar Andrew Grieve Committed by Commit Bot

Android: Speed up apkbuilder.py by setting zlib compression level

For non-official builds, sets compression level to 1, which yields a
~4% worse compression ratio, but compresses twice as fast.

For official builds, sets compression level to 9, which yields a
0-1% better compression ratio, and compression twice as slow.

On my machine, apkbuilder.py for Monochrome.apk in debug goes from 7.5
to 6.2 seconds, and with is_officail_build, 9.6 seconds.

Bug: 1036740
Change-Id: I9296dcb45358a6c5cf742fc404dadbbbaec522fb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1980313
Commit-Queue: Andrew Grieve <agrieve@chromium.org>
Reviewed-by: default avatarPeter Wen <wnwen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#728515}
parent 7d191755
......@@ -13,6 +13,7 @@ import shutil
import sys
import tempfile
import zipfile
import zlib
import finalize_apk
......@@ -102,6 +103,10 @@ def _ParseArgs(args):
help='Keystore name')
parser.add_argument(
'--min-sdk-version', required=True, help='Value of APK\'s minSdkVersion')
parser.add_argument(
'--best-compression',
action='store_true',
help='Use zip -9 rather than zip -1')
options = parser.parse_args(args)
options.assets = build_utils.ParseGnList(options.assets)
options.uncompressed_assets = build_utils.ParseGnList(
......@@ -235,6 +240,15 @@ def main(args):
args = build_utils.ExpandFileArgs(args)
options = _ParseArgs(args)
# Until Python 3.7, there's no better way to set compression level.
# The default is 6.
if options.best_compression:
# Compresses about twice as slow as the default.
zlib.Z_DEFAULT_COMPRESSION = 9
else:
# Compresses about twice as fast as the default.
zlib.Z_DEFAULT_COMPRESSION = 1
native_libs = sorted(options.native_libs)
# Include native libs in the depfile_deps since GN doesn't know about the
......@@ -398,6 +412,7 @@ def main(args):
f.name, f.name, options.key_path,
options.key_passwd, options.key_name,
int(options.min_sdk_version))
logging.debug('Moving file into place')
if options.depfile:
build_utils.WriteDepfile(
......
......@@ -2619,9 +2619,16 @@ if (enable_java_templates) {
invoker.keystore_password,
"--min-sdk-version=${invoker.min_sdk_version}",
]
if (is_official_build) {
args += [ "--best-compression" ]
}
if (defined(invoker.uncompress_dex) && invoker.uncompress_dex) {
args += [ "--uncompress-dex" ]
}
if (defined(invoker.uncompress_shared_libraries) &&
invoker.uncompress_shared_libraries) {
args += [ "--uncompress-shared-libraries=True" ]
}
if (defined(invoker.assets_build_config)) {
inputs += [ invoker.assets_build_config ]
_rebased_build_config =
......@@ -2674,11 +2681,6 @@ if (enable_java_templates) {
if (_secondary_native_lib_placeholders != []) {
args += [ "--secondary-native-lib-placeholders=$_secondary_native_lib_placeholders" ]
}
if (defined(invoker.uncompress_shared_libraries) &&
invoker.uncompress_shared_libraries) {
args += [ "--uncompress-shared-libraries=True" ]
}
}
}
......
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