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

Unified Diff: base/android/jni_android.cc

Issue 11038015: Android: lazy initialization for method id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Split files 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.cc
diff --git a/base/android/jni_android.cc b/base/android/jni_android.cc
index a34bc186ef216adf621bf549f7ebca9baabadde2..c2ca14d3587eb742bf76edf8c5caf68a5ecafccb 100644
--- a/base/android/jni_android.cc
+++ b/base/android/jni_android.cc
@@ -7,8 +7,8 @@
#include <map>
#include "base/android/build_info.h"
+#include "base/android/jni_method_id.h"
#include "base/android/jni_string.h"
-#include "base/atomicops.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/threading/platform_thread.h"
@@ -97,35 +97,6 @@ std::string GetJavaExceptionInfo(JNIEnv* env, jthrowable java_throwable) {
return ConvertJavaStringToUTF8(exception_string);
}
-enum MethodType {
- METHODTYPE_STATIC,
- METHODTYPE_NORMAL,
-};
-
-enum ExceptionCheck {
- EXCEPTIONCHECK_YES,
- EXCEPTIONCHECK_NO,
-};
-
-template<MethodType method_type, ExceptionCheck exception_check>
-jmethodID GetMethodIDInternal(JNIEnv* env,
- jclass clazz,
- const char* method_name,
- const char* jni_signature) {
- jmethodID method_id = method_type == METHODTYPE_STATIC ?
- env->GetStaticMethodID(clazz, method_name, jni_signature) :
- env->GetMethodID(clazz, method_name, jni_signature);
- if (exception_check == EXCEPTIONCHECK_YES) {
- CHECK(!base::android::ClearException(env) && method_id) <<
- "Failed to find " <<
- (method_type == METHODTYPE_STATIC ? "static " : "") <<
- "method " << method_name << " " << jni_signature;
- } else if (base::android::HasException(env)) {
- env->ExceptionClear();
- }
- return method_id;
-}
-
} // namespace
namespace base {
@@ -195,7 +166,8 @@ jmethodID GetMethodID(JNIEnv* env,
jclass clazz,
const char* method_name,
const char* jni_signature) {
- return GetMethodIDInternal<METHODTYPE_NORMAL, EXCEPTIONCHECK_YES>(
+ return MethodID::Get<MethodID::METHODTYPE_NORMAL,
+ MethodID::EXCEPTIONCHECK_YES>(
env, clazz, method_name, jni_signature);
}
@@ -203,7 +175,8 @@ jmethodID GetMethodIDOrNull(JNIEnv* env,
jclass clazz,
const char* method_name,
const char* jni_signature) {
- return GetMethodIDInternal<METHODTYPE_NORMAL, EXCEPTIONCHECK_NO>(
+ return MethodID::Get<MethodID::METHODTYPE_NORMAL,
+ MethodID::EXCEPTIONCHECK_NO>(
env, clazz, method_name, jni_signature);
}
@@ -219,15 +192,8 @@ jmethodID GetStaticMethodID(JNIEnv* env,
jclass clazz,
const char* method_name,
const char* jni_signature) {
- return GetMethodIDInternal<METHODTYPE_STATIC, EXCEPTIONCHECK_YES>(
- env, clazz, method_name, jni_signature);
-}
-
-jmethodID GetStaticMethodIDOrNull(JNIEnv* env,
- jclass clazz,
- const char* method_name,
- const char* jni_signature) {
- return GetMethodIDInternal<METHODTYPE_STATIC, EXCEPTIONCHECK_NO>(
+ return MethodID::Get<MethodID::METHODTYPE_STATIC,
+ MethodID::EXCEPTIONCHECK_YES>(
env, clazz, method_name, jni_signature);
}

Powered by Google App Engine
This is Rietveld 408576698