diff options
| -rw-r--r-- | runtime/native/dalvik_system_DexFile.cc | 92 |
1 files changed, 46 insertions, 46 deletions
diff --git a/runtime/native/dalvik_system_DexFile.cc b/runtime/native/dalvik_system_DexFile.cc index 716356e9a0..8f74dd7074 100644 --- a/runtime/native/dalvik_system_DexFile.cc +++ b/runtime/native/dalvik_system_DexFile.cc @@ -299,6 +299,52 @@ static jboolean IsDexOptNeededInternal(JNIEnv* env, const char* filename, } } + const InstructionSet target_instruction_set = GetInstructionSetFromString(instruction_set); + + // Check if we have an odex file next to the dex file. + std::string odex_filename(DexFilenameToOdexFilename(filename, kRuntimeISA)); + std::string error_msg; + std::unique_ptr<const OatFile> oat_file(OatFile::Open(odex_filename, odex_filename, NULL, false, + &error_msg)); + if (oat_file.get() == nullptr) { + if (kVerboseLogging) { + LOG(INFO) << "DexFile_isDexOptNeeded failed to open oat file '" << filename + << "': " << error_msg; + } + error_msg.clear(); + } else { + const art::OatFile::OatDexFile* oat_dex_file = oat_file->GetOatDexFile(filename, NULL, + kReasonLogging); + if (oat_dex_file != nullptr) { + uint32_t location_checksum; + // If its not possible to read the classes.dex assume up-to-date as we won't be able to + // compile it anyway. + if (!DexFile::GetChecksum(filename, &location_checksum, &error_msg)) { + if (kVerboseLogging) { + LOG(INFO) << "DexFile_isDexOptNeeded ignoring precompiled stripped file: " + << filename << ": " << error_msg; + } + return JNI_FALSE; + } + if (ClassLinker::VerifyOatFileChecksums(oat_file.get(), filename, location_checksum, + target_instruction_set, + &error_msg)) { + if (kVerboseLogging) { + LOG(INFO) << "DexFile_isDexOptNeeded precompiled file " << odex_filename + << " has an up-to-date checksum compared to " << filename; + } + return JNI_FALSE; + } else { + if (kVerboseLogging) { + LOG(INFO) << "DexFile_isDexOptNeeded found precompiled file " << odex_filename + << " with an out-of-date checksum compared to " << filename + << ": " << error_msg; + } + error_msg.clear(); + } + } + } + // Check the profile file. We need to rerun dex2oat if the profile has changed significantly // since the last time, or it's new. // If the 'defer' argument is true then this will be retried later. In this case we @@ -386,52 +432,6 @@ static jboolean IsDexOptNeededInternal(JNIEnv* env, const char* filename, } } - const InstructionSet target_instruction_set = GetInstructionSetFromString(instruction_set); - - // Check if we have an odex file next to the dex file. - std::string odex_filename(DexFilenameToOdexFilename(filename, kRuntimeISA)); - std::string error_msg; - std::unique_ptr<const OatFile> oat_file(OatFile::Open(odex_filename, odex_filename, NULL, false, - &error_msg)); - if (oat_file.get() == nullptr) { - if (kVerboseLogging) { - LOG(INFO) << "DexFile_isDexOptNeeded failed to open oat file '" << filename - << "': " << error_msg; - } - error_msg.clear(); - } else { - const art::OatFile::OatDexFile* oat_dex_file = oat_file->GetOatDexFile(filename, NULL, - kReasonLogging); - if (oat_dex_file != nullptr) { - uint32_t location_checksum; - // If its not possible to read the classes.dex assume up-to-date as we won't be able to - // compile it anyway. - if (!DexFile::GetChecksum(filename, &location_checksum, &error_msg)) { - if (kVerboseLogging) { - LOG(INFO) << "DexFile_isDexOptNeeded ignoring precompiled stripped file: " - << filename << ": " << error_msg; - } - return JNI_FALSE; - } - if (ClassLinker::VerifyOatFileChecksums(oat_file.get(), filename, location_checksum, - target_instruction_set, - &error_msg)) { - if (kVerboseLogging) { - LOG(INFO) << "DexFile_isDexOptNeeded precompiled file " << odex_filename - << " has an up-to-date checksum compared to " << filename; - } - return JNI_FALSE; - } else { - if (kVerboseLogging) { - LOG(INFO) << "DexFile_isDexOptNeeded found precompiled file " << odex_filename - << " with an out-of-date checksum compared to " << filename - << ": " << error_msg; - } - error_msg.clear(); - } - } - } - // Check if we have an oat file in the cache const std::string cache_dir(GetDalvikCacheOrDie(instruction_set)); const std::string cache_location( |