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

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

Issue 147533004: Remove unneeded JNI registrations. (Closed) Base URL: https://git.chromium.org/chromium/src.git@master
Patch Set: Fix android webview build issues. Created 6 years, 9 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 27335834953a3e006647d27d98b301deb5b1fbf2..23b4b76fe3c7bde515f64008b0122cb4a8872d52 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -673,18 +673,18 @@ $METHOD_ID_DEFINITIONS
} // namespace
$OPEN_NAMESPACE
+extern "C"{
$FORWARD_DECLARATIONS
$CONSTANT_FIELDS
// Step 2: method stubs.
$METHOD_STUBS
+};
// Step 3: RegisterNatives.
-$JNI_NATIVE_METHODS
$REGISTER_NATIVES
$CLOSE_NAMESPACE
-$JNI_REGISTER_NATIVES
#endif // ${HEADER_GUARD}
""")
values = {
@@ -696,12 +696,10 @@ $JNI_REGISTER_NATIVES
'CONSTANT_FIELDS': self.GetConstantFieldsString(),
'METHOD_STUBS': self.GetMethodStubsString(),
'OPEN_NAMESPACE': self.GetOpenNamespaceString(),
- 'JNI_NATIVE_METHODS': self.GetJNINativeMethodsString(),
'REGISTER_NATIVES': self.GetRegisterNativesString(),
'CLOSE_NAMESPACE': self.GetCloseNamespaceString(),
'HEADER_GUARD': self.header_guard,
'INCLUDES': self.GetIncludesString(),
- 'JNI_REGISTER_NATIVES': self.GetJNIRegisterNativesString()
}
return WrapOutput(template.substitute(values))
@@ -780,29 +778,6 @@ jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = NULL;""")
ret += [self.GetKMethodArrayEntry(native)]
return '\n'.join(ret)
- def SubstituteNativeMethods(self, template):
- """Substitutes JAVA_CLASS and KMETHODS in the provided template."""
- ret = []
- all_classes = self.GetUniqueClasses(self.natives)
- all_classes[self.class_name] = self.fully_qualified_class
- for clazz in all_classes:
- kmethods = self.GetKMethodsString(clazz)
- if kmethods:
- values = {'JAVA_CLASS': clazz,
- 'KMETHODS': kmethods}
- ret += [template.substitute(values)]
- if not ret: return ''
- return '\n' + '\n'.join(ret)
-
- def GetJNINativeMethodsString(self):
- """Returns the implementation of the array of native methods."""
- template = Template("""\
-static const JNINativeMethod kMethods${JAVA_CLASS}[] = {
-${KMETHODS}
-};
-""")
- return self.SubstituteNativeMethods(template)
-
def GetRegisterCalledByNativesImplString(self):
"""Returns the code for registering the called by native methods."""
if not self.options.eager_called_by_natives:
@@ -825,10 +800,12 @@ ${KMETHODS}
def GetRegisterNativesString(self):
"""Returns the code for RegisterNatives."""
+
+ if not self.called_by_natives and not self.options.eager_called_by_natives :
+ return ''
template = Template("""\
${REGISTER_NATIVES_SIGNATURE} {
${CLASSES}
-${NATIVES}
${CALLED_BY_NATIVES}
return true;
}
@@ -839,30 +816,13 @@ ${CALLED_BY_NATIVES}
else:
signature += ')'
- natives = self.GetRegisterNativesImplString()
called_by_natives = self.GetRegisterCalledByNativesImplString()
values = {'REGISTER_NATIVES_SIGNATURE': signature,
'CLASSES': self.GetFindClasses(),
- 'NATIVES': natives,
'CALLED_BY_NATIVES': called_by_natives,
}
return template.substitute(values)
- def GetRegisterNativesImplString(self):
- """Returns the shared implementation for RegisterNatives."""
- template = Template("""\
- const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS});
-
- if (env->RegisterNatives(g_${JAVA_CLASS}_clazz,
- kMethods${JAVA_CLASS},
- kMethods${JAVA_CLASS}Size) < 0) {
- jni_generator::HandleRegistrationError(
- env, g_${JAVA_CLASS}_clazz, __FILE__);
- return false;
- }
-""")
- return self.SubstituteNativeMethods(template)
-
def GetJNIRegisterNativesString(self):
"""Returns the implementation for the JNI registration of native methods."""
if not self.init_native:
@@ -881,7 +841,6 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
values = {'FULLY_QUALIFIED_CLASS': fully_qualified_class,
'INIT_NATIVE_NAME': 'native' + self.init_native.name,
'NAMESPACE': namespace,
- 'REGISTER_NATIVES_IMPL': self.GetRegisterNativesImplString()
}
return template.substitute(values)
@@ -933,9 +892,16 @@ Java_${FULLY_QUALIFIED_CLASS}_${INIT_NATIVE_NAME}(JNIEnv* env, jclass clazz) {
def GetForwardDeclaration(self, native):
template = Template("""
static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS});
+__attribute__((alias("${NAME}"), visibility("default"))) ${RETURN}
+ Java_${JAVA_NAME}_native${NAME}(JNIEnv* env, ${PARAMS});
""")
+ java_name = JniParams.RemapClassName(self.fully_qualified_class).replace('_', '_1').replace('/', '_')
+ if native.java_class_name:
+ java_name += "_00024" + native.java_class_name
+
values = {'RETURN': JavaDataTypeToC(native.return_type),
'NAME': native.name,
+ 'JAVA_NAME': java_name,
'PARAMS': self.GetParamsInDeclaration(native)}
return template.substitute(values)
@@ -947,6 +913,9 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {
CHECK_NATIVE_PTR(env, jcaller, native, "${NAME}"${OPTIONAL_ERROR_RETURN});
return native->${NAME}(${PARAMS_IN_CALL})${POST_CALL};
}
+__attribute__((alias("${NAME}"), visibility("default")))
+ ${RETURN} Java_${JAVA_NAME}_native${NAME}(JNIEnv* env,
+ ${PARAMS_IN_DECLARATION});
""")
params = []
if not self.options.pure_native_methods:
@@ -960,9 +929,13 @@ static ${RETURN} ${NAME}(JNIEnv* env, ${PARAMS_IN_DECLARATION}) {
post_call = ''
if re.match(RE_SCOPED_JNI_RETURN_TYPES, return_type):
post_call = '.Release()'
+ java_name = JniParams.RemapClassName(self.fully_qualified_class).replace('_', '_1').replace('/', '_')
+ if native.java_class_name:
+ java_name += "_00024" + native.java_class_name
values = {
'RETURN': return_type,
'OPTIONAL_ERROR_RETURN': optional_error_return,
+ 'JAVA_NAME': java_name,
'NAME': native.name,
'PARAMS_IN_DECLARATION': self.GetParamsInDeclaration(native),
'PARAM0_NAME': native.params[0].name,
@@ -1098,12 +1071,11 @@ ${FUNCTION_HEADER}
def GetClassPathDefinitions(self):
"""Returns the ClassPath constants."""
ret = []
+ if not self.called_by_natives:
+ return ''
template = Template("""\
const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""")
- native_classes = self.GetUniqueClasses(self.natives)
- called_by_native_classes = self.GetUniqueClasses(self.called_by_natives)
- all_classes = native_classes
- all_classes.update(called_by_native_classes)
+ all_classes = self.GetUniqueClasses(self.called_by_natives)
for clazz in all_classes:
values = {
'JAVA_CLASS': clazz,
@@ -1111,7 +1083,7 @@ const char k${JAVA_CLASS}ClassPath[] = "${JNI_CLASS_PATH}";""")
}
ret += [template.substitute(values)]
ret += ''
- for clazz in called_by_native_classes:
+ for clazz in all_classes:
template = Template("""\
// Leaking this jclass as we cannot use LazyInstance from some threads.
jclass g_${JAVA_CLASS}_clazz = NULL;""")
@@ -1122,6 +1094,8 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
return '\n'.join(ret)
def GetFindClasses(self):
+ if not self.called_by_natives:
+ return ''
"""Returns the imlementation of FindClass for all known classes."""
if self.init_native:
template = Template("""\

Powered by Google App Engine
This is Rietveld 408576698