Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 806313fe authored by Todd Kennedy's avatar Todd Kennedy Committed by Rom Lemarchand
Browse files

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.

(cherry picked from commit 12434f8c)

Change-Id: Id3c5ae227ed400e489bb723a56c516dfc12acd89
parent 90907aca
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -746,7 +746,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;

@@ -807,7 +807,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";
@@ -861,6 +860,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);
    }
@@ -1095,6 +1096,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");
@@ -1238,7 +1240,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);
+13 −5
Original line number Diff line number Diff line
@@ -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)))