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 354e33a0f57023560d3a94c0eb9574f5f7172b94..f400ca03c196b51ac3c2b52e061a9245a10753a2 100755 |
--- a/base/android/jni_generator/jni_generator.py |
+++ b/base/android/jni_generator/jni_generator.py |
@@ -601,13 +601,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); |
joth
2012/10/04 17:59:59
one thing I did remember this morning: currently i
bulach
2012/10/04 18:58:17
I agree in principle, but for app classes, how can
|
$REGISTER_NATIVES_IMPL |
return true; |
} |
@@ -624,7 +620,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, |
@@ -660,13 +655,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("""\ |
@@ -682,7 +670,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: |
@@ -791,14 +779,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} |
}""") |
@@ -853,6 +842,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)) |
@@ -921,12 +911,14 @@ 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}); |
+ template = Template(""" |
+ base::android::MethodID::LazyGet< |
+ base::android::MethodID::METHODTYPE_${STATIC}, |
+ base::android::MethodID::EXCEPTIONCHECK_${CHECK_EXCEPTION}>( |
+ 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 |
@@ -937,8 +929,8 @@ 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 'NORMAL', |
+ 'CHECK_EXCEPTION': 'NO' if called_by_native.system_class else 'YES', |
'JNI_SIGNATURE': JniSignature(called_by_native.params, |
jni_return_type, |
True) |