Index: base/android/jni_method_id_unittest.cc |
diff --git a/base/android/jni_method_id_unittest.cc b/base/android/jni_method_id_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..00b0f32b99e7138b9e365ec1a75a5e1daf146a07 |
--- /dev/null |
+++ b/base/android/jni_method_id_unittest.cc |
@@ -0,0 +1,62 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/android/jni_method_id.h" |
+ |
+#include "base/android/jni_android.h" |
+#include "base/logging.h" |
+#include "base/time.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace base { |
+namespace android { |
+ |
+namespace { |
+ |
+base::subtle::AtomicWord g_atomic_id = 0; |
+int LazyMethodIDCall(JNIEnv* env, jclass clazz, int p) { |
+ jmethodID id = base::android::MethodID::LazyGet< |
+ base::android::MethodID::METHODTYPE_STATIC, |
+ base::android::MethodID::EXCEPTIONCHECK_NO>( |
+ env, clazz, |
+ "abs", |
+ "(I)I", |
+ &g_atomic_id); |
+ |
+ return env->CallStaticIntMethod(clazz, id, p); |
+} |
+ |
+int MethodIDCall(JNIEnv* env, jclass clazz, jmethodID id, int p) { |
+ return env->CallStaticIntMethod(clazz, id, p); |
+} |
+ |
+} // namespace |
+ |
+TEST(JNIAndroidMicrobenchmark, MethodId) { |
+ JNIEnv* env = AttachCurrentThread(); |
+ ScopedJavaLocalRef<jclass> clazz(GetClass(env, "java/lang/Math")); |
+ base::Time start_lazy = base::Time::Now(); |
+ int o = 0; |
+ for (int i = 0; i < 1024; ++i) |
+ o += LazyMethodIDCall(env, clazz.obj(), i); |
joth
2012/10/03 17:31:52
depending on your goals, this test is skewed again
|
+ base::Time end_lazy = base::Time::Now(); |
+ |
+ jmethodID id = reinterpret_cast<jmethodID>(g_atomic_id); |
+ base::Time start = base::Time::Now(); |
+ for (int i = 0; i < 1024; ++i) |
+ o += MethodIDCall(env, clazz.obj(), id, i); |
+ base::Time end = base::Time::Now(); |
+ |
+ // On a Galaxy Nexus, results were in the range of: |
+ // JNI LazyMethodIDCall (us) 1984 |
+ // JNI MethodIDCall (us) 1861 |
+ LOG(ERROR) << "JNI LazyMethodIDCall (us) " << |
+ base::TimeDelta(end_lazy - start_lazy).InMicroseconds(); |
+ LOG(ERROR) << "JNI MethodIDCall (us) " << |
+ base::TimeDelta(end - start).InMicroseconds(); |
+ LOG(ERROR) << "JNI " << o; |
+} |
+ |
+} // namespace android |
+} // namespace base |