summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornileshagrawal@chromium.org <nileshagrawal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-09 09:07:13 +0000
committernileshagrawal@chromium.org <nileshagrawal@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-09 09:07:13 +0000
commita862b97f3c826da2d5a1d8926d2780a91fc2c833 (patch)
treed0b26de62a670e9d3a0edbe3262a886a8c68cb4d
parente641603377cbaf89e1ddaec9a8e9db8272b92aa4 (diff)
downloadchromium_src-a862b97f3c826da2d5a1d8926d2780a91fc2c833.zip
chromium_src-a862b97f3c826da2d5a1d8926d2780a91fc2c833.tar.gz
chromium_src-a862b97f3c826da2d5a1d8926d2780a91fc2c833.tar.bz2
Android: Use scoped local ref in jni_generator.
Using GetUnscopedClass can cause "local reference table overflow" in dalvikvm if RegisterNatives is called too many times. This showed up in cc_unittests where multiple calls to init the media library caused an overflow. BUG=229261 Review URL: https://chromiumcodereview.appspot.com/13885002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@193052 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--base/android/jni_generator/golden_sample_for_tests_jni.h6
-rwxr-xr-xbase/android/jni_generator/jni_generator.py2
-rwxr-xr-xbase/android/jni_generator/jni_generator_tests.py14
3 files changed, 11 insertions, 11 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 bba64ba..2c5f6c0 100644
--- a/base/android/jni_generator/golden_sample_for_tests_jni.h
+++ b/base/android/jni_generator/golden_sample_for_tests_jni.h
@@ -301,11 +301,11 @@ static ScopedJavaLocalRef<jstring> Java_InnerStructB_getValue(JNIEnv* env,
static bool RegisterNativesImpl(JNIEnv* env) {
g_InnerStructA_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kInnerStructAClassPath)));
+ base::android::GetClass(env, kInnerStructAClassPath).obj()));
g_SampleForTests_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kSampleForTestsClassPath)));
+ base::android::GetClass(env, kSampleForTestsClassPath).obj()));
g_InnerStructB_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kInnerStructBClassPath)));
+ base::android::GetClass(env, kInnerStructBClassPath).obj()));
static const JNINativeMethod kMethodsSampleForTests[] = {
{ "nativeInit",
"("
diff --git a/base/android/jni_generator/jni_generator.py b/base/android/jni_generator/jni_generator.py
index a6475e5..f71f553 100755
--- a/base/android/jni_generator/jni_generator.py
+++ b/base/android/jni_generator/jni_generator.py
@@ -878,7 +878,7 @@ jclass g_${JAVA_CLASS}_clazz = NULL;""")
"""Returns the imlementation of FindClass for all known classes."""
template = Template("""\
g_${JAVA_CLASS}_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, k${JAVA_CLASS}ClassPath)));""")
+ base::android::GetClass(env, k${JAVA_CLASS}ClassPath).obj()));""")
ret = []
for clazz in self.GetUniqueClasses(self.called_by_natives):
values = {'JAVA_CLASS': clazz}
diff --git a/base/android/jni_generator/jni_generator_tests.py b/base/android/jni_generator/jni_generator_tests.py
index 6d539ad..f6dd3c9 100755
--- a/base/android/jni_generator/jni_generator_tests.py
+++ b/base/android/jni_generator/jni_generator_tests.py
@@ -325,7 +325,7 @@ static void GotOrientation(JNIEnv* env, jobject obj,
static bool RegisterNativesImpl(JNIEnv* env) {
g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kTestJniClassPath)));
+ base::android::GetClass(env, kTestJniClassPath).obj()));
static const JNINativeMethod kMethodsTestJni[] = {
{ "nativeInit",
"("
@@ -483,7 +483,7 @@ static jint Init(JNIEnv* env, jobject obj);
static bool RegisterNativesImpl(JNIEnv* env) {
g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kTestJniClassPath)));
+ base::android::GetClass(env, kTestJniClassPath).obj()));
static const JNINativeMethod kMethodsMyInnerClass[] = {
{ "nativeInit",
"("
@@ -574,7 +574,7 @@ static jint Init(JNIEnv* env, jobject obj);
static bool RegisterNativesImpl(JNIEnv* env) {
g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kTestJniClassPath)));
+ base::android::GetClass(env, kTestJniClassPath).obj()));
static const JNINativeMethod kMethodsMyOtherInnerClass[] = {
{ "nativeInit",
"("
@@ -679,7 +679,7 @@ static jint Init(JNIEnv* env, jobject obj);
static bool RegisterNativesImpl(JNIEnv* env) {
g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kTestJniClassPath)));
+ base::android::GetClass(env, kTestJniClassPath).obj()));
static const JNINativeMethod kMethodsMyOtherInnerClass[] = {
{ "nativeInit",
"("
@@ -1505,9 +1505,9 @@ static ScopedJavaLocalRef<jobject> Java_TestJni_getCompressFormatList(JNIEnv*
static bool RegisterNativesImpl(JNIEnv* env) {
g_TestJni_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kTestJniClassPath)));
+ base::android::GetClass(env, kTestJniClassPath).obj()));
g_InfoBar_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kInfoBarClassPath)));
+ base::android::GetClass(env, kInfoBarClassPath).obj()));
return true;
}
@@ -1870,7 +1870,7 @@ static ScopedJavaLocalRef<jobject> Java_InputStream_Constructor(JNIEnv* env) {
static bool RegisterNativesImpl(JNIEnv* env) {
g_InputStream_clazz = reinterpret_cast<jclass>(env->NewGlobalRef(
- base::android::GetUnscopedClass(env, kInputStreamClassPath)));
+ base::android::GetClass(env, kInputStreamClassPath).obj()));
return true;
}
} // namespace JNI_InputStream