diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-09-04 18:33:17 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2014-09-08 18:14:42 -0700 |
commit | 6bcae8fa93684af581d16400f360541d39e5b5e6 (patch) | |
tree | 88f99458a0141805acee3f730a0709542283698e /runtime/well_known_classes.cc | |
parent | 30cbbee37d9fcca1a39b3681434180102ee5251a (diff) | |
download | android_art-6bcae8fa93684af581d16400f360541d39e5b5e6.tar.gz android_art-6bcae8fa93684af581d16400f360541d39e5b5e6.tar.bz2 android_art-6bcae8fa93684af581d16400f360541d39e5b5e6.zip |
Add fast path for FindClass using the type dex file.
If we are using the PathClassLoader with a BootClassLoader
parent, we can handle the common case in the FindClass function
without needing to go back to java code.
Around 10% speedup measured of maps launch, could be noise due to
large variation of app launch times. Eliminates defineClassNative
from being anywhere near the top of sampling profiles.
Bug: 17397179
Bug: 16828525
(cherry picked from commit 8a39e7fe02e9a81853dc7a75cb50d9ece07a9b37)
Change-Id: I1f31de76c1b1a53e32173b1e61a59b0e2f267c98
Diffstat (limited to 'runtime/well_known_classes.cc')
-rw-r--r-- | runtime/well_known_classes.cc | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/runtime/well_known_classes.cc b/runtime/well_known_classes.cc index 3a6a72b841..7068a4d5b9 100644 --- a/runtime/well_known_classes.cc +++ b/runtime/well_known_classes.cc @@ -26,7 +26,11 @@ namespace art { jclass WellKnownClasses::com_android_dex_Dex; +jclass WellKnownClasses::dalvik_system_DexFile; +jclass WellKnownClasses::dalvik_system_DexPathList; +jclass WellKnownClasses::dalvik_system_DexPathList$Element; jclass WellKnownClasses::dalvik_system_PathClassLoader; +jclass WellKnownClasses::java_lang_BootClassLoader; jclass WellKnownClasses::java_lang_ClassLoader; jclass WellKnownClasses::java_lang_ClassNotFoundException; jclass WellKnownClasses::java_lang_Daemons; @@ -79,6 +83,10 @@ jmethodID WellKnownClasses::java_nio_DirectByteBuffer_init; jmethodID WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_broadcast; jmethodID WellKnownClasses::org_apache_harmony_dalvik_ddmc_DdmServer_dispatch; +jfieldID WellKnownClasses::dalvik_system_DexFile_cookie; +jfieldID WellKnownClasses::dalvik_system_PathClassLoader_pathList; +jfieldID WellKnownClasses::dalvik_system_DexPathList_dexElements; +jfieldID WellKnownClasses::dalvik_system_DexPathList$Element_dexFile; jfieldID WellKnownClasses::java_lang_Thread_daemon; jfieldID WellKnownClasses::java_lang_Thread_group; jfieldID WellKnownClasses::java_lang_Thread_lock; @@ -131,7 +139,11 @@ static jmethodID CachePrimitiveBoxingMethod(JNIEnv* env, char prim_name, const c void WellKnownClasses::Init(JNIEnv* env) { com_android_dex_Dex = CacheClass(env, "com/android/dex/Dex"); + dalvik_system_DexFile = CacheClass(env, "dalvik/system/DexFile"); + dalvik_system_DexPathList = CacheClass(env, "dalvik/system/DexPathList"); + dalvik_system_DexPathList$Element = CacheClass(env, "dalvik/system/DexPathList$Element"); dalvik_system_PathClassLoader = CacheClass(env, "dalvik/system/PathClassLoader"); + java_lang_BootClassLoader = CacheClass(env, "java/lang/BootClassLoader"); java_lang_ClassLoader = CacheClass(env, "java/lang/ClassLoader"); java_lang_ClassNotFoundException = CacheClass(env, "java/lang/ClassNotFoundException"); java_lang_Daemons = CacheClass(env, "java/lang/Daemons"); @@ -179,6 +191,10 @@ void WellKnownClasses::Init(JNIEnv* env) { org_apache_harmony_dalvik_ddmc_DdmServer_broadcast = CacheMethod(env, org_apache_harmony_dalvik_ddmc_DdmServer, true, "broadcast", "(I)V"); org_apache_harmony_dalvik_ddmc_DdmServer_dispatch = CacheMethod(env, org_apache_harmony_dalvik_ddmc_DdmServer, true, "dispatch", "(I[BII)Lorg/apache/harmony/dalvik/ddmc/Chunk;"); + dalvik_system_DexFile_cookie = CacheField(env, dalvik_system_DexFile, false, "mCookie", "J"); + dalvik_system_PathClassLoader_pathList = CacheField(env, dalvik_system_PathClassLoader, false, "pathList", "Ldalvik/system/DexPathList;"); + dalvik_system_DexPathList_dexElements = CacheField(env, dalvik_system_DexPathList, false, "dexElements", "[Ldalvik/system/DexPathList$Element;"); + dalvik_system_DexPathList$Element_dexFile = CacheField(env, dalvik_system_DexPathList$Element, false, "dexFile", "Ldalvik/system/DexFile;"); java_lang_Thread_daemon = CacheField(env, java_lang_Thread, false, "daemon", "Z"); java_lang_Thread_group = CacheField(env, java_lang_Thread, false, "group", "Ljava/lang/ThreadGroup;"); java_lang_Thread_lock = CacheField(env, java_lang_Thread, false, "lock", "Ljava/lang/Object;"); |