diff options
author | 2017-02-16 16:13:17 -0800 | |
---|---|---|
committer | 2017-02-21 11:40:51 -0800 | |
commit | 3b6f440dbd066f03a737da6d292074f47b3fbc29 (patch) | |
tree | af0da4bdea7ff689929c8e23e1eaf6361dfc3ee8 | |
parent | 5c19b373ae45ec6d67b41917af63cac8c3ebbe89 (diff) |
jni: Switch to @FastNative for all JNI functions. Deprecate !bang JNI.
Switches all (248) methods that previously used !bang JNI in art/libcore
to all use @FastNative.
Also deprecate !bang JNI since nothing in Android seems to (or should
be) using it anymore.
This measures to be a 3% startup time improvement in system_server.
Test: make test-art-host
Bug: 34955272
Change-Id: I0881f401c7660c79f275235362777bfa58241deb
30 files changed, 219 insertions, 218 deletions
diff --git a/build/Android.bp b/build/Android.bp index b1553c759c..6c9f1d4dd1 100644 --- a/build/Android.bp +++ b/build/Android.bp @@ -146,6 +146,7 @@ art_global_defaults { "external/valgrind", "external/vixl/src", "external/zlib", + "libnativehelper/platform_include" ], tidy_checks: [ diff --git a/runtime/jni_internal.cc b/runtime/jni_internal.cc index 547b5b8a2d..5418d3569e 100644 --- a/runtime/jni_internal.cc +++ b/runtime/jni_internal.cc @@ -2265,7 +2265,18 @@ class JNI { VLOG(jni) << "[Registering JNI native method " << m->PrettyMethod() << "]"; - is_fast = is_fast || m->IsFastNative(); // Merge with @FastNative state. + if (UNLIKELY(is_fast)) { + // There are a few reasons to switch: + // 1) We don't support !bang JNI anymore, it will turn to a hard error later. + // 2) @FastNative is actually faster. At least 1.5x faster than !bang JNI. + // and switching is super easy, remove ! in C code, add annotation in .java code. + // 3) Good chance of hitting DCHECK failures in ScopedFastNativeObjectAccess + // since that checks for presence of @FastNative and not for ! in the descriptor. + LOG(WARNING) << "!bang JNI is deprecated. Switch to @FastNative for " << m->PrettyMethod(); + is_fast = false; + // TODO: make this a hard register error in the future. + } + m->RegisterNative(fnPtr, is_fast); } return JNI_OK; diff --git a/runtime/jni_internal.h b/runtime/jni_internal.h index b3837c409d..580a42bcef 100644 --- a/runtime/jni_internal.h +++ b/runtime/jni_internal.h @@ -19,20 +19,10 @@ #include <jni.h> #include <iosfwd> +#include "nativehelper/jni_macros.h" #include "base/macros.h" -#ifndef NATIVE_METHOD -#define NATIVE_METHOD(className, functionName, signature) \ - { #functionName, signature, reinterpret_cast<void*>(className ## _ ## functionName) } -#endif - -// TODO: Can we do a better job of supporting overloading ? -#ifndef OVERLOADED_NATIVE_METHOD -#define OVERLOADED_NATIVE_METHOD(className, functionName, signature, identifier) \ - { #functionName, signature, reinterpret_cast<void*>(className ## _ ## identifier) } -#endif - #define REGISTER_NATIVE_METHODS(jni_class_name) \ RegisterNativeMethods(env, jni_class_name, gMethods, arraysize(gMethods)) diff --git a/runtime/native/dalvik_system_VMDebug.cc b/runtime/native/dalvik_system_VMDebug.cc index 0d24587998..f6a73a8660 100644 --- a/runtime/native/dalvik_system_VMDebug.cc +++ b/runtime/native/dalvik_system_VMDebug.cc @@ -537,14 +537,14 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(VMDebug, getAllocCount, "(I)I"), NATIVE_METHOD(VMDebug, getHeapSpaceStats, "([J)V"), NATIVE_METHOD(VMDebug, getInstructionCount, "([I)V"), - NATIVE_METHOD(VMDebug, getLoadedClassCount, "!()I"), + FAST_NATIVE_METHOD(VMDebug, getLoadedClassCount, "()I"), NATIVE_METHOD(VMDebug, getVmFeatureList, "()[Ljava/lang/String;"), NATIVE_METHOD(VMDebug, infopoint, "(I)V"), - NATIVE_METHOD(VMDebug, isDebuggerConnected, "!()Z"), - NATIVE_METHOD(VMDebug, isDebuggingEnabled, "!()Z"), + FAST_NATIVE_METHOD(VMDebug, isDebuggerConnected, "()Z"), + FAST_NATIVE_METHOD(VMDebug, isDebuggingEnabled, "()Z"), NATIVE_METHOD(VMDebug, getMethodTracingMode, "()I"), - NATIVE_METHOD(VMDebug, lastDebuggerActivity, "!()J"), - NATIVE_METHOD(VMDebug, printLoadedClasses, "!(I)V"), + FAST_NATIVE_METHOD(VMDebug, lastDebuggerActivity, "()J"), + FAST_NATIVE_METHOD(VMDebug, printLoadedClasses, "(I)V"), NATIVE_METHOD(VMDebug, resetAllocCount, "(I)V"), NATIVE_METHOD(VMDebug, resetInstructionCount, "()V"), NATIVE_METHOD(VMDebug, startAllocCounting, "()V"), @@ -557,7 +557,7 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(VMDebug, stopEmulatorTracing, "()V"), NATIVE_METHOD(VMDebug, stopInstructionCounting, "()V"), NATIVE_METHOD(VMDebug, stopMethodTracing, "()V"), - NATIVE_METHOD(VMDebug, threadCpuTimeNanos, "!()J"), + FAST_NATIVE_METHOD(VMDebug, threadCpuTimeNanos, "()J"), NATIVE_METHOD(VMDebug, getRuntimeStatInternal, "(I)Ljava/lang/String;"), NATIVE_METHOD(VMDebug, getRuntimeStatsInternal, "()[Ljava/lang/String;"), NATIVE_METHOD(VMDebug, attachAgent, "(Ljava/lang/String;)V"), diff --git a/runtime/native/dalvik_system_VMRuntime.cc b/runtime/native/dalvik_system_VMRuntime.cc index 6bfccdc8fb..efc42fdac7 100644 --- a/runtime/native/dalvik_system_VMRuntime.cc +++ b/runtime/native/dalvik_system_VMRuntime.cc @@ -642,7 +642,7 @@ static jboolean VMRuntime_didPruneDalvikCache(JNIEnv* env ATTRIBUTE_UNUSED, } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(VMRuntime, addressOf, "!(Ljava/lang/Object;)J"), + FAST_NATIVE_METHOD(VMRuntime, addressOf, "(Ljava/lang/Object;)J"), NATIVE_METHOD(VMRuntime, bootClassPath, "()Ljava/lang/String;"), NATIVE_METHOD(VMRuntime, clampGrowthLimit, "()V"), NATIVE_METHOD(VMRuntime, classPath, "()Ljava/lang/String;"), @@ -650,11 +650,11 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(VMRuntime, concurrentGC, "()V"), NATIVE_METHOD(VMRuntime, disableJitCompilation, "()V"), NATIVE_METHOD(VMRuntime, getTargetHeapUtilization, "()F"), - NATIVE_METHOD(VMRuntime, isDebuggerActive, "!()Z"), - NATIVE_METHOD(VMRuntime, isNativeDebuggable, "!()Z"), + FAST_NATIVE_METHOD(VMRuntime, isDebuggerActive, "()Z"), + FAST_NATIVE_METHOD(VMRuntime, isNativeDebuggable, "()Z"), NATIVE_METHOD(VMRuntime, nativeSetTargetHeapUtilization, "(F)V"), - NATIVE_METHOD(VMRuntime, newNonMovableArray, "!(Ljava/lang/Class;I)Ljava/lang/Object;"), - NATIVE_METHOD(VMRuntime, newUnpaddedArray, "!(Ljava/lang/Class;I)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(VMRuntime, newNonMovableArray, "(Ljava/lang/Class;I)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(VMRuntime, newUnpaddedArray, "(Ljava/lang/Class;I)Ljava/lang/Object;"), NATIVE_METHOD(VMRuntime, properties, "()[Ljava/lang/String;"), NATIVE_METHOD(VMRuntime, setTargetSdkVersionNative, "(I)V"), NATIVE_METHOD(VMRuntime, registerNativeAllocation, "(I)V"), @@ -671,8 +671,8 @@ static JNINativeMethod gMethods[] = { NATIVE_METHOD(VMRuntime, vmVersion, "()Ljava/lang/String;"), NATIVE_METHOD(VMRuntime, vmLibrary, "()Ljava/lang/String;"), NATIVE_METHOD(VMRuntime, vmInstructionSet, "()Ljava/lang/String;"), - NATIVE_METHOD(VMRuntime, is64Bit, "!()Z"), - NATIVE_METHOD(VMRuntime, isCheckJniEnabled, "!()Z"), + FAST_NATIVE_METHOD(VMRuntime, is64Bit, "()Z"), + FAST_NATIVE_METHOD(VMRuntime, isCheckJniEnabled, "()Z"), NATIVE_METHOD(VMRuntime, preloadDexCaches, "()V"), NATIVE_METHOD(VMRuntime, registerAppInfo, "(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V"), diff --git a/runtime/native/dalvik_system_VMStack.cc b/runtime/native/dalvik_system_VMStack.cc index be6f7f2204..0dfafa4a7c 100644 --- a/runtime/native/dalvik_system_VMStack.cc +++ b/runtime/native/dalvik_system_VMStack.cc @@ -139,11 +139,11 @@ static jobjectArray VMStack_getThreadStackTrace(JNIEnv* env, jclass, jobject jav } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(VMStack, fillStackTraceElements, "!(Ljava/lang/Thread;[Ljava/lang/StackTraceElement;)I"), - NATIVE_METHOD(VMStack, getCallingClassLoader, "!()Ljava/lang/ClassLoader;"), - NATIVE_METHOD(VMStack, getClosestUserClassLoader, "!()Ljava/lang/ClassLoader;"), - NATIVE_METHOD(VMStack, getStackClass2, "!()Ljava/lang/Class;"), - NATIVE_METHOD(VMStack, getThreadStackTrace, "!(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement;"), + FAST_NATIVE_METHOD(VMStack, fillStackTraceElements, "(Ljava/lang/Thread;[Ljava/lang/StackTraceElement;)I"), + FAST_NATIVE_METHOD(VMStack, getCallingClassLoader, "()Ljava/lang/ClassLoader;"), + FAST_NATIVE_METHOD(VMStack, getClosestUserClassLoader, "()Ljava/lang/ClassLoader;"), + FAST_NATIVE_METHOD(VMStack, getStackClass2, "()Ljava/lang/Class;"), + FAST_NATIVE_METHOD(VMStack, getThreadStackTrace, "(Ljava/lang/Thread;)[Ljava/lang/StackTraceElement;"), }; void register_dalvik_system_VMStack(JNIEnv* env) { diff --git a/runtime/native/java_lang_Class.cc b/runtime/native/java_lang_Class.cc index 256787b2a1..c8431c0519 100644 --- a/runtime/native/java_lang_Class.cc +++ b/runtime/native/java_lang_Class.cc @@ -713,36 +713,36 @@ static jobject Class_newInstance(JNIEnv* env, jobject javaThis) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Class, classForName, - "!(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;"), - NATIVE_METHOD(Class, getDeclaredAnnotation, - "!(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Class, getDeclaredAnnotations, "!()[Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Class, getDeclaredClasses, "!()[Ljava/lang/Class;"), - NATIVE_METHOD(Class, getDeclaredConstructorInternal, - "!([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"), - NATIVE_METHOD(Class, getDeclaredConstructorsInternal, "!(Z)[Ljava/lang/reflect/Constructor;"), - NATIVE_METHOD(Class, getDeclaredField, "!(Ljava/lang/String;)Ljava/lang/reflect/Field;"), - NATIVE_METHOD(Class, getPublicFieldRecursive, "!(Ljava/lang/String;)Ljava/lang/reflect/Field;"), - NATIVE_METHOD(Class, getDeclaredFields, "!()[Ljava/lang/reflect/Field;"), - NATIVE_METHOD(Class, getDeclaredFieldsUnchecked, "!(Z)[Ljava/lang/reflect/Field;"), - NATIVE_METHOD(Class, getDeclaredMethodInternal, - "!(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"), - NATIVE_METHOD(Class, getDeclaredMethodsUnchecked, - "!(Z)[Ljava/lang/reflect/Method;"), - NATIVE_METHOD(Class, getDeclaringClass, "!()Ljava/lang/Class;"), - NATIVE_METHOD(Class, getEnclosingClass, "!()Ljava/lang/Class;"), - NATIVE_METHOD(Class, getEnclosingConstructorNative, "!()Ljava/lang/reflect/Constructor;"), - NATIVE_METHOD(Class, getEnclosingMethodNative, "!()Ljava/lang/reflect/Method;"), - NATIVE_METHOD(Class, getInnerClassFlags, "!(I)I"), - NATIVE_METHOD(Class, getInnerClassName, "!()Ljava/lang/String;"), - NATIVE_METHOD(Class, getNameNative, "!()Ljava/lang/String;"), - NATIVE_METHOD(Class, getProxyInterfaces, "!()[Ljava/lang/Class;"), - NATIVE_METHOD(Class, getPublicDeclaredFields, "!()[Ljava/lang/reflect/Field;"), - NATIVE_METHOD(Class, getSignatureAnnotation, "!()[Ljava/lang/String;"), - NATIVE_METHOD(Class, isAnonymousClass, "!()Z"), - NATIVE_METHOD(Class, isDeclaredAnnotationPresent, "!(Ljava/lang/Class;)Z"), - NATIVE_METHOD(Class, newInstance, "!()Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Class, classForName, + "(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Class, getDeclaredAnnotation, + "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Class, getDeclaredAnnotations, "()[Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Class, getDeclaredClasses, "()[Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Class, getDeclaredConstructorInternal, + "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;"), + FAST_NATIVE_METHOD(Class, getDeclaredConstructorsInternal, "(Z)[Ljava/lang/reflect/Constructor;"), + FAST_NATIVE_METHOD(Class, getDeclaredField, "(Ljava/lang/String;)Ljava/lang/reflect/Field;"), + FAST_NATIVE_METHOD(Class, getPublicFieldRecursive, "(Ljava/lang/String;)Ljava/lang/reflect/Field;"), + FAST_NATIVE_METHOD(Class, getDeclaredFields, "()[Ljava/lang/reflect/Field;"), + FAST_NATIVE_METHOD(Class, getDeclaredFieldsUnchecked, "(Z)[Ljava/lang/reflect/Field;"), + FAST_NATIVE_METHOD(Class, getDeclaredMethodInternal, + "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;"), + FAST_NATIVE_METHOD(Class, getDeclaredMethodsUnchecked, + "(Z)[Ljava/lang/reflect/Method;"), + FAST_NATIVE_METHOD(Class, getDeclaringClass, "()Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Class, getEnclosingClass, "()Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Class, getEnclosingConstructorNative, "()Ljava/lang/reflect/Constructor;"), + FAST_NATIVE_METHOD(Class, getEnclosingMethodNative, "()Ljava/lang/reflect/Method;"), + FAST_NATIVE_METHOD(Class, getInnerClassFlags, "(I)I"), + FAST_NATIVE_METHOD(Class, getInnerClassName, "()Ljava/lang/String;"), + FAST_NATIVE_METHOD(Class, getNameNative, "()Ljava/lang/String;"), + FAST_NATIVE_METHOD(Class, getProxyInterfaces, "()[Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Class, getPublicDeclaredFields, "()[Ljava/lang/reflect/Field;"), + FAST_NATIVE_METHOD(Class, getSignatureAnnotation, "()[Ljava/lang/String;"), + FAST_NATIVE_METHOD(Class, isAnonymousClass, "()Z"), + FAST_NATIVE_METHOD(Class, isDeclaredAnnotationPresent, "(Ljava/lang/Class;)Z"), + FAST_NATIVE_METHOD(Class, newInstance, "()Ljava/lang/Object;"), }; void register_java_lang_Class(JNIEnv* env) { diff --git a/runtime/native/java_lang_DexCache.cc b/runtime/native/java_lang_DexCache.cc index ee6dda56a5..8fda4dfaaf 100644 --- a/runtime/native/java_lang_DexCache.cc +++ b/runtime/native/java_lang_DexCache.cc @@ -95,11 +95,11 @@ static void DexCache_setResolvedString(JNIEnv* env, jobject javaDexCache, jint s } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(DexCache, getDexNative, "!()Lcom/android/dex/Dex;"), - NATIVE_METHOD(DexCache, getResolvedType, "!(I)Ljava/lang/Class;"), - NATIVE_METHOD(DexCache, getResolvedString, "!(I)Ljava/lang/String;"), - NATIVE_METHOD(DexCache, setResolvedType, "!(ILjava/lang/Class;)V"), - NATIVE_METHOD(DexCache, setResolvedString, "!(ILjava/lang/String;)V"), + FAST_NATIVE_METHOD(DexCache, getDexNative, "()Lcom/android/dex/Dex;"), + FAST_NATIVE_METHOD(DexCache, getResolvedType, "(I)Ljava/lang/Class;"), + FAST_NATIVE_METHOD(DexCache, getResolvedString, "(I)Ljava/lang/String;"), + FAST_NATIVE_METHOD(DexCache, setResolvedType, "(ILjava/lang/Class;)V"), + FAST_NATIVE_METHOD(DexCache, setResolvedString, "(ILjava/lang/String;)V"), }; void register_java_lang_DexCache(JNIEnv* env) { diff --git a/runtime/native/java_lang_Object.cc b/runtime/native/java_lang_Object.cc index 6493865c99..6989244280 100644 --- a/runtime/native/java_lang_Object.cc +++ b/runtime/native/java_lang_Object.cc @@ -20,7 +20,6 @@ #include "mirror/object-inl.h" #include "scoped_fast_native_object_access-inl.h" - namespace art { static jobject Object_internalClone(JNIEnv* env, jobject java_this) { @@ -50,11 +49,11 @@ static void Object_waitJI(JNIEnv* env, jobject java_this, jlong ms, jint ns) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Object, internalClone, "!()Ljava/lang/Object;"), - NATIVE_METHOD(Object, notify, "!()V"), - NATIVE_METHOD(Object, notifyAll, "!()V"), - OVERLOADED_NATIVE_METHOD(Object, wait, "!()V", wait), - OVERLOADED_NATIVE_METHOD(Object, wait, "!(JI)V", waitJI), + FAST_NATIVE_METHOD(Object, internalClone, "()Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Object, notify, "()V"), + FAST_NATIVE_METHOD(Object, notifyAll, "()V"), + OVERLOADED_FAST_NATIVE_METHOD(Object, wait, "()V", wait), + OVERLOADED_FAST_NATIVE_METHOD(Object, wait, "(JI)V", waitJI), }; void register_java_lang_Object(JNIEnv* env) { diff --git a/runtime/native/java_lang_String.cc b/runtime/native/java_lang_String.cc index 1357338464..2e561ffa46 100644 --- a/runtime/native/java_lang_String.cc +++ b/runtime/native/java_lang_String.cc @@ -113,15 +113,15 @@ static jcharArray String_toCharArray(JNIEnv* env, jobject java_this) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(String, charAt, "!(I)C"), - NATIVE_METHOD(String, compareTo, "!(Ljava/lang/String;)I"), - NATIVE_METHOD(String, concat, "!(Ljava/lang/String;)Ljava/lang/String;"), - NATIVE_METHOD(String, doReplace, "!(CC)Ljava/lang/String;"), - NATIVE_METHOD(String, fastIndexOf, "!(II)I"), - NATIVE_METHOD(String, fastSubstring, "!(II)Ljava/lang/String;"), - NATIVE_METHOD(String, getCharsNoCheck, "!(II[CI)V"), - NATIVE_METHOD(String, intern, "!()Ljava/lang/String;"), - NATIVE_METHOD(String, toCharArray, "!()[C"), + FAST_NATIVE_METHOD(String, charAt, "(I)C"), + FAST_NATIVE_METHOD(String, compareTo, "(Ljava/lang/String;)I"), + FAST_NATIVE_METHOD(String, concat, "(Ljava/lang/String;)Ljava/lang/String;"), + FAST_NATIVE_METHOD(String, doReplace, "(CC)Ljava/lang/String;"), + FAST_NATIVE_METHOD(String, fastIndexOf, "(II)I"), + FAST_NATIVE_METHOD(String, fastSubstring, "(II)Ljava/lang/String;"), + FAST_NATIVE_METHOD(String, getCharsNoCheck, "(II[CI)V"), + FAST_NATIVE_METHOD(String, intern, "()Ljava/lang/String;"), + FAST_NATIVE_METHOD(String, toCharArray, "()[C"), }; void register_java_lang_String(JNIEnv* env) { diff --git a/runtime/native/java_lang_StringFactory.cc b/runtime/native/java_lang_StringFactory.cc index e0738a49b9..ec3c7c2fdf 100644 --- a/runtime/native/java_lang_StringFactory.cc +++ b/runtime/native/java_lang_StringFactory.cc @@ -87,9 +87,9 @@ static jstring StringFactory_newStringFromString(JNIEnv* env, jclass, jstring to } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(StringFactory, newStringFromBytes, "!([BIII)Ljava/lang/String;"), - NATIVE_METHOD(StringFactory, newStringFromChars, "!(II[C)Ljava/lang/String;"), - NATIVE_METHOD(StringFactory, newStringFromString, "!(Ljava/lang/String;)Ljava/lang/String;"), + FAST_NATIVE_METHOD(StringFactory, newStringFromBytes, "([BIII)Ljava/lang/String;"), + FAST_NATIVE_METHOD(StringFactory, newStringFromChars, "(II[C)Ljava/lang/String;"), + FAST_NATIVE_METHOD(StringFactory, newStringFromString, "(Ljava/lang/String;)Ljava/lang/String;"), }; void register_java_lang_StringFactory(JNIEnv* env) { diff --git a/runtime/native/java_lang_System.cc b/runtime/native/java_lang_System.cc index 7f8da80ff8..d7c9cd07b5 100644 --- a/runtime/native/java_lang_System.cc +++ b/runtime/native/java_lang_System.cc @@ -237,16 +237,16 @@ static jint System_identityHashCode(JNIEnv* env, jclass, jobject javaObject) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(System, arraycopy, "!(Ljava/lang/Object;ILjava/lang/Object;II)V"), - NATIVE_METHOD(System, arraycopyCharUnchecked, "!([CI[CII)V"), - NATIVE_METHOD(System, arraycopyByteUnchecked, "!([BI[BII)V"), - NATIVE_METHOD(System, arraycopyShortUnchecked, "!([SI[SII)V"), - NATIVE_METHOD(System, arraycopyIntUnchecked, "!([II[III)V"), - NATIVE_METHOD(System, arraycopyLongUnchecked, "!([JI[JII)V"), - NATIVE_METHOD(System, arraycopyFloatUnchecked, "!([FI[FII)V"), - NATIVE_METHOD(System, arraycopyDoubleUnchecked, "!([DI[DII)V"), - NATIVE_METHOD(System, arraycopyBooleanUnchecked, "!([ZI[ZII)V"), - NATIVE_METHOD(System, identityHashCode, "!(Ljava/lang/Object;)I"), + FAST_NATIVE_METHOD(System, arraycopy, "(Ljava/lang/Object;ILjava/lang/Object;II)V"), + FAST_NATIVE_METHOD(System, arraycopyCharUnchecked, "([CI[CII)V"), + FAST_NATIVE_METHOD(System, arraycopyByteUnchecked, "([BI[BII)V"), + FAST_NATIVE_METHOD(System, arraycopyShortUnchecked, "([SI[SII)V"), + FAST_NATIVE_METHOD(System, arraycopyIntUnchecked, "([II[III)V"), + FAST_NATIVE_METHOD(System, arraycopyLongUnchecked, "([JI[JII)V"), + FAST_NATIVE_METHOD(System, arraycopyFloatUnchecked, "([FI[FII)V"), + FAST_NATIVE_METHOD(System, arraycopyDoubleUnchecked, "([DI[DII)V"), + FAST_NATIVE_METHOD(System, arraycopyBooleanUnchecked, "([ZI[ZII)V"), + FAST_NATIVE_METHOD(System, identityHashCode, "(Ljava/lang/Object;)I"), }; void register_java_lang_System(JNIEnv* env) { diff --git a/runtime/native/java_lang_Thread.cc b/runtime/native/java_lang_Thread.cc index 195091f8ab..346bd30b9d 100644 --- a/runtime/native/java_lang_Thread.cc +++ b/runtime/native/java_lang_Thread.cc @@ -187,16 +187,16 @@ static void Thread_yield(JNIEnv*, jobject) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Thread, currentThread, "!()Ljava/lang/Thread;"), - NATIVE_METHOD(Thread, interrupted, "!()Z"), - NATIVE_METHOD(Thread, isInterrupted, "!()Z"), + FAST_NATIVE_METHOD(Thread, currentThread, "()Ljava/lang/Thread;"), + FAST_NATIVE_METHOD(Thread, interrupted, "()Z"), + FAST_NATIVE_METHOD(Thread, isInterrupted, "()Z"), NATIVE_METHOD(Thread, nativeCreate, "(Ljava/lang/Thread;JZ)V"), NATIVE_METHOD(Thread, nativeGetStatus, "(Z)I"), NATIVE_METHOD(Thread, nativeHoldsLock, "(Ljava/lang/Object;)Z"), - NATIVE_METHOD(Thread, nativeInterrupt, "!()V"), + FAST_NATIVE_METHOD(Thread, nativeInterrupt, "()V"), NATIVE_METHOD(Thread, nativeSetName, "(Ljava/lang/String;)V"), NATIVE_METHOD(Thread, nativeSetPriority, "(I)V"), - NATIVE_METHOD(Thread, sleep, "!(Ljava/lang/Object;JI)V"), + FAST_NATIVE_METHOD(Thread, sleep, "(Ljava/lang/Object;JI)V"), NATIVE_METHOD(Thread, yield, "()V"), }; diff --git a/runtime/native/java_lang_Throwable.cc b/runtime/native/java_lang_Throwable.cc index ff3e044c9b..654b8a8e5c 100644 --- a/runtime/native/java_lang_Throwable.cc +++ b/runtime/native/java_lang_Throwable.cc @@ -36,8 +36,8 @@ static jobjectArray Throwable_nativeGetStackTrace(JNIEnv* env, jclass, jobject j } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Throwable, nativeFillInStackTrace, "!()Ljava/lang/Object;"), - NATIVE_METHOD(Throwable, nativeGetStackTrace, "!(Ljava/lang/Object;)[Ljava/lang/StackTraceElement;"), + FAST_NATIVE_METHOD(Throwable, nativeFillInStackTrace, "()Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Throwable, nativeGetStackTrace, "(Ljava/lang/Object;)[Ljava/lang/StackTraceElement;"), }; void register_java_lang_Throwable(JNIEnv* env) { diff --git a/runtime/native/java_lang_VMClassLoader.cc b/runtime/native/java_lang_VMClassLoader.cc index a8fa7db688..54ab8615c0 100644 --- a/runtime/native/java_lang_VMClassLoader.cc +++ b/runtime/native/java_lang_VMClassLoader.cc @@ -136,7 +136,7 @@ static jobjectArray VMClassLoader_getBootClassPathEntries(JNIEnv* env, jclass) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(VMClassLoader, findLoadedClass, "!(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;"), + FAST_NATIVE_METHOD(VMClassLoader, findLoadedClass, "(Ljava/lang/ClassLoader;Ljava/lang/String;)Ljava/lang/Class;"), NATIVE_METHOD(VMClassLoader, getBootClassPathEntries, "()[Ljava/lang/String;"), }; diff --git a/runtime/native/java_lang_ref_FinalizerReference.cc b/runtime/native/java_lang_ref_FinalizerReference.cc index ecafd0e241..afedc5e456 100644 --- a/runtime/native/java_lang_ref_FinalizerReference.cc +++ b/runtime/native/java_lang_ref_FinalizerReference.cc @@ -40,8 +40,8 @@ static jobject FinalizerReference_getReferent(JNIEnv* env, jobject javaThis) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(FinalizerReference, makeCircularListIfUnenqueued, "!()Z"), - NATIVE_METHOD(FinalizerReference, getReferent, "!()Ljava/lang/Object;"), + FAST_NATIVE_METHOD(FinalizerReference, makeCircularListIfUnenqueued, "()Z"), + FAST_NATIVE_METHOD(FinalizerReference, getReferent, "()Ljava/lang/Object;"), }; void register_java_lang_ref_FinalizerReference(JNIEnv* env) { diff --git a/runtime/native/java_lang_ref_Reference.cc b/runtime/native/java_lang_ref_Reference.cc index c778068bc4..b1cb2f2e70 100644 --- a/runtime/native/java_lang_ref_Reference.cc +++ b/runtime/native/java_lang_ref_Reference.cc @@ -40,8 +40,8 @@ static void Reference_clearReferent(JNIEnv* env, jobject javaThis) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Reference, getReferent, "!()Ljava/lang/Object;"), - NATIVE_METHOD(Reference, clearReferent, "!()V"), + FAST_NATIVE_METHOD(Reference, getReferent, "()Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Reference, clearReferent, "()V"), }; void register_java_lang_ref_Reference(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Array.cc b/runtime/native/java_lang_reflect_Array.cc index d827f818c5..54c21096d3 100644 --- a/runtime/native/java_lang_reflect_Array.cc +++ b/runtime/native/java_lang_reflect_Array.cc @@ -72,8 +72,8 @@ static jobject Array_createObjectArray(JNIEnv* env, jclass, jclass javaElementCl } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Array, createMultiArray, "!(Ljava/lang/Class;[I)Ljava/lang/Object;"), - NATIVE_METHOD(Array, createObjectArray, "!(Ljava/lang/Class;I)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Array, createMultiArray, "(Ljava/lang/Class;[I)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Array, createObjectArray, "(Ljava/lang/Class;I)Ljava/lang/Object;"), }; void register_java_lang_reflect_Array(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Constructor.cc b/runtime/native/java_lang_reflect_Constructor.cc index 66a5359132..fb780463ff 100644 --- a/runtime/native/java_lang_reflect_Constructor.cc +++ b/runtime/native/java_lang_reflect_Constructor.cc @@ -124,9 +124,9 @@ static jobject Constructor_newInstanceFromSerialization(JNIEnv* env, jclass unus } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Constructor, getExceptionTypes, "!()[Ljava/lang/Class;"), - NATIVE_METHOD(Constructor, newInstance0, "!([Ljava/lang/Object;)Ljava/lang/Object;"), - NATIVE_METHOD(Constructor, newInstanceFromSerialization, "!(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Constructor, getExceptionTypes, "()[Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Constructor, newInstance0, "([Ljava/lang/Object;)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Constructor, newInstanceFromSerialization, "(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object;"), }; void register_java_lang_reflect_Constructor(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Executable.cc b/runtime/native/java_lang_reflect_Executable.cc index 2a3942829f..bc23bedc77 100644 --- a/runtime/native/java_lang_reflect_Executable.cc +++ b/runtime/native/java_lang_reflect_Executable.cc @@ -195,14 +195,14 @@ static jboolean Executable_isAnnotationPresentNative(JNIEnv* env, } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Executable, getAnnotationNative, - "!(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Executable, getDeclaredAnnotationsNative, "!()[Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Executable, getParameterAnnotationsNative, - "!()[[Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Executable, getParameters0, "!()[Ljava/lang/reflect/Parameter;"), - NATIVE_METHOD(Executable, getSignatureAnnotation, "!()[Ljava/lang/String;"), - NATIVE_METHOD(Executable, isAnnotationPresentNative, "!(Ljava/lang/Class;)Z"), + FAST_NATIVE_METHOD(Executable, getAnnotationNative, + "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Executable, getDeclaredAnnotationsNative, "()[Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Executable, getParameterAnnotationsNative, + "()[[Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Executable, getParameters0, "()[Ljava/lang/reflect/Parameter;"), + FAST_NATIVE_METHOD(Executable, getSignatureAnnotation, "()[Ljava/lang/String;"), + FAST_NATIVE_METHOD(Executable, isAnnotationPresentNative, "(Ljava/lang/Class;)Z"), }; void register_java_lang_reflect_Executable(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Field.cc b/runtime/native/java_lang_reflect_Field.cc index 374eeb5806..9cf80a5bf5 100644 --- a/runtime/native/java_lang_reflect_Field.cc +++ b/runtime/native/java_lang_reflect_Field.cc @@ -493,30 +493,30 @@ static jboolean Field_isAnnotationPresentNative(JNIEnv* env, } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Field, get, "!(Ljava/lang/Object;)Ljava/lang/Object;"), - NATIVE_METHOD(Field, getBoolean, "!(Ljava/lang/Object;)Z"), - NATIVE_METHOD(Field, getByte, "!(Ljava/lang/Object;)B"), - NATIVE_METHOD(Field, getChar, "!(Ljava/lang/Object;)C"), - NATIVE_METHOD(Field, getAnnotationNative, - "!(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Field, getArtField, "!()J"), - NATIVE_METHOD(Field, getDeclaredAnnotations, "!()[Ljava/lang/annotation/Annotation;"), - NATIVE_METHOD(Field, getSignatureAnnotation, "!()[Ljava/lang/String;"), - NATIVE_METHOD(Field, getDouble, "!(Ljava/lang/Object;)D"), - NATIVE_METHOD(Field, getFloat, "!(Ljava/lang/Object;)F"), - NATIVE_METHOD(Field, getInt, "!(Ljava/lang/Object;)I"), - NATIVE_METHOD(Field, getLong, "!(Ljava/lang/Object;)J"), - NATIVE_METHOD(Field, getShort, "!(Ljava/lang/Object;)S"), - NATIVE_METHOD(Field, isAnnotationPresentNative, "!(Ljava/lang/Class;)Z"), - NATIVE_METHOD(Field, set, "!(Ljava/lang/Object;Ljava/lang/Object;)V"), - NATIVE_METHOD(Field, setBoolean, "!(Ljava/lang/Object;Z)V"), - NATIVE_METHOD(Field, setByte, "!(Ljava/lang/Object;B)V"), - NATIVE_METHOD(Field, setChar, "!(Ljava/lang/Object;C)V"), - NATIVE_METHOD(Field, setDouble, "!(Ljava/lang/Object;D)V"), - NATIVE_METHOD(Field, setFloat, "!(Ljava/lang/Object;F)V"), - NATIVE_METHOD(Field, setInt, "!(Ljava/lang/Object;I)V"), - NATIVE_METHOD(Field, setLong, "!(Ljava/lang/Object;J)V"), - NATIVE_METHOD(Field, setShort, "!(Ljava/lang/Object;S)V"), + FAST_NATIVE_METHOD(Field, get, "(Ljava/lang/Object;)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Field, getBoolean, "(Ljava/lang/Object;)Z"), + FAST_NATIVE_METHOD(Field, getByte, "(Ljava/lang/Object;)B"), + FAST_NATIVE_METHOD(Field, getChar, "(Ljava/lang/Object;)C"), + FAST_NATIVE_METHOD(Field, getAnnotationNative, + "(Ljava/lang/Class;)Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Field, getArtField, "()J"), + FAST_NATIVE_METHOD(Field, getDeclaredAnnotations, "()[Ljava/lang/annotation/Annotation;"), + FAST_NATIVE_METHOD(Field, getSignatureAnnotation, "()[Ljava/lang/String;"), + FAST_NATIVE_METHOD(Field, getDouble, "(Ljava/lang/Object;)D"), + FAST_NATIVE_METHOD(Field, getFloat, "(Ljava/lang/Object;)F"), + FAST_NATIVE_METHOD(Field, getInt, "(Ljava/lang/Object;)I"), + FAST_NATIVE_METHOD(Field, getLong, "(Ljava/lang/Object;)J"), + FAST_NATIVE_METHOD(Field, getShort, "(Ljava/lang/Object;)S"), + FAST_NATIVE_METHOD(Field, isAnnotationPresentNative, "(Ljava/lang/Class;)Z"), + FAST_NATIVE_METHOD(Field, set, "(Ljava/lang/Object;Ljava/lang/Object;)V"), + FAST_NATIVE_METHOD(Field, setBoolean, "(Ljava/lang/Object;Z)V"), + FAST_NATIVE_METHOD(Field, setByte, "(Ljava/lang/Object;B)V"), + FAST_NATIVE_METHOD(Field, setChar, "(Ljava/lang/Object;C)V"), + FAST_NATIVE_METHOD(Field, setDouble, "(Ljava/lang/Object;D)V"), + FAST_NATIVE_METHOD(Field, setFloat, "(Ljava/lang/Object;F)V"), + FAST_NATIVE_METHOD(Field, setInt, "(Ljava/lang/Object;I)V"), + FAST_NATIVE_METHOD(Field, setLong, "(Ljava/lang/Object;J)V"), + FAST_NATIVE_METHOD(Field, setShort, "(Ljava/lang/Object;S)V"), }; void register_java_lang_reflect_Field(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Method.cc b/runtime/native/java_lang_reflect_Method.cc index a6589bc073..6e5e3d9337 100644 --- a/runtime/native/java_lang_reflect_Method.cc +++ b/runtime/native/java_lang_reflect_Method.cc @@ -84,9 +84,9 @@ static jobject Method_invoke(JNIEnv* env, jobject javaMethod, jobject javaReceiv } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Method, getDefaultValue, "!()Ljava/lang/Object;"), - NATIVE_METHOD(Method, getExceptionTypes, "!()[Ljava/lang/Class;"), - NATIVE_METHOD(Method, invoke, "!(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Method, getDefaultValue, "()Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Method, getExceptionTypes, "()[Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Method, invoke, "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;"), }; void register_java_lang_reflect_Method(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Parameter.cc b/runtime/native/java_lang_reflect_Parameter.cc index 0bb9e382d3..37aa16c3df 100644 --- a/runtime/native/java_lang_reflect_Parameter.cc +++ b/runtime/native/java_lang_reflect_Parameter.cc @@ -63,9 +63,9 @@ static jobject Parameter_getAnnotationNative(JNIEnv* env, } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Parameter, + FAST_NATIVE_METHOD(Parameter, getAnnotationNative, - "!(Ljava/lang/reflect/Executable;ILjava/lang/Class;)Ljava/lang/annotation/Annotation;"), + "(Ljava/lang/reflect/Executable;ILjava/lang/Class;)Ljava/lang/annotation/Annotation;"), }; void register_java_lang_reflect_Parameter(JNIEnv* env) { diff --git a/runtime/native/java_lang_reflect_Proxy.cc b/runtime/native/java_lang_reflect_Proxy.cc index 70cd6aaae2..0279b5f9ce 100644 --- a/runtime/native/java_lang_reflect_Proxy.cc +++ b/runtime/native/java_lang_reflect_Proxy.cc @@ -35,7 +35,7 @@ static jclass Proxy_generateProxy(JNIEnv* env, jclass, jstring name, jobjectArra } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Proxy, generateProxy, "!(Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/ClassLoader;[Ljava/lang/reflect/Method;[[Ljava/lang/Class;)Ljava/lang/Class;"), + FAST_NATIVE_METHOD(Proxy, generateProxy, "(Ljava/lang/String;[Ljava/lang/Class;Ljava/lang/ClassLoader;[Ljava/lang/reflect/Method;[[Ljava/lang/Class;)Ljava/lang/Class;"), }; void register_java_lang_reflect_Proxy(JNIEnv* env) { diff --git a/runtime/native/libcore_util_CharsetUtils.cc b/runtime/native/libcore_util_CharsetUtils.cc index e51b6d2a89..4138ccc879 100644 --- a/runtime/native/libcore_util_CharsetUtils.cc +++ b/runtime/native/libcore_util_CharsetUtils.cc @@ -249,11 +249,11 @@ static jbyteArray CharsetUtils_toUtf8Bytes(JNIEnv* env, jclass, jstring java_str } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(CharsetUtils, asciiBytesToChars, "!([BII[C)V"), - NATIVE_METHOD(CharsetUtils, isoLatin1BytesToChars, "!([BII[C)V"), - NATIVE_METHOD(CharsetUtils, toAsciiBytes, "!(Ljava/lang/String;II)[B"), - NATIVE_METHOD(CharsetUtils, toIsoLatin1Bytes, "!(Ljava/lang/String;II)[B"), - NATIVE_METHOD(CharsetUtils, toUtf8Bytes, "!(Ljava/lang/String;II)[B"), + FAST_NATIVE_METHOD(CharsetUtils, asciiBytesToChars, "([BII[C)V"), + FAST_NATIVE_METHOD(CharsetUtils, isoLatin1BytesToChars, "([BII[C)V"), + FAST_NATIVE_METHOD(CharsetUtils, toAsciiBytes, "(Ljava/lang/String;II)[B"), + FAST_NATIVE_METHOD(CharsetUtils, toIsoLatin1Bytes, "(Ljava/lang/String;II)[B"), + FAST_NATIVE_METHOD(CharsetUtils, toUtf8Bytes, "(Ljava/lang/String;II)[B"), }; void register_libcore_util_CharsetUtils(JNIEnv* env) { diff --git a/runtime/native/org_apache_harmony_dalvik_ddmc_DdmServer.cc b/runtime/native/org_apache_harmony_dalvik_ddmc_DdmServer.cc index 5356498fc8..5809708d64 100644 --- a/runtime/native/org_apache_harmony_dalvik_ddmc_DdmServer.cc +++ b/runtime/native/org_apache_harmony_dalvik_ddmc_DdmServer.cc @@ -33,7 +33,7 @@ static void DdmServer_nativeSendChunk(JNIEnv* env, jclass, jint type, } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(DdmServer, nativeSendChunk, "!(I[BII)V"), + FAST_NATIVE_METHOD(DdmServer, nativeSendChunk, "(I[BII)V"), }; void register_org_apache_harmony_dalvik_ddmc_DdmServer(JNIEnv* env) { diff --git a/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc b/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc index ca17c26c95..69ef59eb30 100644 --- a/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc +++ b/runtime/native/org_apache_harmony_dalvik_ddmc_DdmVmInternal.cc @@ -165,11 +165,11 @@ static void DdmVmInternal_threadNotify(JNIEnv*, jclass, jboolean enable) { static JNINativeMethod gMethods[] = { NATIVE_METHOD(DdmVmInternal, enableRecentAllocations, "(Z)V"), - NATIVE_METHOD(DdmVmInternal, getRecentAllocations, "!()[B"), - NATIVE_METHOD(DdmVmInternal, getRecentAllocationStatus, "!()Z"), + FAST_NATIVE_METHOD(DdmVmInternal, getRecentAllocations, "()[B"), + FAST_NATIVE_METHOD(DdmVmInternal, getRecentAllocationStatus, "()Z"), NATIVE_METHOD(DdmVmInternal, getStackTraceById, "(I)[Ljava/lang/StackTraceElement;"), NATIVE_METHOD(DdmVmInternal, getThreadStats, "()[B"), - NATIVE_METHOD(DdmVmInternal, heapInfoNotify, "!(I)Z"), + FAST_NATIVE_METHOD(DdmVmInternal, heapInfoNotify, "(I)Z"), NATIVE_METHOD(DdmVmInternal, heapSegmentNotify, "(IIZ)Z"), NATIVE_METHOD(DdmVmInternal, threadNotify, "(Z)V"), }; diff --git a/runtime/native/scoped_fast_native_object_access-inl.h b/runtime/native/scoped_fast_native_object_access-inl.h index 1d73813fcd..50a554c930 100644 --- a/runtime/native/scoped_fast_native_object_access-inl.h +++ b/runtime/native/scoped_fast_native_object_access-inl.h @@ -27,7 +27,7 @@ namespace art { inline ScopedFastNativeObjectAccess::ScopedFastNativeObjectAccess(JNIEnv* env) : ScopedObjectAccessAlreadyRunnable(env) { Locks::mutator_lock_->AssertSharedHeld(Self()); - DCHECK((*Self()->GetManagedStack()->GetTopQuickFrame())->IsFastNative()); + DCHECK((*Self()->GetManagedStack()->GetTopQuickFrame())->IsAnnotatedWithFastNative()); // Don't work with raw objects in non-runnable states. DCHECK_EQ(Self()->GetState(), kRunnable); } diff --git a/runtime/native/sun_misc_Unsafe.cc b/runtime/native/sun_misc_Unsafe.cc index 644df070bc..cc5a41a0de 100644 --- a/runtime/native/sun_misc_Unsafe.cc +++ b/runtime/native/sun_misc_Unsafe.cc @@ -492,69 +492,69 @@ static void Unsafe_fullFence(JNIEnv*, jobject) { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(Unsafe, compareAndSwapInt, "!(Ljava/lang/Object;JII)Z"), - NATIVE_METHOD(Unsafe, compareAndSwapLong, "!(Ljava/lang/Object;JJJ)Z"), - NATIVE_METHOD(Unsafe, compareAndSwapObject, "!(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z"), - NATIVE_METHOD(Unsafe, getIntVolatile, "!(Ljava/lang/Object;J)I"), - NATIVE_METHOD(Unsafe, putIntVolatile, "!(Ljava/lang/Object;JI)V"), - NATIVE_METHOD(Unsafe, getLongVolatile, "!(Ljava/lang/Object;J)J"), - NATIVE_METHOD(Unsafe, putLongVolatile, "!(Ljava/lang/Object;JJ)V"), - NATIVE_METHOD(Unsafe, getObjectVolatile, "!(Ljava/lang/Object;J)Ljava/lang/Object;"), - NATIVE_METHOD(Unsafe, putObjectVolatile, "!(Ljava/lang/Object;JLjava/lang/Object;)V"), - NATIVE_METHOD(Unsafe, getInt, "!(Ljava/lang/Object;J)I"), - NATIVE_METHOD(Unsafe, putInt, "!(Ljava/lang/Object;JI)V"), - NATIVE_METHOD(Unsafe, putOrderedInt, "!(Ljava/lang/Object;JI)V"), - NATIVE_METHOD(Unsafe, getLong, "!(Ljava/lang/Object;J)J"), - NATIVE_METHOD(Unsafe, putLong, "!(Ljava/lang/Object;JJ)V"), - NATIVE_METHOD(Unsafe, putOrderedLong, "!(Ljava/lang/Object;JJ)V"), - NATIVE_METHOD(Unsafe, getObject, "!(Ljava/lang/Object;J)Ljava/lang/Object;"), - NATIVE_METHOD(Unsafe, putObject, "!(Ljava/lang/Object;JLjava/lang/Object;)V"), - NATIVE_METHOD(Unsafe, putOrderedObject, "!(Ljava/lang/Object;JLjava/lang/Object;)V"), - NATIVE_METHOD(Unsafe, getArrayBaseOffsetForComponentType, "!(Ljava/lang/Class;)I"), - NATIVE_METHOD(Unsafe, getArrayIndexScaleForComponentType, "!(Ljava/lang/Class;)I"), - NATIVE_METHOD(Unsafe, addressSize, "!()I"), - NATIVE_METHOD(Unsafe, pageSize, "!()I"), - NATIVE_METHOD(Unsafe, allocateMemory, "!(J)J"), - NATIVE_METHOD(Unsafe, freeMemory, "!(J)V"), - NATIVE_METHOD(Unsafe, setMemory, "!(JJB)V"), - NATIVE_METHOD(Unsafe, copyMemory, "!(JJJ)V"), - NATIVE_METHOD(Unsafe, copyMemoryToPrimitiveArray, "!(JLjava/lang/Object;JJ)V"), - NATIVE_METHOD(Unsafe, copyMemoryFromPrimitiveArray, "!(Ljava/lang/Object;JJJ)V"), - NATIVE_METHOD(Unsafe, getBoolean, "!(Ljava/lang/Object;J)Z"), - - NATIVE_METHOD(Unsafe, getByte, "!(Ljava/lang/Object;J)B"), - NATIVE_METHOD(Unsafe, getChar, "!(Ljava/lang/Object;J)C"), - NATIVE_METHOD(Unsafe, getShort, "!(Ljava/lang/Object;J)S"), - NATIVE_METHOD(Unsafe, getFloat, "!(Ljava/lang/Object;J)F"), - NATIVE_METHOD(Unsafe, getDouble, "!(Ljava/lang/Object;J)D"), - NATIVE_METHOD(Unsafe, putBoolean, "!(Ljava/lang/Object;JZ)V"), - NATIVE_METHOD(Unsafe, putByte, "!(Ljava/lang/Object;JB)V"), - NATIVE_METHOD(Unsafe, putChar, "!(Ljava/lang/Object;JC)V"), - NATIVE_METHOD(Unsafe, putShort, "!(Ljava/lang/Object;JS)V"), - NATIVE_METHOD(Unsafe, putFloat, "!(Ljava/lang/Object;JF)V"), - NATIVE_METHOD(Unsafe, putDouble, "!(Ljava/lang/Object;JD)V"), + FAST_NATIVE_METHOD(Unsafe, compareAndSwapInt, "(Ljava/lang/Object;JII)Z"), + FAST_NATIVE_METHOD(Unsafe, compareAndSwapLong, "(Ljava/lang/Object;JJJ)Z"), + FAST_NATIVE_METHOD(Unsafe, compareAndSwapObject, "(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z"), + FAST_NATIVE_METHOD(Unsafe, getIntVolatile, "(Ljava/lang/Object;J)I"), + FAST_NATIVE_METHOD(Unsafe, putIntVolatile, "(Ljava/lang/Object;JI)V"), + FAST_NATIVE_METHOD(Unsafe, getLongVolatile, "(Ljava/lang/Object;J)J"), + FAST_NATIVE_METHOD(Unsafe, putLongVolatile, "(Ljava/lang/Object;JJ)V"), + FAST_NATIVE_METHOD(Unsafe, getObjectVolatile, "(Ljava/lang/Object;J)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Unsafe, putObjectVolatile, "(Ljava/lang/Object;JLjava/lang/Object;)V"), + FAST_NATIVE_METHOD(Unsafe, getInt, "(Ljava/lang/Object;J)I"), + FAST_NATIVE_METHOD(Unsafe, putInt, "(Ljava/lang/Object;JI)V"), + FAST_NATIVE_METHOD(Unsafe, putOrderedInt, "(Ljava/lang/Object;JI)V"), + FAST_NATIVE_METHOD(Unsafe, getLong, "(Ljava/lang/Object;J)J"), + FAST_NATIVE_METHOD(Unsafe, putLong, "(Ljava/lang/Object;JJ)V"), + FAST_NATIVE_METHOD(Unsafe, putOrderedLong, "(Ljava/lang/Object;JJ)V"), + FAST_NATIVE_METHOD(Unsafe, getObject, "(Ljava/lang/Object;J)Ljava/lang/Object;"), + FAST_NATIVE_METHOD(Unsafe, putObject, "(Ljava/lang/Object;JLjava/lang/Object;)V"), + FAST_NATIVE_METHOD(Unsafe, putOrderedObject, "(Ljava/lang/Object;JLjava/lang/Object;)V"), + FAST_NATIVE_METHOD(Unsafe, getArrayBaseOffsetForComponentType, "(Ljava/lang/Class;)I"), + FAST_NATIVE_METHOD(Unsafe, getArrayIndexScaleForComponentType, "(Ljava/lang/Class;)I"), + FAST_NATIVE_METHOD(Unsafe, addressSize, "()I"), + FAST_NATIVE_METHOD(Unsafe, pageSize, "()I"), + FAST_NATIVE_METHOD(Unsafe, allocateMemory, "(J)J"), + FAST_NATIVE_METHOD(Unsafe, freeMemory, "(J)V"), + FAST_NATIVE_METHOD(Unsafe, setMemory, "(JJB)V"), + FAST_NATIVE_METHOD(Unsafe, copyMemory, "(JJJ)V"), + FAST_NATIVE_METHOD(Unsafe, copyMemoryToPrimitiveArray, "(JLjava/lang/Object;JJ)V"), + FAST_NATIVE_METHOD(Unsafe, copyMemoryFromPrimitiveArray, "(Ljava/lang/Object;JJJ)V"), + FAST_NATIVE_METHOD(Unsafe, getBoolean, "(Ljava/lang/Object;J)Z"), + + FAST_NATIVE_METHOD(Unsafe, getByte, "(Ljava/lang/Object;J)B"), + FAST_NATIVE_METHOD(Unsafe, getChar, "(Ljava/lang/Object;J)C"), + FAST_NATIVE_METHOD(Unsafe, getShort, "(Ljava/lang/Object;J)S"), + FAST_NATIVE_METHOD(Unsafe, getFloat, "(Ljava/lang/Object;J)F"), + FAST_NATIVE_METHOD(Unsafe, getDouble, "(Ljava/lang/Object;J)D"), + FAST_NATIVE_METHOD(Unsafe, putBoolean, "(Ljava/lang/Object;JZ)V"), + FAST_NATIVE_METHOD(Unsafe, putByte, "(Ljava/lang/Object;JB)V"), + FAST_NATIVE_METHOD(Unsafe, putChar, "(Ljava/lang/Object;JC)V"), + FAST_NATIVE_METHOD(Unsafe, putShort, "(Ljava/lang/Object;JS)V"), + FAST_NATIVE_METHOD(Unsafe, putFloat, "(Ljava/lang/Object;JF)V"), + FAST_NATIVE_METHOD(Unsafe, putDouble, "(Ljava/lang/Object;JD)V"), // Each of the getFoo variants are overloaded with a call that operates // directively on a native pointer. - OVERLOADED_NATIVE_METHOD(Unsafe, getByte, "!(J)B", getByteJ), - OVERLOADED_NATIVE_METHOD(Unsafe, getChar, "!(J)C", getCharJ), - OVERLOADED_NATIVE_METHOD(Unsafe, getShort, "!(J)S", getShortJ), - OVERLOADED_NATIVE_METHOD(Unsafe, getInt, "!(J)I", getIntJ), - OVERLOADED_NATIVE_METHOD(Unsafe, getLong, "!(J)J", getLongJ), - OVERLOADED_NATIVE_METHOD(Unsafe, getFloat, "!(J)F", getFloatJ), - OVERLOADED_NATIVE_METHOD(Unsafe, getDouble, "!(J)D", getDoubleJ), - OVERLOADED_NATIVE_METHOD(Unsafe, putByte, "!(JB)V", putByteJB), - OVERLOADED_NATIVE_METHOD(Unsafe, putChar, "!(JC)V", putCharJC), - OVERLOADED_NATIVE_METHOD(Unsafe, putShort, "!(JS)V", putShortJS), - OVERLOADED_NATIVE_METHOD(Unsafe, putInt, "!(JI)V", putIntJI), - OVERLOADED_NATIVE_METHOD(Unsafe, putLong, "!(JJ)V", putLongJJ), - OVERLOADED_NATIVE_METHOD(Unsafe, putFloat, "!(JF)V", putFloatJF), - OVERLOADED_NATIVE_METHOD(Unsafe, putDouble, "!(JD)V", putDoubleJD), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getByte, "(J)B", getByteJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getChar, "(J)C", getCharJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getShort, "(J)S", getShortJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getInt, "(J)I", getIntJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getLong, "(J)J", getLongJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getFloat, "(J)F", getFloatJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, getDouble, "(J)D", getDoubleJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putByte, "(JB)V", putByteJB), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putChar, "(JC)V", putCharJC), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putShort, "(JS)V", putShortJS), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putInt, "(JI)V", putIntJI), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putLong, "(JJ)V", putLongJJ), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putFloat, "(JF)V", putFloatJF), + OVERLOADED_FAST_NATIVE_METHOD(Unsafe, putDouble, "(JD)V", putDoubleJD), // CAS - NATIVE_METHOD(Unsafe, loadFence, "!()V"), - NATIVE_METHOD(Unsafe, storeFence, "!()V"), - NATIVE_METHOD(Unsafe, fullFence, "!()V"), + FAST_NATIVE_METHOD(Unsafe, loadFence, "()V"), + FAST_NATIVE_METHOD(Unsafe, storeFence, "()V"), + FAST_NATIVE_METHOD(Unsafe, fullFence, "()V"), }; void register_sun_misc_Unsafe(JNIEnv* env) { diff --git a/test/201-built-in-except-detail-messages/src/Main.java b/test/201-built-in-except-detail-messages/src/Main.java index dc58819924..c2976c8a33 100644 --- a/test/201-built-in-except-detail-messages/src/Main.java +++ b/test/201-built-in-except-detail-messages/src/Main.java @@ -411,7 +411,7 @@ public class Main { m.invoke("hello", "world"); // Wrong type. fail(); } catch (IllegalArgumentException iae) { - assertEquals("method java.lang.String.charAt! argument 1 has type int, got java.lang.String", + assertEquals("method java.lang.String.charAt argument 1 has type int, got java.lang.String", iae.getMessage()); } try { @@ -419,7 +419,7 @@ public class Main { m.invoke("hello", (Object) null); // Null for a primitive argument. fail(); } catch (IllegalArgumentException iae) { - assertEquals("method java.lang.String.charAt! argument 1 has type int, got null", + assertEquals("method java.lang.String.charAt argument 1 has type int, got null", iae.getMessage()); } try { |