Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(295)

Unified Diff: base/android/jni_android_unittest.cc

Issue 11038015: Android: lazy initialization for method id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698