From e21ac2193d4ed1fd9bc4d5328625d3868409fe4d Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Mon, 11 Jul 2016 15:19:31 -0700 Subject: [PATCH] Installd: Add support for dex2oat very-large-app property To support constrained devices, dex2oat supports a parameter that can downgrade a compilation to verify-at-runtime. Expose this through the dalvik.vm.dex2oat-very-large system property. Bug: 29557002 Change-Id: Iace626a8ec18533d37f84a41c20729fe7e400386 --- cmds/installd/commands.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index 89994414e2..014d14a7e4 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -755,6 +755,16 @@ static void run_dex2oat(int zip_fd, int oat_fd, int image_fd, const char* input_ sprintf(image_format_arg, "--image-format=%s", app_image_format); } + char dex2oat_large_app_threshold[kPropertyValueMax]; + bool have_dex2oat_large_app_threshold = + get_property("dalvik.vm.dex2oat-very-large", dex2oat_large_app_threshold, NULL) > 0; + char dex2oat_large_app_threshold_arg[strlen("--very-large-app-threshold=") + kPropertyValueMax]; + if (have_dex2oat_large_app_threshold) { + sprintf(dex2oat_large_app_threshold_arg, + "--very-large-app-threshold=%s", + dex2oat_large_app_threshold); + } + static const char* DEX2OAT_BIN = "/system/bin/dex2oat"; static const char* RUNTIME_ARG = "--runtime-arg"; @@ -855,7 +865,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, int image_fd, const char* input_ + (have_app_image_format ? 1 : 0) + dex2oat_flags_count + (profile_fd == -1 ? 0 : 1) - + (shared_libraries != nullptr ? 4 : 0)]; + + (shared_libraries != nullptr ? 4 : 0) + + (have_dex2oat_large_app_threshold ? 1 : 0)]; int i = 0; argv[i++] = DEX2OAT_BIN; argv[i++] = zip_fd_arg; @@ -898,6 +909,9 @@ static void run_dex2oat(int zip_fd, int oat_fd, int image_fd, const char* input_ if (have_app_image_format) { argv[i++] = image_format_arg; } + if (have_dex2oat_large_app_threshold) { + argv[i++] = dex2oat_large_app_threshold_arg; + } if (dex2oat_flags_count) { i += split(dex2oat_flags, argv + i); } -- 2.11.0