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


CrOS-Libchrome-Original-Commit: ec34c46c7888ff496b4599a11a154ff84f399553
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 @@
   };
   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 @@
 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 @@
 }""")
     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 @@
     """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 @@
     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 @@
   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 @@
   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,