diff options
author | Brian Carlstrom <bdc@google.com> | 2011-04-05 22:44:45 -0700 |
---|---|---|
committer | Brian Carlstrom <bdc@google.com> | 2011-04-06 10:04:20 -0700 |
commit | 46e18c11d46a2bc1a46174f963d0ed1224d94cd2 (patch) | |
tree | 266818e339e08cea909f21b9af492f5ffc83079d | |
parent | 14faa3bd8bd6d1deab63a40ad2f8b6e451a16208 (diff) | |
download | frameworks_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.cpp | 1 | ||||
-rw-r--r-- | core/jni/android_media_AudioRecord.cpp | 13 | ||||
-rw-r--r-- | core/jni/android_media_AudioTrack.cpp | 16 | ||||
-rw-r--r-- | core/jni/android_net_NetUtils.cpp | 24 | ||||
-rw-r--r-- | core/jni/android_view_GLES20Canvas.cpp | 4 | ||||
-rw-r--r-- | media/jni/android_media_MediaMetadataRetriever.cpp | 26 | ||||
-rw-r--r-- | packages/TtsService/jni/android_tts_SynthProxy.cpp | 2 | ||||
-rw-r--r-- | services/jni/com_android_server_UsbService.cpp | 4 |
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"); |