summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-01 15:51:51 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-01 15:51:51 +0000
commitec34c46c7888ff496b4599a11a154ff84f399553 (patch)
tree11e8b1cfe57c037a990340c3e5115aab78901259
parent1125eece219e7ff2e2f3cfcd37a35b5d8d114bed (diff)
downloadchromium_src-ec34c46c7888ff496b4599a11a154ff84f399553.zip
chromium_src-ec34c46c7888ff496b4599a11a154ff84f399553.tar.gz
chromium_src-ec34c46c7888ff496b4599a11a154ff84f399553.tar.bz2
Fixes JNI Bindings & startup perf.
This patch follows digit's suggestions: - Removes ScopedJavaObject for jclasses. - Uses const char kFoo[] rather than pointers. BUG= TEST=base/android/jni_generator/jni_generator_tests.py Review URL: http://codereview.chromium.org/9466024 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@124413 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/android/jni_generator/golden_sample_for_tests_jni.h86
-rw-r--r--base/android/jni_generator/jni_generator.py27
-rw-r--r--base/android/jni_generator/jni_generator_tests.py256
3 files changed, 188 insertions, 181 deletions
diff --git a/base/android/jni_generator/golden_sample_for_tests_jni.h b/base/android/jni_generator/golden_sample_for_tests_jni.h
index 10bc633..336bdce 100644
--- a/base/android/jni_generator/golden_sample_for_tests_jni.h
+++ b/base/android/jni_generator/golden_sample_for_tests_jni.h
@@ -22,18 +22,14 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kInnerClassClassPath =
+const char kInnerClassClassPath[] =
"org/chromium/example/jni_generator/SampleForTests$InnerClass";
-const char* const kSampleForTestsClassPath =
+const char kSampleForTestsClassPath[] =
"org/chromium/example/jni_generator/SampleForTests";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_InnerClass_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_SampleForTests_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_InnerClass_clazz = NULL;
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_SampleForTests_clazz = NULL;
} // namespace
static jint Init(JNIEnv* env, jobject obj);
@@ -90,7 +86,7 @@ static jmethodID g_SampleForTests_javaMethod = 0;
static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, jint foo,
jint bar) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_SampleForTests_clazz.is_null());
+ DCHECK(g_SampleForTests_clazz);
DCHECK(g_SampleForTests_javaMethod);
jint ret =
env->CallIntMethod(obj,
@@ -102,10 +98,10 @@ static jint Java_SampleForTests_javaMethod(JNIEnv* env, jobject obj, jint foo,
static jmethodID g_SampleForTests_staticJavaMethod = 0;
static jboolean Java_SampleForTests_staticJavaMethod(JNIEnv* env) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_SampleForTests_clazz.is_null());
+ DCHECK(g_SampleForTests_clazz);
DCHECK(g_SampleForTests_staticJavaMethod);
jboolean ret =
- env->CallStaticBooleanMethod(g_SampleForTests_clazz.obj(),
+ env->CallStaticBooleanMethod(g_SampleForTests_clazz,
g_SampleForTests_staticJavaMethod);
base::android::CheckException(env);
return ret;
@@ -115,7 +111,7 @@ static jmethodID g_SampleForTests_packagePrivateJavaMethod = 0;
static void Java_SampleForTests_packagePrivateJavaMethod(JNIEnv* env, jobject
obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_SampleForTests_clazz.is_null());
+ DCHECK(g_SampleForTests_clazz);
DCHECK(g_SampleForTests_packagePrivateJavaMethod);
env->CallVoidMethod(obj,
@@ -128,7 +124,7 @@ static jmethodID g_SampleForTests_methodThatThrowsException = 0;
static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject
obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_SampleForTests_clazz.is_null());
+ DCHECK(g_SampleForTests_clazz);
DCHECK(g_SampleForTests_methodThatThrowsException);
env->CallVoidMethod(obj,
@@ -140,7 +136,7 @@ static void Java_SampleForTests_methodThatThrowsException(JNIEnv* env, jobject
static jmethodID g_InnerClass_JavaInnerMethod = 0;
static jfloat Java_InnerClass_JavaInnerMethod(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InnerClass_clazz.is_null());
+ DCHECK(g_InnerClass_clazz);
DCHECK(g_InnerClass_JavaInnerMethod);
jfloat ret =
env->CallFloatMethod(obj,
@@ -152,10 +148,10 @@ static jfloat Java_InnerClass_JavaInnerMethod(JNIEnv* env, jobject obj) {
static jmethodID g_InnerClass_javaInnerFunction = 0;
static void Java_InnerClass_javaInnerFunction(JNIEnv* env) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InnerClass_clazz.is_null());
+ DCHECK(g_InnerClass_clazz);
DCHECK(g_InnerClass_javaInnerFunction);
- env->CallStaticVoidMethod(g_InnerClass_clazz.obj(),
+ env->CallStaticVoidMethod(g_InnerClass_clazz,
g_InnerClass_javaInnerFunction);
base::android::CheckException(env);
@@ -165,13 +161,14 @@ static void Java_InnerClass_javaInnerFunction(JNIEnv* env) {
static void GetMethodIDsImpl(JNIEnv* env) {
- g_InnerClass_clazz.Reset(
- base::android::GetClass(env, kInnerClassClassPath));
- g_SampleForTests_clazz.Reset(
- base::android::GetClass(env, kSampleForTestsClassPath));
- g_SampleForTests_javaMethod = base::android::GetMethodID(
- env, g_SampleForTests_clazz,
- "javaMethod",
+ g_InnerClass_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kInnerClassClassPath)));
+ g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kSampleForTestsClassPath)));
+ g_SampleForTests_javaMethod =
+ base::android::GetMethodID(
+ env, g_SampleForTests_clazz,
+ "javaMethod",
"("
"I"
@@ -179,41 +176,46 @@ static void GetMethodIDsImpl(JNIEnv* env) {
")"
"I");
- g_SampleForTests_staticJavaMethod = base::android::GetStaticMethodID(
- env, g_SampleForTests_clazz,
- "staticJavaMethod",
+ g_SampleForTests_staticJavaMethod =
+ base::android::GetStaticMethodID(
+ env, g_SampleForTests_clazz,
+ "staticJavaMethod",
"("
")"
"Z");
- g_SampleForTests_packagePrivateJavaMethod = base::android::GetMethodID(
- env, g_SampleForTests_clazz,
- "packagePrivateJavaMethod",
+ g_SampleForTests_packagePrivateJavaMethod =
+ base::android::GetMethodID(
+ env, g_SampleForTests_clazz,
+ "packagePrivateJavaMethod",
"("
")"
"V");
- g_SampleForTests_methodThatThrowsException = base::android::GetMethodID(
- env, g_SampleForTests_clazz,
- "methodThatThrowsException",
+ g_SampleForTests_methodThatThrowsException =
+ base::android::GetMethodID(
+ env, g_SampleForTests_clazz,
+ "methodThatThrowsException",
"("
")"
"V");
- g_InnerClass_JavaInnerMethod = base::android::GetMethodID(
- env, g_InnerClass_clazz,
- "JavaInnerMethod",
+ g_InnerClass_JavaInnerMethod =
+ base::android::GetMethodID(
+ env, g_InnerClass_clazz,
+ "JavaInnerMethod",
"("
")"
"F");
- g_InnerClass_javaInnerFunction = base::android::GetStaticMethodID(
- env, g_InnerClass_clazz,
- "javaInnerFunction",
+ g_InnerClass_javaInnerFunction =
+ base::android::GetStaticMethodID(
+ env, g_InnerClass_clazz,
+ "javaInnerFunction",
"("
")"
@@ -237,7 +239,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
};
const int kMethodsInnerClassSize = arraysize(kMethodsInnerClass);
- if (env->RegisterNatives(g_InnerClass_clazz.obj(),
+ if (env->RegisterNatives(g_InnerClass_clazz,
kMethodsInnerClass,
kMethodsInnerClassSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -284,7 +286,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
};
const int kMethodsSampleForTestsSize = arraysize(kMethodsSampleForTests);
- if (env->RegisterNatives(g_SampleForTests_clazz.obj(),
+ if (env->RegisterNatives(g_SampleForTests_clazz,
kMethodsSampleForTests,
kMethodsSampleForTestsSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index 0a42f4c..8cccb3e 100644
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -605,7 +605,7 @@ ${KMETHODS}
};
const int kMethods${JAVA_CLASS}Size = arraysize(kMethods${JAVA_CLASS});
- if (env->RegisterNatives(g_${JAVA_CLASS}_clazz.obj(),
+ if (env->RegisterNatives(g_${JAVA_CLASS}_clazz,
kMethods${JAVA_CLASS},
kMethods${JAVA_CLASS}Size) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -724,7 +724,7 @@ ${FUNCTION_SIGNATURE} {""")
static jmethodID g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} = 0;
${FUNCTION_HEADER}
/* Must call RegisterNativesImpl() */
- DCHECK(!g_${JAVA_CLASS}_clazz.is_null());
+ DCHECK(g_${JAVA_CLASS}_clazz);
DCHECK(g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME});
${RETURN_DECLARATION}
${PRE_CALL}env->Call${STATIC}${ENV_CALL}Method(${FIRST_PARAM_IN_CALL},
@@ -734,7 +734,7 @@ ${FUNCTION_HEADER}
}""")
if called_by_native.static:
first_param_in_declaration = ''
- first_param_in_call = ('g_%s_clazz.obj()' %
+ first_param_in_call = ('g_%s_clazz' %
(called_by_native.java_class_name or
self.class_name))
else:
@@ -816,7 +816,7 @@ ${FUNCTION_HEADER}
"""Returns the ClassPath constants."""
ret = []
template = Template("""\
-const char* const k${JAVA_CLASS}ClassPath = "${JNI_CLASS_PATH}";""")
+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
@@ -830,10 +830,8 @@ const char* const k${JAVA_CLASS}ClassPath = "${JNI_CLASS_PATH}";""")
ret += ''
for clazz in called_by_native_classes:
template = Template("""\
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_${JAVA_CLASS}_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());""")
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_${JAVA_CLASS}_clazz = NULL;""")
values = {
'JAVA_CLASS': clazz,
}
@@ -843,8 +841,8 @@ base::android::ScopedJavaGlobalRef<jclass>&
def GetFindClasses(self):
"""Returns the imlementation of FindClass for all known classes."""
template = Template("""\
- g_${JAVA_CLASS}_clazz.Reset(
- base::android::GetClass(env, k${JAVA_CLASS}ClassPath));""")
+ g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, k${JAVA_CLASS}ClassPath)));""")
ret = []
for clazz in self.GetUniqueClasses(self.called_by_natives):
values = {'JAVA_CLASS': clazz}
@@ -854,10 +852,11 @@ base::android::ScopedJavaGlobalRef<jclass>&
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,
- "${NAME}",
- ${JNI_SIGNATURE});
+ g_${JAVA_CLASS}_${METHOD_ID_VAR_NAME} =
+ base::android::Get${STATIC}MethodID(
+ env, g_${JAVA_CLASS}_clazz,
+ "${NAME}",
+ ${JNI_SIGNATURE});
""")
values = {
'JAVA_CLASS': called_by_native.java_class_name or self.class_name,
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
index 0c5c0ce..17767d5 100644
--- a/base/android/jni_generator/jni_generator_tests.py
+++ b/base/android/jni_generator/jni_generator_tests.py
@@ -47,6 +47,10 @@ class TestGenerator(unittest.TestCase):
print self.id()
for line in difflib.context_diff(stripped_golden, stripped_generated):
print line
+ print '\n\nGenerated'
+ print '=' * 80
+ print generated_text
+ print '=' * 80
self.fail('Golden text mismatch')
def testNatives(self):
@@ -227,11 +231,9 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kTestJniClassPath = "org/chromium/TestJni";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_TestJni_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+const char kTestJniClassPath[] = "org/chromium/TestJni";
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_TestJni_clazz = NULL;
} // namespace
static jint Init(JNIEnv* env, jobject obj);
@@ -331,8 +333,8 @@ static void GotOrientation(JNIEnv* env, jobject obj,
static void GetMethodIDsImpl(JNIEnv* env) {
- g_TestJni_clazz.Reset(
- base::android::GetClass(env, kTestJniClassPath));
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kTestJniClassPath)));
}
static bool RegisterNativesImpl(JNIEnv* env) {
@@ -426,7 +428,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
};
const int kMethodsTestJniSize = arraysize(kMethodsTestJni);
- if (env->RegisterNatives(g_TestJni_clazz.obj(),
+ if (env->RegisterNatives(g_TestJni_clazz,
kMethodsTestJni,
kMethodsTestJniSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -482,12 +484,10 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kTestJniClassPath = "org/chromium/TestJni";
-const char* const kMyInnerClassClassPath = "org/chromium/TestJni$MyInnerClass";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_TestJni_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+const char kTestJniClassPath[] = "org/chromium/TestJni";
+const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass";
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_TestJni_clazz = NULL;
} // namespace
static jint Init(JNIEnv* env, jobject obj);
@@ -500,8 +500,8 @@ static jint Init(JNIEnv* env, jobject obj);
static void GetMethodIDsImpl(JNIEnv* env) {
- g_TestJni_clazz.Reset(
- base::android::GetClass(env, kTestJniClassPath));
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kTestJniClassPath)));
}
static bool RegisterNativesImpl(JNIEnv* env) {
@@ -515,7 +515,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
};
const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass);
- if (env->RegisterNatives(g_MyInnerClass_clazz.obj(),
+ if (env->RegisterNatives(g_MyInnerClass_clazz,
kMethodsMyInnerClass,
kMethodsMyInnerClassSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -579,14 +579,12 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kMyOtherInnerClassClassPath =
+const char kMyOtherInnerClassClassPath[] =
"org/chromium/TestJni$MyOtherInnerClass";
-const char* const kTestJniClassPath = "org/chromium/TestJni";
-const char* const kMyInnerClassClassPath = "org/chromium/TestJni$MyInnerClass";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_TestJni_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+const char kTestJniClassPath[] = "org/chromium/TestJni";
+const char kMyInnerClassClassPath[] = "org/chromium/TestJni$MyInnerClass";
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_TestJni_clazz = NULL;
} // namespace
static jint Init(JNIEnv* env, jobject obj);
@@ -602,8 +600,8 @@ static jint Init(JNIEnv* env, jobject obj);
static void GetMethodIDsImpl(JNIEnv* env) {
- g_TestJni_clazz.Reset(
- base::android::GetClass(env, kTestJniClassPath));
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kTestJniClassPath)));
}
static bool RegisterNativesImpl(JNIEnv* env) {
@@ -618,7 +616,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsMyOtherInnerClassSize =
arraysize(kMethodsMyOtherInnerClass);
- if (env->RegisterNatives(g_MyOtherInnerClass_clazz.obj(),
+ if (env->RegisterNatives(g_MyOtherInnerClass_clazz,
kMethodsMyOtherInnerClass,
kMethodsMyOtherInnerClassSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -633,7 +631,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
};
const int kMethodsMyInnerClassSize = arraysize(kMethodsMyInnerClass);
- if (env->RegisterNatives(g_MyInnerClass_clazz.obj(),
+ if (env->RegisterNatives(g_MyInnerClass_clazz,
kMethodsMyInnerClass,
kMethodsMyInnerClassSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -696,13 +694,11 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kMyOtherInnerClassClassPath =
+const char kMyOtherInnerClassClassPath[] =
"org/chromium/TestJni$MyOtherInnerClass";
-const char* const kTestJniClassPath = "org/chromium/TestJni";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_TestJni_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+const char kTestJniClassPath[] = "org/chromium/TestJni";
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_TestJni_clazz = NULL;
} // namespace
static jint Init(JNIEnv* env, jobject obj);
@@ -718,8 +714,8 @@ static jint Init(JNIEnv* env, jobject obj);
static void GetMethodIDsImpl(JNIEnv* env) {
- g_TestJni_clazz.Reset(
- base::android::GetClass(env, kTestJniClassPath));
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kTestJniClassPath)));
}
static bool RegisterNativesImpl(JNIEnv* env) {
@@ -734,7 +730,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
const int kMethodsMyOtherInnerClassSize =
arraysize(kMethodsMyOtherInnerClass);
- if (env->RegisterNatives(g_MyOtherInnerClass_clazz.obj(),
+ if (env->RegisterNatives(g_MyOtherInnerClass_clazz,
kMethodsMyOtherInnerClass,
kMethodsMyOtherInnerClassSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -749,7 +745,7 @@ static bool RegisterNativesImpl(JNIEnv* env) {
};
const int kMethodsTestJniSize = arraysize(kMethodsTestJni);
- if (env->RegisterNatives(g_TestJni_clazz.obj(),
+ if (env->RegisterNatives(g_TestJni_clazz,
kMethodsTestJni,
kMethodsTestJniSize) < 0) {
LOG(ERROR) << "RegisterNatives failed in " << __FILE__;
@@ -934,16 +930,12 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kTestJniClassPath = "org/chromium/TestJni";
-const char* const kInfoBarClassPath = "org/chromium/TestJni$InfoBar";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_TestJni_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_InfoBar_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+const char kTestJniClassPath[] = "org/chromium/TestJni";
+const char kInfoBarClassPath[] = "org/chromium/TestJni$InfoBar";
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_TestJni_clazz = NULL;
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_InfoBar_clazz = NULL;
} // namespace
@@ -957,7 +949,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showConfirmInfoBar(JNIEnv* env,
jstring title,
jobject icon) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_TestJni_clazz.is_null());
+ DCHECK(g_TestJni_clazz);
DCHECK(g_TestJni_showConfirmInfoBar);
jobject ret =
env->CallObjectMethod(obj,
@@ -974,7 +966,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv*
jstring account,
jstring args) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_TestJni_clazz.is_null());
+ DCHECK(g_TestJni_clazz);
DCHECK(g_TestJni_showAutoLoginInfoBar);
jobject ret =
env->CallObjectMethod(obj,
@@ -986,7 +978,7 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_showAutoLoginInfoBar(JNIEnv*
static jmethodID g_InfoBar_dismiss = 0;
static void Java_InfoBar_dismiss(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InfoBar_clazz.is_null());
+ DCHECK(g_InfoBar_clazz);
DCHECK(g_InfoBar_dismiss);
env->CallVoidMethod(obj,
@@ -1002,10 +994,10 @@ static jboolean Java_TestJni_shouldShowAutoLogin(JNIEnv* env, jobject
jstring account,
jstring args) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_TestJni_clazz.is_null());
+ DCHECK(g_TestJni_clazz);
DCHECK(g_TestJni_shouldShowAutoLogin);
jboolean ret =
- env->CallStaticBooleanMethod(g_TestJni_clazz.obj(),
+ env->CallStaticBooleanMethod(g_TestJni_clazz,
g_TestJni_shouldShowAutoLogin, chromeView, realm, account, args);
base::android::CheckException(env);
return ret;
@@ -1015,10 +1007,10 @@ static jmethodID g_TestJni_openUrl = 0;
static ScopedJavaLocalRef<jobject> Java_TestJni_openUrl(JNIEnv* env, jstring
url) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_TestJni_clazz.is_null());
+ DCHECK(g_TestJni_clazz);
DCHECK(g_TestJni_openUrl);
jobject ret =
- env->CallStaticObjectMethod(g_TestJni_clazz.obj(),
+ env->CallStaticObjectMethod(g_TestJni_clazz,
g_TestJni_openUrl, url);
base::android::CheckException(env);
return ScopedJavaLocalRef<jobject>(env, ret);
@@ -1032,7 +1024,7 @@ static void Java_TestJni_activateHardwareAcceleration(JNIEnv* env, jobject obj,
jint iPrimaryID,
jint iSecondaryID) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_TestJni_clazz.is_null());
+ DCHECK(g_TestJni_clazz);
DCHECK(g_TestJni_activateHardwareAcceleration);
env->CallVoidMethod(obj,
@@ -1045,7 +1037,7 @@ static void Java_TestJni_activateHardwareAcceleration(JNIEnv* env, jobject obj,
static jmethodID g_TestJni_uncheckedCall = 0;
static void Java_TestJni_uncheckedCall(JNIEnv* env, jobject obj, jint iParam) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_TestJni_clazz.is_null());
+ DCHECK(g_TestJni_clazz);
DCHECK(g_TestJni_uncheckedCall);
env->CallVoidMethod(obj,
@@ -1058,13 +1050,14 @@ static void Java_TestJni_uncheckedCall(JNIEnv* env, jobject obj, jint iParam) {
static void GetMethodIDsImpl(JNIEnv* env) {
- g_TestJni_clazz.Reset(
- base::android::GetClass(env, kTestJniClassPath));
- g_InfoBar_clazz.Reset(
- base::android::GetClass(env, kInfoBarClassPath));
- g_TestJni_showConfirmInfoBar = base::android::GetMethodID(
- env, g_TestJni_clazz,
- "showConfirmInfoBar",
+ g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kTestJniClassPath)));
+ g_InfoBar_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kInfoBarClassPath)));
+ g_TestJni_showConfirmInfoBar =
+ base::android::GetMethodID(
+ env, g_TestJni_clazz,
+ "showConfirmInfoBar",
"("
"I"
@@ -1075,9 +1068,10 @@ static void GetMethodIDsImpl(JNIEnv* env) {
")"
"Lcom/android/chrome/infobar/InfoBarContainer$NativeInfoBar;");
- g_TestJni_showAutoLoginInfoBar = base::android::GetMethodID(
- env, g_TestJni_clazz,
- "showAutoLoginInfoBar",
+ g_TestJni_showAutoLoginInfoBar =
+ base::android::GetMethodID(
+ env, g_TestJni_clazz,
+ "showAutoLoginInfoBar",
"("
"I"
@@ -1087,17 +1081,19 @@ static void GetMethodIDsImpl(JNIEnv* env) {
")"
"Lcom/android/chrome/infobar/InfoBarContainer$NativeInfoBar;");
- g_InfoBar_dismiss = base::android::GetMethodID(
- env, g_InfoBar_clazz,
- "dismiss",
+ g_InfoBar_dismiss =
+ base::android::GetMethodID(
+ env, g_InfoBar_clazz,
+ "dismiss",
"("
")"
"V");
- g_TestJni_shouldShowAutoLogin = base::android::GetStaticMethodID(
- env, g_TestJni_clazz,
- "shouldShowAutoLogin",
+ g_TestJni_shouldShowAutoLogin =
+ base::android::GetStaticMethodID(
+ env, g_TestJni_clazz,
+ "shouldShowAutoLogin",
"("
"Lorg/chromium/chromeview/ChromeView;"
@@ -1107,18 +1103,20 @@ static void GetMethodIDsImpl(JNIEnv* env) {
")"
"Z");
- g_TestJni_openUrl = base::android::GetStaticMethodID(
- env, g_TestJni_clazz,
- "openUrl",
+ g_TestJni_openUrl =
+ base::android::GetStaticMethodID(
+ env, g_TestJni_clazz,
+ "openUrl",
"("
"Ljava/lang/String;"
")"
"Ljava/io/InputStream;");
- g_TestJni_activateHardwareAcceleration = base::android::GetMethodID(
- env, g_TestJni_clazz,
- "activateHardwareAcceleration",
+ g_TestJni_activateHardwareAcceleration =
+ base::android::GetMethodID(
+ env, g_TestJni_clazz,
+ "activateHardwareAcceleration",
"("
"Z"
@@ -1129,9 +1127,10 @@ static void GetMethodIDsImpl(JNIEnv* env) {
")"
"V");
- g_TestJni_uncheckedCall = base::android::GetMethodID(
- env, g_TestJni_clazz,
- "uncheckedCall",
+ g_TestJni_uncheckedCall =
+ base::android::GetMethodID(
+ env, g_TestJni_clazz,
+ "uncheckedCall",
"("
"I"
@@ -1236,11 +1235,9 @@ using base::android::ScopedJavaLocalRef;
// Step 1: forward declarations.
namespace {
-const char* const kInputStreamClassPath = "java/io/InputStream";
-// Leaking this JavaRef as we cannot use LazyInstance from some threads.
-base::android::ScopedJavaGlobalRef<jclass>&
- g_InputStream_clazz =
- *(new base::android::ScopedJavaGlobalRef<jclass>());
+const char kInputStreamClassPath[] = "java/io/InputStream";
+// Leaking this jclass as we cannot use LazyInstance from some threads.
+jclass g_InputStream_clazz = NULL;
} // namespace
@@ -1251,7 +1248,7 @@ static jint Java_InputStream_available(JNIEnv* env, jobject obj) __attribute__
((unused));
static jint Java_InputStream_available(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_available);
jint ret =
env->CallIntMethod(obj,
@@ -1265,7 +1262,7 @@ static void Java_InputStream_close(JNIEnv* env, jobject obj) __attribute__
((unused));
static void Java_InputStream_close(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_close);
env->CallVoidMethod(obj,
@@ -1279,7 +1276,7 @@ static void Java_InputStream_mark(JNIEnv* env, jobject obj, jint p0)
__attribute__ ((unused));
static void Java_InputStream_mark(JNIEnv* env, jobject obj, jint p0) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_mark);
env->CallVoidMethod(obj,
@@ -1293,7 +1290,7 @@ static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj)
__attribute__ ((unused));
static jboolean Java_InputStream_markSupported(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_markSupported);
jboolean ret =
env->CallBooleanMethod(obj,
@@ -1307,7 +1304,7 @@ static jint Java_InputStream_read(JNIEnv* env, jobject obj) __attribute__
((unused));
static jint Java_InputStream_read(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_read_pqI);
jint ret =
env->CallIntMethod(obj,
@@ -1321,7 +1318,7 @@ static jint Java_InputStream_read(JNIEnv* env, jobject obj, jbyteArray p0)
__attribute__ ((unused));
static jint Java_InputStream_read(JNIEnv* env, jobject obj, jbyteArray p0) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_read_paBqI);
jint ret =
env->CallIntMethod(obj,
@@ -1338,7 +1335,7 @@ static jint Java_InputStream_read(JNIEnv* env, jobject obj, jbyteArray p0,
jint p1,
jint p2) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_read_paBIIqI);
jint ret =
env->CallIntMethod(obj,
@@ -1352,7 +1349,7 @@ static void Java_InputStream_reset(JNIEnv* env, jobject obj) __attribute__
((unused));
static void Java_InputStream_reset(JNIEnv* env, jobject obj) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_reset);
env->CallVoidMethod(obj,
@@ -1366,7 +1363,7 @@ static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0)
__attribute__ ((unused));
static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) {
/* Must call RegisterNativesImpl() */
- DCHECK(!g_InputStream_clazz.is_null());
+ DCHECK(g_InputStream_clazz);
DCHECK(g_InputStream_skip);
jlong ret =
env->CallLongMethod(obj,
@@ -1379,61 +1376,68 @@ static jlong Java_InputStream_skip(JNIEnv* env, jobject obj, jlong p0) {
namespace JNI_InputStream {
static void GetMethodIDsImpl(JNIEnv* env) {
- g_InputStream_clazz.Reset(
- base::android::GetClass(env, kInputStreamClassPath));
- g_InputStream_available = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "available",
+ g_InputStream_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
+ base::android::GetUnscopedClass(env, kInputStreamClassPath)));
+ g_InputStream_available =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "available",
"("
")"
"I");
- g_InputStream_close = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "close",
+ g_InputStream_close =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "close",
"("
")"
"V");
- g_InputStream_mark = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "mark",
+ g_InputStream_mark =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "mark",
"("
"I"
")"
"V");
- g_InputStream_markSupported = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "markSupported",
+ g_InputStream_markSupported =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "markSupported",
"("
")"
"Z");
- g_InputStream_read_pqI = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "read",
+ g_InputStream_read_pqI =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "read",
"("
")"
"I");
- g_InputStream_read_paBqI = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "read",
+ g_InputStream_read_paBqI =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "read",
"("
"[B"
")"
"I");
- g_InputStream_read_paBIIqI = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "read",
+ g_InputStream_read_paBIIqI =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "read",
"("
"[B"
@@ -1442,17 +1446,19 @@ static void GetMethodIDsImpl(JNIEnv* env) {
")"
"I");
- g_InputStream_reset = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "reset",
+ g_InputStream_reset =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "reset",
"("
")"
"V");
- g_InputStream_skip = base::android::GetMethodID(
- env, g_InputStream_clazz,
- "skip",
+ g_InputStream_skip =
+ base::android::GetMethodID(
+ env, g_InputStream_clazz,
+ "skip",
"("
"J"