summaryrefslogtreecommitdiff
path: root/runtime/native/dalvik_system_VMRuntime.cc
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/native/dalvik_system_VMRuntime.cc')
-rw-r--r--runtime/native/dalvik_system_VMRuntime.cc29
1 files changed, 23 insertions, 6 deletions
diff --git a/runtime/native/dalvik_system_VMRuntime.cc b/runtime/native/dalvik_system_VMRuntime.cc
index c9deb526c2..6c820190b4 100644
--- a/runtime/native/dalvik_system_VMRuntime.cc
+++ b/runtime/native/dalvik_system_VMRuntime.cc
@@ -32,7 +32,6 @@ extern "C" void android_set_application_target_sdk_version(uint32_t version);
#include "class_linker-inl.h"
#include "common_throws.h"
#include "debugger.h"
-#include "dex/class_accessor-inl.h"
#include "dex/dex_file-inl.h"
#include "dex/dex_file_types.h"
#include "gc/accounting/card_table-inl.h"
@@ -574,12 +573,30 @@ static void VMRuntime_preloadDexCaches(JNIEnv* env, jobject) {
}
if (kPreloadDexCachesFieldsAndMethods) {
- for (ClassAccessor accessor : dex_file->GetClasses()) {
- for (const ClassAccessor::Field& field : accessor.GetFields()) {
- PreloadDexCachesResolveField(dex_cache, field.GetIndex(), field.IsStatic());
+ for (size_t class_def_index = 0;
+ class_def_index < dex_file->NumClassDefs();
+ class_def_index++) {
+ const DexFile::ClassDef& class_def = dex_file->GetClassDef(class_def_index);
+ const uint8_t* class_data = dex_file->GetClassData(class_def);
+ if (class_data == nullptr) {
+ continue;
}
- for (const ClassAccessor::Method& method : accessor.GetMethods()) {
- PreloadDexCachesResolveMethod(dex_cache, method.GetIndex());
+ ClassDataItemIterator it(*dex_file, class_data);
+ for (; it.HasNextStaticField(); it.Next()) {
+ uint32_t field_idx = it.GetMemberIndex();
+ PreloadDexCachesResolveField(dex_cache, field_idx, true);
+ }
+ for (; it.HasNextInstanceField(); it.Next()) {
+ uint32_t field_idx = it.GetMemberIndex();
+ PreloadDexCachesResolveField(dex_cache, field_idx, false);
+ }
+ for (; it.HasNextDirectMethod(); it.Next()) {
+ uint32_t method_idx = it.GetMemberIndex();
+ PreloadDexCachesResolveMethod(dex_cache, method_idx);
+ }
+ for (; it.HasNextVirtualMethod(); it.Next()) {
+ uint32_t method_idx = it.GetMemberIndex();
+ PreloadDexCachesResolveMethod(dex_cache, method_idx);
}
}
}