diff options
author | 2017-02-27 11:46:03 +0000 | |
---|---|---|
committer | 2017-02-27 12:48:57 +0000 | |
commit | 6e311acac755e0446660fdda955e9352895f2b01 (patch) | |
tree | 19d654b562d328c338f95c05687d3170d207ab7e | |
parent | 69c4c27cc965620511e876248f679bbcf4fde646 (diff) |
Re-arrange System.identityHashCode for better performance.
Brings in ~8% improvement to Ritz::EvaluateComplexFormulas.
Test: run-libcore-tests test-art-host
bug: 30933338
Change-Id: I9966da4143d013caf2e610eb176c0a8fffabca45
-rw-r--r-- | runtime/class_linker_test.cc | 2 | ||||
-rw-r--r-- | runtime/native/java_lang_Object.cc | 7 | ||||
-rw-r--r-- | runtime/native/java_lang_System.cc | 10 |
3 files changed, 8 insertions, 11 deletions
diff --git a/runtime/class_linker_test.cc b/runtime/class_linker_test.cc index 21cdede06b..e5722a13a7 100644 --- a/runtime/class_linker_test.cc +++ b/runtime/class_linker_test.cc @@ -139,7 +139,7 @@ class ClassLinkerTest : public CommonRuntimeTest { EXPECT_FALSE(JavaLangObject->IsFinal()); EXPECT_FALSE(JavaLangObject->IsPrimitive()); EXPECT_FALSE(JavaLangObject->IsSynthetic()); - EXPECT_EQ(2U, JavaLangObject->NumDirectMethods()); + EXPECT_EQ(4U, JavaLangObject->NumDirectMethods()); EXPECT_EQ(11U, JavaLangObject->NumVirtualMethods()); if (!kUseBrooksReadBarrier) { EXPECT_EQ(2U, JavaLangObject->NumInstanceFields()); diff --git a/runtime/native/java_lang_Object.cc b/runtime/native/java_lang_Object.cc index 6989244280..fb4f99a126 100644 --- a/runtime/native/java_lang_Object.cc +++ b/runtime/native/java_lang_Object.cc @@ -48,12 +48,19 @@ static void Object_waitJI(JNIEnv* env, jobject java_this, jlong ms, jint ns) { soa.Decode<mirror::Object>(java_this)->Wait(soa.Self(), ms, ns); } +static jint Object_identityHashCodeNative(JNIEnv* env, jclass, jobject javaObject) { + ScopedFastNativeObjectAccess soa(env); + ObjPtr<mirror::Object> o = soa.Decode<mirror::Object>(javaObject); + return static_cast<jint>(o->IdentityHashCode()); +} + static JNINativeMethod gMethods[] = { 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), + FAST_NATIVE_METHOD(Object, identityHashCodeNative, "(Ljava/lang/Object;)I"), }; void register_java_lang_Object(JNIEnv* env) { diff --git a/runtime/native/java_lang_System.cc b/runtime/native/java_lang_System.cc index d7c9cd07b5..2cabce8868 100644 --- a/runtime/native/java_lang_System.cc +++ b/runtime/native/java_lang_System.cc @@ -227,15 +227,6 @@ static void System_arraycopyBooleanUnchecked(JNIEnv* env, jclass, jobject javaSr javaDst, dstPos, count); } -static jint System_identityHashCode(JNIEnv* env, jclass, jobject javaObject) { - if (UNLIKELY(javaObject == nullptr)) { - return 0; - } - ScopedFastNativeObjectAccess soa(env); - ObjPtr<mirror::Object> o = soa.Decode<mirror::Object>(javaObject); - return static_cast<jint>(o->IdentityHashCode()); -} - static JNINativeMethod gMethods[] = { FAST_NATIVE_METHOD(System, arraycopy, "(Ljava/lang/Object;ILjava/lang/Object;II)V"), FAST_NATIVE_METHOD(System, arraycopyCharUnchecked, "([CI[CII)V"), @@ -246,7 +237,6 @@ static JNINativeMethod gMethods[] = { 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) { |