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

Unified Diff: base/android/jni_generator/jni_generator.py

Issue 11038015: Android: lazy initialization for method id. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased 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_generator/jni_generator.py
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index f8df00ad3e8694ff3197bb855510ddff55d331f0..afc23893eb699b83b5a4fceaf6b8c32c5a8f1b7d 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -603,13 +603,9 @@ $FORWARD_DECLARATIONS
// Step 2: method stubs.
$METHOD_STUBS
-// Step 3: GetMethodIDs and RegisterNatives.
-static void GetMethodIDsImpl(JNIEnv* env) {
-$GET_METHOD_IDS_IMPL
-}
+// Step 3: RegisterNatives.
static bool RegisterNativesImpl(JNIEnv* env) {
- GetMethodIDsImpl(env);
$REGISTER_NATIVES_IMPL
return true;
}
@@ -626,7 +622,6 @@ $CLOSE_NAMESPACE
'FORWARD_DECLARATIONS': self.GetForwardDeclarationsString(),
'METHOD_STUBS': self.GetMethodStubsString(),
'OPEN_NAMESPACE': self.GetOpenNamespaceString(),
- 'GET_METHOD_IDS_IMPL': self.GetMethodIDsImplString(),
'REGISTER_NATIVES_IMPL': self.GetRegisterNativesImplString(),
'CLOSE_NAMESPACE': self.GetCloseNamespaceString(),
'HEADER_GUARD': self.header_guard,
@@ -662,13 +657,6 @@ $CLOSE_NAMESPACE
ret += [self.GetKMethodArrayEntry(native)]
return '\n'.join(ret)
- def GetMethodIDsImplString(self):
- ret = []
- ret += [self.GetFindClasses()]
- for called_by_native in self.called_by_natives:
- ret += [self.GetMethodIDImpl(called_by_native)]
- return '\n'.join(ret)
-
def GetRegisterNativesImplString(self):
"""Returns the implementation for RegisterNatives."""
template = Template("""\
@@ -684,7 +672,7 @@ ${KMETHODS}
return false;
}
""")
- ret = []
+ ret = [self.GetFindClasses()]
all_classes = self.GetUniqueClasses(self.natives)
all_classes[self.class_name] = self.fully_qualified_class
for clazz in all_classes:
@@ -793,14 +781,15 @@ ${FUNCTION_SIGNATURE} {""")
${FUNCTION_SIGNATURE} __attribute__ ((unused));
${FUNCTION_SIGNATURE} {""")
template = Template("""
-static jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0;
+static base::subtle::AtomicWord g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0;
${FUNCTION_HEADER}
/* Must call RegisterNativesImpl() */
DCHECK(g_${JAVA_CLASS}_clazz);
- DCHECK(g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});
+ jmethodID method_id =
+ ${GET_METHOD_ID_IMPL}
${RETURN_DECLARATION}
${PRE_CALL}env->${ENV_CALL}(${FIRST_PARAM_IN_CALL},
- g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME}${PARAMS_IN_CALL})${POST_CALL};
+ method_id${PARAMS_IN_CALL})${POST_CALL};
${CHECK_EXCEPTION}
${RETURN_CLAUSE}
}""")
@@ -855,6 +844,7 @@ ${FUNCTION_HEADER}
'PARAMS_IN_CALL': params_for_call,
'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
'CHECK_EXCEPTION': check_exception,
+ 'GET_METHOD_ID_IMPL': self.GetMethodIDImpl(called_by_native)
}
values['FUNCTION_SIGNATURE'] = (
function_signature_template.substitute(values))
@@ -924,11 +914,12 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
def GetMethodIDImpl(self, called_by_native):
"""Returns the implementation of GetMethodID."""
template = Template("""\
- g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} =
- base::android::Get${STATIC}MethodID${SUFFIX}(
- env, g_${JAVA_CLASS}_clazz,
- "${JNI_NAME}",
- ${JNI_SIGNATURE});
+ base::android::MethodID::LazyGet<
+ base::android::MethodID::TYPE_${STATIC}>(
+ env, g_${JAVA_CLASS}_clazz,
+ "${JNI_NAME}",
+ ${JNI_SIGNATURE},
+ &g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});
""")
jni_name = called_by_native.name
jni_return_type = called_by_native.return_type
@@ -939,8 +930,7 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
'JNI_NAME': jni_name,
'METHOD_ID_VAR_NAME': called_by_native.method_id_var_name,
- 'STATIC': 'Static' if called_by_native.static else '',
- 'SUFFIX': 'OrNull' if called_by_native.system_class else '',
+ 'STATIC': 'STATIC' if called_by_native.static else 'INSTANCE',
'JNI_SIGNATURE': JniSignature(called_by_native.params,
jni_return_type,
True)
« no previous file with comments | « base/android/jni_generator/golden_sample_for_tests_jni.h ('k') | base/android/jni_generator/jni_generator_tests.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698