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

Unified Diff: base/android/jni_android.h

Issue 472553002: Make class lookup lazy in jni_generator when using lazy method lookup. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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_android.h
diff --git a/base/android/jni_android.h b/base/android/jni_android.h
index faf53b7400bbdecc305db289f470f05f70ab6251..8f72e78c8d8d36e23848d7f88607f31362782983 100644
--- a/base/android/jni_android.h
+++ b/base/android/jni_android.h
@@ -53,6 +53,15 @@ BASE_EXPORT bool IsVMInitialized();
BASE_EXPORT void InitApplicationContext(JNIEnv* env,
const JavaRef<jobject>& context);
+// Initializes the global fallback ClassLoader used by the GetClass and
+// LazyGetClass methods. This is needed because JNI will use the base
+// ClassLoader when there is no Java code on the stack. The base ClassLoader
+// doesn't know about any of the application classes and will fail to lookup
+// anything other than system classes.
+// The method must be called after base:: JNI registration had completed from a
+// thread that already has access to the right ClassLoader.
+BASE_EXPORT void InitFallbackClassLoader(JNIEnv* env);
+
// Gets a global ref to the application context set with
// InitApplicationContext(). Ownership is retained by the function - the caller
// must NOT release it.
@@ -66,6 +75,17 @@ const BASE_EXPORT jobject GetApplicationContext();
BASE_EXPORT ScopedJavaLocalRef<jclass> GetClass(JNIEnv* env,
const char* class_name);
+// The method will initialize |atomic_class_id| to contain a global ref to the
+// class. And will return that ref on subsequent calls. It's the caller's
+// responsibility to release the ref when it is no longer needed.
+// The caller is responsible to zero-initialize |atomic_method_id|.
+// It's fine to simultaneously call this on multiple threads referencing the
+// same |atomic_method_id|.
+BASE_EXPORT jclass LazyGetClass(
+ JNIEnv* env,
+ const char* class_name,
+ base::subtle::AtomicWord* atomic_class_id);
+
// This class is a wrapper for JNIEnv Get(Static)MethodID.
class BASE_EXPORT MethodID {
public:

Powered by Google App Engine
This is Rietveld 408576698