From ec7862283dd49f5a58d0ac45960ce27c2f7671b8 Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Tue, 20 Dec 2016 16:24:13 +0000 Subject: Hash-based dex cache type array. Test: m test-art-host (Interpreter, Optimizing, JIT) Test: m test-art-target on Nexus 6P (Interpreter, Optimizing, JIT) Test: Nexus 6P boots Test: m valgrind-test-art-host Bug: 30627598 Bug: 34659969 Bug: 30419309 Change-Id: Ic00eda89e58088a3573fc9ec0ad04c0e69e161d1 --- runtime/native/java_lang_DexCache.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'runtime/native/java_lang_DexCache.cc') diff --git a/runtime/native/java_lang_DexCache.cc b/runtime/native/java_lang_DexCache.cc index f1c350f23c..0b667fec45 100644 --- a/runtime/native/java_lang_DexCache.cc +++ b/runtime/native/java_lang_DexCache.cc @@ -53,7 +53,7 @@ static jobject DexCache_getDexNative(JNIEnv* env, jobject javaDexCache) { static jobject DexCache_getResolvedType(JNIEnv* env, jobject javaDexCache, jint type_index) { ScopedFastNativeObjectAccess soa(env); ObjPtr dex_cache = soa.Decode(javaDexCache); - CHECK_LT(static_cast(type_index), dex_cache->NumResolvedTypes()); + CHECK_LT(static_cast(type_index), dex_cache->GetDexFile()->NumTypeIds()); return soa.AddLocalReference(dex_cache->GetResolvedType(dex::TypeIndex(type_index))); } @@ -69,8 +69,11 @@ static void DexCache_setResolvedType(JNIEnv* env, jobject javaDexCache, jint typ jobject type) { ScopedFastNativeObjectAccess soa(env); ObjPtr dex_cache = soa.Decode(javaDexCache); - CHECK_LT(static_cast(type_index), dex_cache->NumResolvedTypes()); - dex_cache->SetResolvedType(dex::TypeIndex(type_index), soa.Decode(type)); + CHECK_LT(static_cast(type_index), dex_cache->GetDexFile()->NumTypeIds()); + ObjPtr t = soa.Decode(type); + if (t != nullptr) { + dex_cache->SetResolvedType(dex::TypeIndex(type_index), t); + } } static void DexCache_setResolvedString(JNIEnv* env, jobject javaDexCache, jint string_index, @@ -78,7 +81,10 @@ static void DexCache_setResolvedString(JNIEnv* env, jobject javaDexCache, jint s ScopedFastNativeObjectAccess soa(env); ObjPtr dex_cache = soa.Decode(javaDexCache); CHECK_LT(static_cast(string_index), dex_cache->GetDexFile()->NumStringIds()); - dex_cache->SetResolvedString(dex::StringIndex(string_index), soa.Decode(string)); + ObjPtr s = soa.Decode(string); + if (s != nullptr) { + dex_cache->SetResolvedString(dex::StringIndex(string_index), s); + } } static JNINativeMethod gMethods[] = { -- cgit v1.2.3-59-g8ed1b