| 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)
|
|
|