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

Commit cde4b13a authored by Narayan Kamath's avatar Narayan Kamath Committed by Gerrit Code Review
Browse files

Merge "Allow more than one dex2oat extra option"

parents 6ee97e74 b0d8d00b
Loading
Loading
Loading
Loading
+38 −5
Original line number Diff line number Diff line
@@ -621,6 +621,38 @@ static void run_dexopt(int zip_fd, int odex_fd, const char* input_file_name,
    ALOGE("execl(%s) failed: %s\n", DEX_OPT_BIN, strerror(errno));
}

static int split_count(const char *str)
{
  char *ctx;
  int count = 0;
  char buf[PROPERTY_VALUE_MAX];

  strncpy(buf, str, sizeof(buf));
  char *pBuf = buf;

  while(strtok_r(pBuf, " ", &ctx) != NULL) {
    count++;
    pBuf = NULL;
  }

  return count;
}

static int split(char *buf, char **argv)
{
  char *ctx;
  int count = 0;
  char *tok;
  char *pBuf = buf;

  while((tok = strtok_r(pBuf, " ", &ctx)) != NULL) {
    argv[count++] = tok;
    pBuf = NULL;
  }

  return count;
}

static void run_patchoat(int input_fd, int oat_fd, const char* input_file_name,
    const char* output_file_name, const char *pkgname __unused, const char *instruction_set)
{
@@ -693,7 +725,8 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
                                                  dex2oat_isa_features, NULL) > 0;

    char dex2oat_flags[PROPERTY_VALUE_MAX];
    bool have_dex2oat_flags = property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, NULL) > 0;
    int dex2oat_flags_count = property_get("dalvik.vm.dex2oat-flags",
                                 dex2oat_flags, NULL) <= 0 ? 0 : split_count(dex2oat_flags);
    ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags);

    // If we booting without the real /data, don't spend time compiling.
@@ -771,7 +804,7 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
               + (have_dex2oat_Xms_flag ? 2 : 0)
               + (have_dex2oat_Xmx_flag ? 2 : 0)
               + (have_dex2oat_compiler_filter_flag ? 1 : 0)
               + (have_dex2oat_flags ? 1 : 0)];
               + dex2oat_flags_count];
    int i = 0;
    argv[i++] = (char*)DEX2OAT_BIN;
    argv[i++] = zip_fd_arg;
@@ -799,14 +832,14 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name,
    if (have_dex2oat_compiler_filter_flag) {
        argv[i++] = dex2oat_compiler_filter_arg;
    }
    if (have_dex2oat_flags) {
        argv[i++] = dex2oat_flags;
    if (dex2oat_flags_count) {
        i += split(dex2oat_flags, argv + i);
    }
    // Do not add after dex2oat_flags, they should override others for debugging.
    argv[i] = NULL;

    execv(DEX2OAT_BIN, (char* const *)argv);
    ALOGE("execl(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
    ALOGE("execv(%s) failed: %s\n", DEX2OAT_BIN, strerror(errno));
}

static int wait_child(pid_t pid)