Chromium Code Reviews| 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) |