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 ...@@ -13,6 +13,7 @@ import shutil
import sys import sys
import tempfile import tempfile
import zipfile import zipfile
import zlib
import finalize_apk import finalize_apk
...@@ -102,6 +103,10 @@ def _ParseArgs(args): ...@@ -102,6 +103,10 @@ def _ParseArgs(args):
help='Keystore name') help='Keystore name')
parser.add_argument( parser.add_argument(
'--min-sdk-version', required=True, help='Value of APK\'s minSdkVersion') '--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 = parser.parse_args(args)
options.assets = build_utils.ParseGnList(options.assets) options.assets = build_utils.ParseGnList(options.assets)
options.uncompressed_assets = build_utils.ParseGnList( options.uncompressed_assets = build_utils.ParseGnList(
...@@ -235,6 +240,15 @@ def main(args): ...@@ -235,6 +240,15 @@ def main(args):
args = build_utils.ExpandFileArgs(args) args = build_utils.ExpandFileArgs(args)
options = _ParseArgs(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) native_libs = sorted(options.native_libs)
# Include native libs in the depfile_deps since GN doesn't know about the # Include native libs in the depfile_deps since GN doesn't know about the
...@@ -398,6 +412,7 @@ def main(args): ...@@ -398,6 +412,7 @@ def main(args):
f.name, f.name, options.key_path, f.name, f.name, options.key_path,
options.key_passwd, options.key_name, options.key_passwd, options.key_name,
int(options.min_sdk_version)) int(options.min_sdk_version))
logging.debug('Moving file into place')
if options.depfile: if options.depfile:
build_utils.WriteDepfile( build_utils.WriteDepfile(
......
...@@ -2619,9 +2619,16 @@ if (enable_java_templates) { ...@@ -2619,9 +2619,16 @@ if (enable_java_templates) {
invoker.keystore_password, invoker.keystore_password,
"--min-sdk-version=${invoker.min_sdk_version}", "--min-sdk-version=${invoker.min_sdk_version}",
] ]
if (is_official_build) {
args += [ "--best-compression" ]
}
if (defined(invoker.uncompress_dex) && invoker.uncompress_dex) { if (defined(invoker.uncompress_dex) && invoker.uncompress_dex) {
args += [ "--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)) { if (defined(invoker.assets_build_config)) {
inputs += [ invoker.assets_build_config ] inputs += [ invoker.assets_build_config ]
_rebased_build_config = _rebased_build_config =
...@@ -2674,11 +2681,6 @@ if (enable_java_templates) { ...@@ -2674,11 +2681,6 @@ if (enable_java_templates) {
if (_secondary_native_lib_placeholders != []) { if (_secondary_native_lib_placeholders != []) {
args += [ "--secondary-native-lib-placeholders=$_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