diff options
author | Todd Kennedy <toddke@google.com> | 2015-09-25 14:45:37 -0700 |
---|---|---|
committer | Todd Kennedy <toddke@google.com> | 2015-09-25 16:00:57 -0700 |
commit | 12434f8cce66a753ef49c07b503f9625e01366c8 (patch) | |
tree | 8c4883fbf3ba975f3ae02162315cdcb519f04c27 | |
parent | d529cd470afa98512bf2eab7a58dae5a9b6e4847 (diff) | |
download | native-12434f8cce66a753ef49c07b503f9625e01366c8.tar.gz |
Allow using the JIT
Instead of the JIT only being available for eng builds [or configurable
via environment variable], allow the JIT to be enabled programatically.
Change-Id: Id3c5ae227ed400e489bb723a56c516dfc12acd89
-rw-r--r-- | cmds/installd/commands.cpp | 8 | ||||
-rw-r--r-- | cmds/installd/installd.h | 18 |
2 files changed, 18 insertions, 8 deletions
diff --git a/cmds/installd/commands.cpp b/cmds/installd/commands.cpp index 906a09bafd..c5b5e8fc78 100644 --- a/cmds/installd/commands.cpp +++ b/cmds/installd/commands.cpp @@ -695,7 +695,7 @@ static bool check_boolean_property(const char* property_name, bool default_value static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, const char* output_file_name, int swap_fd, const char *pkgname, const char *instruction_set, - bool vm_safe_mode, bool debuggable, bool post_bootcomplete) + bool vm_safe_mode, bool debuggable, bool post_bootcomplete, bool use_jit) { static const unsigned int MAX_INSTRUCTION_SET_LEN = 7; @@ -769,7 +769,6 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, (strcmp(vold_decrypt, "trigger_restart_min_framework") == 0 || (strcmp(vold_decrypt, "1") == 0))); - bool use_jit = check_boolean_property("debug.usejit"); bool generate_debug_info = check_boolean_property("debug.generate-debug-info"); static const char* DEX2OAT_BIN = "/system/bin/dex2oat"; @@ -823,6 +822,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, } } + // use the JIT if either it's specified as a dexopt flag or if the property is set + use_jit = use_jit || check_boolean_property("debug.usejit"); if (have_dex2oat_Xms_flag) { sprintf(dex2oat_Xms_arg, "-Xms%s", dex2oat_Xms_flag); } @@ -1057,6 +1058,7 @@ int dexopt(const char *apk_path, uid_t uid, const char *pkgname, const char *ins bool vm_safe_mode = (dexopt_flags & DEXOPT_SAFEMODE) != 0; bool debuggable = (dexopt_flags & DEXOPT_DEBUGGABLE) != 0; bool boot_complete = (dexopt_flags & DEXOPT_BOOTCOMPLETE) != 0; + bool use_jit = (dexopt_flags & DEXOPT_USEJIT) != 0; if ((dexopt_flags & DEXOPT_MASK) != 0) { LOG_FATAL("dexopt flags contains unknown fields\n"); @@ -1200,7 +1202,7 @@ int dexopt(const char *apk_path, uid_t uid, const char *pkgname, const char *ins input_file_name++; } run_dex2oat(input_fd, out_fd, input_file_name, out_path, swap_fd, pkgname, - instruction_set, vm_safe_mode, debuggable, boot_complete); + instruction_set, vm_safe_mode, debuggable, boot_complete, use_jit); } else { ALOGE("Invalid dexopt needed: %d\n", dexopt_needed); exit(73); diff --git a/cmds/installd/installd.h b/cmds/installd/installd.h index 461b08a752..809f40f5e5 100644 --- a/cmds/installd/installd.h +++ b/cmds/installd/installd.h @@ -94,11 +94,19 @@ * IMPORTANT: These values are passed from Java code. Keep them in sync with * frameworks/base/services/core/java/com/android/server/pm/Installer.java ***************************************************************************/ -#define DEXOPT_PUBLIC (1 << 1) -#define DEXOPT_SAFEMODE (1 << 2) -#define DEXOPT_DEBUGGABLE (1 << 3) -#define DEXOPT_BOOTCOMPLETE (1 << 4) -#define DEXOPT_MASK (DEXOPT_PUBLIC | DEXOPT_SAFEMODE | DEXOPT_DEBUGGABLE | DEXOPT_BOOTCOMPLETE) +constexpr int DEXOPT_PUBLIC = 1 << 1; +constexpr int DEXOPT_SAFEMODE = 1 << 2; +constexpr int DEXOPT_DEBUGGABLE = 1 << 3; +constexpr int DEXOPT_BOOTCOMPLETE = 1 << 4; +constexpr int DEXOPT_USEJIT = 1 << 5; + +/* all known values for dexopt flags */ +constexpr int DEXOPT_MASK = + DEXOPT_PUBLIC + | DEXOPT_SAFEMODE + | DEXOPT_DEBUGGABLE + | DEXOPT_BOOTCOMPLETE + | DEXOPT_USEJIT; #define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a))) |