fix the redundant dependencies validation in fast verify
When in isolated compilation, the fast verify will validate dependencies
of all dex files when compile every single dex file, which lead to fast
verify not so "fast" when do isolated compilation.
Bug: 202563833
Change-Id: Ib62fe2a87ae973017ba4934511c5d2223fb1ad83
diff --git a/dex2oat/driver/compiler_driver.cc b/dex2oat/driver/compiler_driver.cc
index c8fd24b..5429430 100644
--- a/dex2oat/driver/compiler_driver.cc
+++ b/dex2oat/driver/compiler_driver.cc
@@ -1686,6 +1686,7 @@
if (!verifier_deps->ValidateDependencies(
soa.Self(),
class_loader,
+ dex_files,
&error_msg)) {
LOG(WARNING) << "Fast verification failed: " << error_msg;
return false;
diff --git a/dex2oat/verifier_deps_test.cc b/dex2oat/verifier_deps_test.cc
index 40b8c6b..62eae8a 100644
--- a/dex2oat/verifier_deps_test.cc
+++ b/dex2oat/verifier_deps_test.cc
@@ -326,6 +326,7 @@
return decoded_deps.ValidateDependencies(soa.Self(),
new_class_loader,
+ second_dex_files,
error_msg);
}
diff --git a/runtime/verifier/verifier_deps.cc b/runtime/verifier/verifier_deps.cc
index 7d00f73..db5fa0f 100644
--- a/runtime/verifier/verifier_deps.cc
+++ b/runtime/verifier/verifier_deps.cc
@@ -698,9 +698,11 @@
bool VerifierDeps::ValidateDependencies(Thread* self,
Handle<mirror::ClassLoader> class_loader,
+ const std::vector<const DexFile*>& dex_files,
/* out */ std::string* error_msg) const {
- for (const auto& entry : dex_deps_) {
- if (!VerifyDexFile(class_loader, *entry.first, *entry.second, self, error_msg)) {
+ for (const auto* dex_file : dex_files) {
+ const DexFileDeps* my_deps = GetDexFileDeps(*dex_file);
+ if (!VerifyDexFile(class_loader, *dex_file, *my_deps, self, error_msg)) {
return false;
}
}
diff --git a/runtime/verifier/verifier_deps.h b/runtime/verifier/verifier_deps.h
index 0c448f8..8e3b8a7 100644
--- a/runtime/verifier/verifier_deps.h
+++ b/runtime/verifier/verifier_deps.h
@@ -117,6 +117,7 @@
// Verify the encoded dependencies of this `VerifierDeps` are still valid.
bool ValidateDependencies(Thread* self,
Handle<mirror::ClassLoader> class_loader,
+ const std::vector<const DexFile*>& dex_files,
/* out */ std::string* error_msg) const
REQUIRES_SHARED(Locks::mutator_lock_);