Revert 290810 "Make class lookup lazy in jni_generator when usin..."
> Make class lookup lazy in jni_generator when using lazy method lookup.
>
> This removes the eager class registration from RegisterNatives when possible.
>
> BUG=402003
> TBR=sievers@chromium.org, brettw@chromium.org
>
> Review URL: https://codereview.chromium.org/472553002
TBR=mkosiba@chromium.org
Review URL: https://codereview.chromium.org/492713002
Cr-Commit-Position: refs/heads/master@{#290813}
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290813 0039d316-1c4b-4281-b951-d872f2087c98
CrOS-Libchrome-Original-Commit: 3b2dba9f6b113b03dc71ba5b9195a27fda2e945a
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index a1d8790..88332fa 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -731,7 +731,7 @@
def GetContent(self):
"""Returns the content of the JNI binding file."""
template = Template("""\
-// Copyright 2014 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -947,11 +947,11 @@
template = Template("""\
const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS});
- if (env->RegisterNatives(${JAVA_CLASS}_clazz(env),
+ if (env->RegisterNatives(g_${JAVA_CLASS}_clazz,
kMethods${JAVA_CLASS},
kMethods${JAVA_CLASS}Size) < 0) {
jni_generator::HandleRegistrationError(
- env, ${JAVA_CLASS}_clazz(env), __FILE__);
+ env, g_${JAVA_CLASS}_clazz, __FILE__);
return false;
}
""")
@@ -1122,10 +1122,11 @@
def GetCalledByNativeValues(self, called_by_native):
"""Fills in necessary values for the CalledByNative methods."""
- java_class = called_by_native.java_class_name or self.class_name
if called_by_native.static or called_by_native.is_constructor:
first_param_in_declaration = ''
- first_param_in_call = ('%s_clazz(env)' % java_class)
+ first_param_in_call = ('g_%s_clazz' %
+ (called_by_native.java_class_name or
+ self.class_name))
else:
first_param_in_declaration = ', jobject obj'
first_param_in_call = 'obj'
@@ -1159,7 +1160,7 @@
else:
return_clause = 'return ret;'
return {
- 'JAVA_CLASS': java_class,
+ 'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
'RETURN_TYPE': return_type,
'OPTIONAL_ERROR_RETURN': optional_error_return,
'RETURN_DECLARATION': return_declaration,
@@ -1203,7 +1204,7 @@
${FUNCTION_HEADER}
/* Must call RegisterNativesImpl() */
CHECK_CLAZZ(env, ${FIRST_PARAM_IN_CALL},
- ${JAVA_CLASS}_clazz(env)${OPTIONAL_ERROR_RETURN});
+ g_${JAVA_CLASS}_clazz${OPTIONAL_ERROR_RETURN});
jmethodID method_id =
${GET_METHOD_ID_IMPL}
${RETURN_DECLARATION}
@@ -1262,56 +1263,22 @@
}
ret += [template.substitute(values)]
ret += ''
-
- class_getter_methods = []
- if self.options.native_exports:
- template = Template("""\
-// Leaking this jclass as we cannot use LazyInstance from some threads.
-base::subtle::AtomicWord g_${JAVA_CLASS}_clazz = 0;
-jclass ${JAVA_CLASS}_clazz(JNIEnv* env) {
- return base::android::LazyGetClass(env, k${JAVA_CLASS}ClassPath, \
- &g_${JAVA_CLASS}_clazz);
-}""")
- else:
- template = Template("""\
-// Leaking this jclass as we cannot use LazyInstance from some threads.
-jclass g_${JAVA_CLASS}_clazz = NULL;
-jclass ${JAVA_CLASS}_clazz(JNIEnv*) { return g_${JAVA_CLASS}_clazz; }""")
-
for clazz in called_by_native_classes:
+ template = Template("""\
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_${JAVA_CLASS}_clazz = NULL;""")
values = {
'JAVA_CLASS': clazz,
}
- class_getter_methods += [template.substitute(values)]
-
- template = Template("""\
-#if __clang__
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wunused-function"
-#endif
-${CLASS_GETER_METHODS}
-#if __clang__
-#pragma clang diagnostic pop
-#endif""")
- values = {
- 'CLASS_GETER_METHODS': '\n'.join(class_getter_methods)
- }
- ret += [template.substitute(values)]
+ ret += [template.substitute(values)]
return '\n'.join(ret)
def GetFindClasses(self):
"""Returns the imlementation of FindClass for all known classes."""
if self.init_native:
- if self.options.native_exports:
- template = Template("""\
- base::subtle::Release_Store(&g_${JAVA_CLASS}_clazz,
- static_cast<base::subtle::AtomicWord>(env->NewWeakGlobalRef(clazz));""")
- else:
- template = Template("""\
+ template = Template("""\
g_${JAVA_CLASS}_clazz = static_cast<jclass>(env->NewWeakGlobalRef(clazz));""")
else:
- if self.options.native_exports:
- return '\n'
template = Template("""\
g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""")
@@ -1326,13 +1293,13 @@
if self.options.eager_called_by_natives:
template = Template("""\
env->Get${STATIC_METHOD_PART}MethodID(
- ${JAVA_CLASS}_clazz(env),
+ g_${JAVA_CLASS}_clazz,
"${JNI_NAME}", ${JNI_SIGNATURE});""")
else:
template = Template("""\
base::android::MethodID::LazyGet<
base::android::MethodID::TYPE_${STATIC}>(
- env, ${JAVA_CLASS}_clazz(env),
+ env, g_${JAVA_CLASS}_clazz,
"${JNI_NAME}",
${JNI_SIGNATURE},
&g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});