| Index: base/android/jni_android_unittest.cc
|
| diff --git a/base/android/jni_android_unittest.cc b/base/android/jni_android_unittest.cc
|
| index abecad778b47c72830d1e0a3345f6cf7c1d05140..79006a50cfb9caef6d850f6ca2961c4468a08380 100644
|
| --- a/base/android/jni_android_unittest.cc
|
| +++ b/base/android/jni_android_unittest.cc
|
| @@ -33,6 +33,24 @@ jmethodID GetMethodIDWrapper(JNIEnv* env, jclass clazz, const char* method,
|
| return g_last_method_id;
|
| }
|
|
|
| +
|
| +static jmethodID g_MTCall = 0;
|
| +jobject MTCall(JNIEnv* env, jclass clazz, int p) {
|
| + base::android::LazyMethodID::Get<
|
| + base::android::LazyMethodID::METHODTYPE_STATIC,
|
| + base::android::LazyMethodID::EXCEPTIONCHECK_NO>(
|
| + env, clazz,
|
| + "valueOf",
|
| + "(I)Ljava/lang/String;",
|
| + &g_MTCall);
|
| +
|
| + return env->CallStaticObjectMethod(clazz, g_MTCall, p);
|
| +}
|
| +
|
| +jobject NonMTCall(JNIEnv* env, jclass clazz, int p) {
|
| + return env->CallStaticObjectMethod(clazz, g_MTCall, p);
|
| +}
|
| +
|
| } // namespace
|
|
|
| class JNIAndroidTest : public testing::Test {
|
| @@ -90,5 +108,24 @@ TEST_F(JNIAndroidTest, GetMethodIDFromClassNameCaching) {
|
| EXPECT_EQ(g_last_method_id, id3);
|
| }
|
|
|
| +TEST(JNIAndroidMicrobenchmark, JNIWithLock) {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + ScopedJavaLocalRef<jclass> clazz(GetClass(env, "java/lang/String"));
|
| + base::Time start_mt = base::Time::Now();
|
| + for (int i = 0; i < 1024; ++i)
|
| + ScopedJavaLocalRef<jobject> o(env, MTCall(env, clazz.obj(), i));
|
| + base::Time end_mt = base::Time::Now();
|
| +
|
| + base::Time start_non_mt = base::Time::Now();
|
| + for (int i = 0; i < 1024; ++i)
|
| + ScopedJavaLocalRef<jobject> o(env, NonMTCall(env, clazz.obj(), i));
|
| + base::Time end_non_mt = base::Time::Now();
|
| +
|
| + LOG(ERROR) << "JNI MT" <<
|
| + base::TimeDelta(start_mt - end_mt).InMicroseconds();
|
| + LOG(ERROR) << "JNI Non-MT" <<
|
| + base::TimeDelta(start_non_mt - end_non_mt).InMicroseconds();
|
| +}
|
| +
|
| } // namespace android
|
| } // namespace base
|
|
|