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
diff --git a/cmds/installd/commands.c b/cmds/installd/commands.c
index 34a5353..8911570 100644
--- a/cmds/installd/commands.c
+++ b/cmds/installd/commands.c
@@ -625,6 +625,10 @@
     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 @@
     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");
     }