From 57c69c39640a7d6a08b3afb56361d76f7ecf1250 Mon Sep 17 00:00:00 2001 From: Calin Juravle Date: Fri, 6 Jun 2014 14:42:16 +0100 Subject: [PATCH] Don't always add profile-file option to dex2oat Add profile-file option to dex2oat only if the profiler is active and the file exists. Bug: 12877748 Bug: 15275634 Change-Id: Icef76514c912c88311ed108f2be7a6329131f741 --- cmds/installd/commands.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c index 34a535382..891157042 100644 --- a/cmds/installd/commands.c +++ b/cmds/installd/commands.c @@ -625,6 +625,10 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, property_get("dalvik.vm.dex2oat-flags", dex2oat_flags, ""); ALOGV("dalvik.vm.dex2oat-flags=%s\n", dex2oat_flags); + char profiler_prop[PROPERTY_VALUE_MAX]; + bool profiler = property_get("dalvik.vm.profiler", profiler_prop, "0") + && (profiler_prop[0] == '1'); + static const char* DEX2OAT_BIN = "/system/bin/dex2oat"; static const int MAX_INT_LEN = 12; // '-'+10dig+'\0' -OR- 0x+8dig static const unsigned int MAX_INSTRUCTION_SET_LEN = 32; @@ -647,9 +651,17 @@ static void run_dex2oat(int zip_fd, int oat_fd, const char* input_file_name, sprintf(oat_fd_arg, "--oat-fd=%d", oat_fd); sprintf(oat_location_arg, "--oat-location=%s", output_file_name); sprintf(instruction_set_arg, "--instruction-set=%s", instruction_set); - if (strcmp(pkgname, "*") != 0) { - snprintf(profile_file_arg, sizeof(profile_file_arg), "--profile-file=%s/%s", + + if (profiler && (strcmp(pkgname, "*") != 0)) { + char profile_file[PKG_PATH_MAX]; + snprintf(profile_file, sizeof(profile_file), "%s/%s", DALVIK_CACHE_PREFIX "profiles", pkgname); + struct stat st; + if (stat(profile_file, &st) == -1) { + strcpy(profile_file_arg, "--no-profile-file"); + } else { + sprintf(profile_file_arg, "--profile-file=%s", profile_file); + } } else { strcpy(profile_file_arg, "--no-profile-file"); }