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

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: Tidy up + tests 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 de3532f878775779da6a41dec0f74bc07242c7b5..d9ca19edd602124747ee7e2c1dd172017fd90ea0 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -471,7 +471,7 @@ class JNIFromJavaP(object):
if not match:
continue
self.called_by_natives += [CalledByNative(
- system_class=False,
+ system_class=True,
unchecked=False,
static=False,
java_class_name='',
@@ -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);
$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:
@@ -795,7 +783,7 @@ static jmethodID 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});
+ ${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};
@@ -853,6 +841,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 +910,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(
- env, g_${JAVA_CLASS}_clazz,
- "${JNI_NAME}",
- ${JNI_SIGNATURE});
+ template = Template("""
+ base::android::LazyMethodID::Get<
+ base::android::LazyMethodID::METHODTYPE_${STATIC},
+ base::android::LazyMethodID::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,7 +928,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 '',
+ '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)

Powered by Google App Engine
This is Rietveld 408576698