OSDN Git Service

Installd: Add support for dex2oat very-large-app property
authorAndreas Gampe <agampe@google.com>
Mon, 11 Jul 2016 22:19:31 +0000 (15:19 -0700)
committerAndreas Gampe <agampe@google.com>
Tue, 6 Sep 2016 18:23:54 +0000 (11:23 -0700)
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
(cherry picked from commit e21ac2193d4ed1fd9bc4d5328625d3868409fe4d)

cmds/installd/commands.cpp

index 3cc7986..2392ef4 100644 (file)
@@ -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);
     }