summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Carlstrom <bdc@google.com>2011-04-05 22:44:45 -0700
committerBrian Carlstrom <bdc@google.com>2011-04-06 10:04:20 -0700
commit46e18c11d46a2bc1a46174f963d0ed1224d94cd2 (patch)
tree266818e339e08cea909f21b9af492f5ffc83079d
parent14faa3bd8bd6d1deab63a40ad2f8b6e451a16208 (diff)
downloadframeworks_base-46e18c11d46a2bc1a46174f963d0ed1224d94cd2.zip
frameworks_base-46e18c11d46a2bc1a46174f963d0ed1224d94cd2.tar.gz
frameworks_base-46e18c11d46a2bc1a46174f963d0ed1224d94cd2.tar.bz2
Don't use local ref for cached jclass reference in JNI code
Change-Id: Id45b2acb358a819f2fd332e99f3a095f6fc7299b related-to-bug: 4241138
-rw-r--r--core/jni/android/graphics/Movie.cpp1
-rw-r--r--core/jni/android_media_AudioRecord.cpp13
-rw-r--r--core/jni/android_media_AudioTrack.cpp16
-rw-r--r--core/jni/android_net_NetUtils.cpp24
-rw-r--r--core/jni/android_view_GLES20Canvas.cpp4
-rw-r--r--media/jni/android_media_MediaMetadataRetriever.cpp26
-rw-r--r--packages/TtsService/jni/android_tts_SynthProxy.cpp2
-rw-r--r--services/jni/com_android_server_UsbService.cpp4
8 files changed, 38 insertions, 52 deletions
diff --git a/core/jni/android/graphics/Movie.cpp b/core/jni/android/graphics/Movie.cpp
index de18f9f..b319a74 100644
--- a/core/jni/android/graphics/Movie.cpp
+++ b/core/jni/android/graphics/Movie.cpp
@@ -137,7 +137,6 @@ static JNINativeMethod gMethods[] = {
#define RETURN_ERR_IF_NULL(value) do { if (!(value)) { assert(0); return -1; } } while (false)
-int register_android_graphics_Movie(JNIEnv* env);
int register_android_graphics_Movie(JNIEnv* env)
{
gMovie_class = env->FindClass(kClassPathName);
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index b6619ab..1b6b24f 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -41,7 +41,6 @@ static const char* const kClassPathName = "android/media/AudioRecord";
struct fields_t {
// these fields provide access from C++ to the...
- jclass audioRecordClass; //... AudioRecord class
jmethodID postNativeEventInJava; //... event post callback method
int PCM16; //... format constants
int PCM8; //... format constants
@@ -520,22 +519,20 @@ extern bool android_media_getIntConstantFromClass(JNIEnv* pEnv,
// ----------------------------------------------------------------------------
int register_android_media_AudioRecord(JNIEnv *env)
{
- javaAudioRecordFields.audioRecordClass = NULL;
javaAudioRecordFields.postNativeEventInJava = NULL;
javaAudioRecordFields.nativeRecorderInJavaObj = NULL;
javaAudioRecordFields.nativeCallbackCookie = NULL;
// Get the AudioRecord class
- javaAudioRecordFields.audioRecordClass = env->FindClass(kClassPathName);
- if (javaAudioRecordFields.audioRecordClass == NULL) {
+ jclass audioRecordClass = env->FindClass(kClassPathName);
+ if (audioRecordClass == NULL) {
LOGE("Can't find %s", kClassPathName);
return -1;
}
-
// Get the postEvent method
javaAudioRecordFields.postNativeEventInJava = env->GetStaticMethodID(
- javaAudioRecordFields.audioRecordClass,
+ audioRecordClass,
JAVA_POSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;IIILjava/lang/Object;)V");
if (javaAudioRecordFields.postNativeEventInJava == NULL) {
LOGE("Can't find AudioRecord.%s", JAVA_POSTEVENT_CALLBACK_NAME);
@@ -545,7 +542,7 @@ int register_android_media_AudioRecord(JNIEnv *env)
// Get the variables
// mNativeRecorderInJavaObj
javaAudioRecordFields.nativeRecorderInJavaObj =
- env->GetFieldID(javaAudioRecordFields.audioRecordClass,
+ env->GetFieldID(audioRecordClass,
JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME, "I");
if (javaAudioRecordFields.nativeRecorderInJavaObj == NULL) {
LOGE("Can't find AudioRecord.%s", JAVA_NATIVERECORDERINJAVAOBJ_FIELD_NAME);
@@ -553,7 +550,7 @@ int register_android_media_AudioRecord(JNIEnv *env)
}
// mNativeCallbackCookie
javaAudioRecordFields.nativeCallbackCookie = env->GetFieldID(
- javaAudioRecordFields.audioRecordClass,
+ audioRecordClass,
JAVA_NATIVECALLBACKINFO_FIELD_NAME, "I");
if (javaAudioRecordFields.nativeCallbackCookie == NULL) {
LOGE("Can't find AudioRecord.%s", JAVA_NATIVECALLBACKINFO_FIELD_NAME);
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index 44d2a52..587a16c 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -43,7 +43,6 @@ static const char* const kClassPathName = "android/media/AudioTrack";
struct fields_t {
// these fields provide access from C++ to the...
- jclass audioTrackClass; //... AudioTrack class
jmethodID postNativeEventInJava; //... event post callback method
int PCM16; //... format constants
int PCM8; //... format constants
@@ -915,20 +914,19 @@ bool android_media_getIntConstantFromClass(JNIEnv* pEnv, jclass theClass, const
// ----------------------------------------------------------------------------
int register_android_media_AudioTrack(JNIEnv *env)
{
- javaAudioTrackFields.audioTrackClass = NULL;
javaAudioTrackFields.nativeTrackInJavaObj = NULL;
javaAudioTrackFields.postNativeEventInJava = NULL;
// Get the AudioTrack class
- javaAudioTrackFields.audioTrackClass = env->FindClass(kClassPathName);
- if (javaAudioTrackFields.audioTrackClass == NULL) {
+ jclass audioTrackClass = env->FindClass(kClassPathName);
+ if (audioTrackClass == NULL) {
LOGE("Can't find %s", kClassPathName);
return -1;
}
// Get the postEvent method
javaAudioTrackFields.postNativeEventInJava = env->GetStaticMethodID(
- javaAudioTrackFields.audioTrackClass,
+ audioTrackClass,
JAVA_POSTEVENT_CALLBACK_NAME, "(Ljava/lang/Object;IIILjava/lang/Object;)V");
if (javaAudioTrackFields.postNativeEventInJava == NULL) {
LOGE("Can't find AudioTrack.%s", JAVA_POSTEVENT_CALLBACK_NAME);
@@ -938,7 +936,7 @@ int register_android_media_AudioTrack(JNIEnv *env)
// Get the variables fields
// nativeTrackInJavaObj
javaAudioTrackFields.nativeTrackInJavaObj = env->GetFieldID(
- javaAudioTrackFields.audioTrackClass,
+ audioTrackClass,
JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME, "I");
if (javaAudioTrackFields.nativeTrackInJavaObj == NULL) {
LOGE("Can't find AudioTrack.%s", JAVA_NATIVETRACKINJAVAOBJ_FIELD_NAME);
@@ -946,7 +944,7 @@ int register_android_media_AudioTrack(JNIEnv *env)
}
// jniData;
javaAudioTrackFields.jniData = env->GetFieldID(
- javaAudioTrackFields.audioTrackClass,
+ audioTrackClass,
JAVA_JNIDATA_FIELD_NAME, "I");
if (javaAudioTrackFields.jniData == NULL) {
LOGE("Can't find AudioTrack.%s", JAVA_JNIDATA_FIELD_NAME);
@@ -954,10 +952,10 @@ int register_android_media_AudioTrack(JNIEnv *env)
}
// Get the memory mode constants
- if ( !android_media_getIntConstantFromClass(env, javaAudioTrackFields.audioTrackClass,
+ if ( !android_media_getIntConstantFromClass(env, audioTrackClass,
kClassPathName,
JAVA_CONST_MODE_STATIC_NAME, &(javaAudioTrackFields.MODE_STATIC))
- || !android_media_getIntConstantFromClass(env, javaAudioTrackFields.audioTrackClass,
+ || !android_media_getIntConstantFromClass(env, audioTrackClass,
kClassPathName,
JAVA_CONST_MODE_STREAM_NAME, &(javaAudioTrackFields.MODE_STREAM)) ) {
// error log performed in android_media_getIntConstantFromClass()
diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp
index 3adf770..db132ec 100644
--- a/core/jni/android_net_NetUtils.cpp
+++ b/core/jni/android_net_NetUtils.cpp
@@ -55,7 +55,6 @@ namespace android {
* to look them up every time.
*/
static struct fieldIds {
- jclass dhcpInfoInternalClass;
jmethodID constructorId;
jfieldID ipaddress;
jfieldID gateway;
@@ -163,7 +162,7 @@ static jboolean android_net_utils_runDhcp(JNIEnv* env, jobject clazz, jstring if
result = ::dhcp_do_request(nameStr, ipaddr, gateway, &prefixLength,
dns1, dns2, server, &lease);
env->ReleaseStringUTFChars(ifname, nameStr);
- if (result == 0 && dhcpInfoInternalFieldIds.dhcpInfoInternalClass != NULL) {
+ if (result == 0) {
env->SetObjectField(info, dhcpInfoInternalFieldIds.ipaddress, env->NewStringUTF(ipaddr));
env->SetObjectField(info, dhcpInfoInternalFieldIds.gateway, env->NewStringUTF(gateway));
env->SetIntField(info, dhcpInfoInternalFieldIds.prefixLength, prefixLength);
@@ -229,17 +228,16 @@ int register_android_net_NetworkUtils(JNIEnv* env)
jclass netutils = env->FindClass(NETUTILS_PKG_NAME);
LOG_FATAL_IF(netutils == NULL, "Unable to find class " NETUTILS_PKG_NAME);
- dhcpInfoInternalFieldIds.dhcpInfoInternalClass = env->FindClass("android/net/DhcpInfoInternal");
- if (dhcpInfoInternalFieldIds.dhcpInfoInternalClass != NULL) {
- dhcpInfoInternalFieldIds.constructorId = env->GetMethodID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "<init>", "()V");
- dhcpInfoInternalFieldIds.ipaddress = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "ipAddress", "Ljava/lang/String;");
- dhcpInfoInternalFieldIds.gateway = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "gateway", "Ljava/lang/String;");
- dhcpInfoInternalFieldIds.prefixLength = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "prefixLength", "I");
- dhcpInfoInternalFieldIds.dns1 = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "dns1", "Ljava/lang/String;");
- dhcpInfoInternalFieldIds.dns2 = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "dns2", "Ljava/lang/String;");
- dhcpInfoInternalFieldIds.serverAddress = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "serverAddress", "Ljava/lang/String;");
- dhcpInfoInternalFieldIds.leaseDuration = env->GetFieldID(dhcpInfoInternalFieldIds.dhcpInfoInternalClass, "leaseDuration", "I");
- }
+ jclass dhcpInfoInternalClass = env->FindClass("android/net/DhcpInfoInternal");
+ LOG_FATAL_IF(dhcpInfoInternalClass == NULL, "Unable to find class android/net/DhcpInfoInternal");
+ dhcpInfoInternalFieldIds.constructorId = env->GetMethodID(dhcpInfoInternalClass, "<init>", "()V");
+ dhcpInfoInternalFieldIds.ipaddress = env->GetFieldID(dhcpInfoInternalClass, "ipAddress", "Ljava/lang/String;");
+ dhcpInfoInternalFieldIds.gateway = env->GetFieldID(dhcpInfoInternalClass, "gateway", "Ljava/lang/String;");
+ dhcpInfoInternalFieldIds.prefixLength = env->GetFieldID(dhcpInfoInternalClass, "prefixLength", "I");
+ dhcpInfoInternalFieldIds.dns1 = env->GetFieldID(dhcpInfoInternalClass, "dns1", "Ljava/lang/String;");
+ dhcpInfoInternalFieldIds.dns2 = env->GetFieldID(dhcpInfoInternalClass, "dns2", "Ljava/lang/String;");
+ dhcpInfoInternalFieldIds.serverAddress = env->GetFieldID(dhcpInfoInternalClass, "serverAddress", "Ljava/lang/String;");
+ dhcpInfoInternalFieldIds.leaseDuration = env->GetFieldID(dhcpInfoInternalClass, "leaseDuration", "I");
return AndroidRuntime::registerNativeMethods(env,
NETUTILS_PKG_NAME, gNetworkUtilMethods, NELEM(gNetworkUtilMethods));
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 9a727a7..f31bba9 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -736,9 +736,9 @@ const char* const kActivityThreadPathName = "android/app/ActivityThread";
int register_android_app_ActivityThread(JNIEnv* env)
{
- jclass gFileDescriptorClass = env->FindClass("java/io/FileDescriptor");
+ jclass fileDescriptorClass = env->FindClass("java/io/FileDescriptor");
LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor");
- gFileDescriptorField = env->GetFieldID(gFileDescriptorClass, "descriptor", "I");
+ gFileDescriptorField = env->GetFieldID(fileDescriptorClass, "descriptor", "I");
LOG_FATAL_IF(gFileDescriptorField == NULL,
"Unable to find descriptor field in java.io.FileDescriptor");
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index 5d9a3c5..27b37b7 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -441,19 +441,20 @@ static void android_media_MediaMetadataRetriever_native_init(JNIEnv *env)
{
jclass clazz = env->FindClass(kClassPathName);
if (clazz == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Can't find android/media/MediaMetadataRetriever");
return;
}
fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
if (fields.context == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Can't find MediaMetadataRetriever.mNativeContext");
return;
}
- fields.bitmapClazz = env->FindClass("android/graphics/Bitmap");
+ jclass bitmapClazz = env->FindClass("android/graphics/Bitmap");
+ if (bitmapClazz == NULL) {
+ return;
+ }
+ fields.bitmapClazz = (jclass) env->NewGlobalRef(bitmapClazz);
if (fields.bitmapClazz == NULL) {
- jniThrowException(env, "java/lang/RuntimeException", "Can't find android/graphics/Bitmap");
return;
}
fields.createBitmapMethod =
@@ -461,8 +462,6 @@ static void android_media_MediaMetadataRetriever_native_init(JNIEnv *env)
"(IILandroid/graphics/Bitmap$Config;)"
"Landroid/graphics/Bitmap;");
if (fields.createBitmapMethod == NULL) {
- jniThrowException(env, "java/lang/RuntimeException",
- "Can't find Bitmap.createBitmap(int, int, Config) method");
return;
}
fields.createScaledBitmapMethod =
@@ -470,28 +469,25 @@ static void android_media_MediaMetadataRetriever_native_init(JNIEnv *env)
"(Landroid/graphics/Bitmap;IIZ)"
"Landroid/graphics/Bitmap;");
if (fields.createScaledBitmapMethod == NULL) {
- jniThrowException(env, "java/lang/RuntimeException",
- "Can't find Bitmap.createScaledBitmap(Bitmap, int, int, boolean) method");
return;
}
fields.nativeBitmap = env->GetFieldID(fields.bitmapClazz, "mNativeBitmap", "I");
if (fields.nativeBitmap == NULL) {
- jniThrowException(env, "java/lang/RuntimeException",
- "Can't find Bitmap.mNativeBitmap field");
+ return;
}
- fields.configClazz = env->FindClass("android/graphics/Bitmap$Config");
+ jclass configClazz = env->FindClass("android/graphics/Bitmap$Config");
+ if (configClazz == NULL) {
+ return;
+ }
+ fields.configClazz = (jclass) env->NewGlobalRef(configClazz);
if (fields.configClazz == NULL) {
- jniThrowException(env, "java/lang/RuntimeException",
- "Can't find Bitmap$Config class");
return;
}
fields.createConfigMethod =
env->GetStaticMethodID(fields.configClazz, "nativeToConfig",
"(I)Landroid/graphics/Bitmap$Config;");
if (fields.createConfigMethod == NULL) {
- jniThrowException(env, "java/lang/RuntimeException",
- "Can't find Bitmap$Config.nativeToConfig(int) method");
return;
}
}
diff --git a/packages/TtsService/jni/android_tts_SynthProxy.cpp b/packages/TtsService/jni/android_tts_SynthProxy.cpp
index 27d1fc0..e00fa85 100644
--- a/packages/TtsService/jni/android_tts_SynthProxy.cpp
+++ b/packages/TtsService/jni/android_tts_SynthProxy.cpp
@@ -53,7 +53,6 @@ using namespace android;
// ----------------------------------------------------------------------------
struct fields_t {
jfieldID synthProxyFieldJniData;
- jclass synthProxyClass;
jmethodID synthProxyMethodPost;
};
@@ -1043,7 +1042,6 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved)
goto bail;
}
- javaTTSFields.synthProxyClass = clazz;
javaTTSFields.synthProxyFieldJniData = NULL;
javaTTSFields.synthProxyMethodPost = NULL;
diff --git a/services/jni/com_android_server_UsbService.cpp b/services/jni/com_android_server_UsbService.cpp
index 6aeede2..00ee7e3 100644
--- a/services/jni/com_android_server_UsbService.cpp
+++ b/services/jni/com_android_server_UsbService.cpp
@@ -260,7 +260,7 @@ int register_android_server_UsbService(JNIEnv *env)
return -1;
}
- clazz = env->FindClass("java/io/FileDescriptor");
+ clazz = env->FindClass("java/io/FileDescriptor");
LOG_FATAL_IF(clazz == NULL, "Unable to find class java.io.FileDescriptor");
gFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
gFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "()V");
@@ -268,7 +268,7 @@ int register_android_server_UsbService(JNIEnv *env)
LOG_FATAL_IF(gFileDescriptorOffsets.mDescriptor == NULL,
"Unable to find descriptor field in java.io.FileDescriptor");
- clazz = env->FindClass("android/os/ParcelFileDescriptor");
+ clazz = env->FindClass("android/os/ParcelFileDescriptor");
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");