diff options
author | Elliott Hughes <enh@google.com> | 2011-04-12 11:28:59 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2011-04-12 11:28:59 -0700 |
commit | dd66bcbf9d6ef0c50a18d9c4b1b39ce7ef7afcc4 (patch) | |
tree | d44c2b9758436b189a2091297fa1e22d350da4a3 /core/jni/android | |
parent | ae447967b5f07dd789a7488aa9e190637478a97c (diff) | |
download | frameworks_base-dd66bcbf9d6ef0c50a18d9c4b1b39ce7ef7afcc4.zip frameworks_base-dd66bcbf9d6ef0c50a18d9c4b1b39ce7ef7afcc4.tar.gz frameworks_base-dd66bcbf9d6ef0c50a18d9c4b1b39ce7ef7afcc4.tar.bz2 |
More native code cleanup.
Don't keep unused global references to classes, don't throw exceptions
when an exception is already pending, and fix a (harmless) misunderstanding
about how GetStringChars works.
Change-Id: Ie445036f057daa8a1c76aceb7bad2a84fb81d820
Diffstat (limited to 'core/jni/android')
-rw-r--r-- | core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp | 63 |
1 files changed, 29 insertions, 34 deletions
diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp index 137acc6..6ce3f51 100644 --- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp +++ b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp @@ -3,7 +3,6 @@ #define RETURN_NULL_IF_NULL(value) \ do { if (!(value)) { SkASSERT(0); return NULL; } } while (false) -static jclass gInputStream_Clazz; static jmethodID gInputStream_resetMethodID; static jmethodID gInputStream_markMethodID; static jmethodID gInputStream_availableMethodID; @@ -19,10 +18,10 @@ public: SkASSERT(fCapacity > 0); fBytesRead = 0; } - + virtual bool rewind() { JNIEnv* env = fEnv; - + fBytesRead = 0; env->CallVoidMethod(fJavaInputStream, gInputStream_resetMethodID); @@ -34,7 +33,7 @@ public: } return true; } - + size_t doRead(void* buffer, size_t size) { JNIEnv* env = fEnv; size_t bytesRead = 0; @@ -43,7 +42,7 @@ public: size_t requested = size; if (requested > fCapacity) requested = fCapacity; - + jint n = env->CallIntMethod(fJavaInputStream, gInputStream_readMethodID, fJavaByteArray, 0, requested); if (env->ExceptionCheck()) { @@ -52,11 +51,11 @@ public: SkDebugf("---- read threw an exception\n"); return 0; } - + if (n < 0) { // n == 0 should not be possible, see InputStream read() specifications. break; // eof } - + env->GetByteArrayRegion(fJavaByteArray, 0, n, reinterpret_cast<jbyte*>(buffer)); if (env->ExceptionCheck()) { @@ -65,16 +64,16 @@ public: SkDebugf("---- read:GetByteArrayRegion threw an exception\n"); return 0; } - + buffer = (void*)((char*)buffer + n); bytesRead += n; size -= n; fBytesRead += n; } while (size != 0); - + return bytesRead; } - + size_t doSkip(size_t size) { JNIEnv* env = fEnv; @@ -92,7 +91,7 @@ public: return (size_t)skipped; } - + size_t doSize() { JNIEnv* env = fEnv; jint avail = env->CallIntMethod(fJavaInputStream, @@ -105,7 +104,7 @@ public: } return avail; } - + virtual size_t read(void* buffer, size_t size) { JNIEnv* env = fEnv; if (NULL == buffer) { @@ -134,7 +133,7 @@ public: } return this->doRead(buffer, size); } - + private: JNIEnv* fEnv; jobject fJavaInputStream; // the caller owns this object @@ -148,19 +147,18 @@ SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream, static bool gInited; if (!gInited) { - gInputStream_Clazz = env->FindClass("java/io/InputStream"); - RETURN_NULL_IF_NULL(gInputStream_Clazz); - gInputStream_Clazz = (jclass)env->NewGlobalRef(gInputStream_Clazz); + jclass inputStream_Clazz = env->FindClass("java/io/InputStream"); + RETURN_NULL_IF_NULL(inputStream_Clazz); - gInputStream_resetMethodID = env->GetMethodID(gInputStream_Clazz, + gInputStream_resetMethodID = env->GetMethodID(inputStream_Clazz, "reset", "()V"); - gInputStream_markMethodID = env->GetMethodID(gInputStream_Clazz, + gInputStream_markMethodID = env->GetMethodID(inputStream_Clazz, "mark", "(I)V"); - gInputStream_availableMethodID = env->GetMethodID(gInputStream_Clazz, + gInputStream_availableMethodID = env->GetMethodID(inputStream_Clazz, "available", "()I"); - gInputStream_readMethodID = env->GetMethodID(gInputStream_Clazz, + gInputStream_readMethodID = env->GetMethodID(inputStream_Clazz, "read", "([BII)I"); - gInputStream_skipMethodID = env->GetMethodID(gInputStream_Clazz, + gInputStream_skipMethodID = env->GetMethodID(inputStream_Clazz, "skip", "(J)J"); RETURN_NULL_IF_NULL(gInputStream_resetMethodID); @@ -181,7 +179,6 @@ SkStream* CreateJavaInputStreamAdaptor(JNIEnv* env, jobject stream, /////////////////////////////////////////////////////////////////////////////// -static jclass gOutputStream_Clazz; static jmethodID gOutputStream_writeMethodID; static jmethodID gOutputStream_flushMethodID; @@ -191,11 +188,11 @@ public: : fEnv(env), fJavaOutputStream(stream), fJavaByteArray(storage) { fCapacity = env->GetArrayLength(storage); } - + virtual bool write(const void* buffer, size_t size) { JNIEnv* env = fEnv; jbyteArray storage = fJavaByteArray; - + while (size > 0) { size_t requested = size; if (requested > fCapacity) { @@ -210,7 +207,7 @@ public: SkDebugf("--- write:SetByteArrayElements threw an exception\n"); return false; } - + fEnv->CallVoidMethod(fJavaOutputStream, gOutputStream_writeMethodID, storage, 0, requested); if (env->ExceptionCheck()) { @@ -219,17 +216,17 @@ public: SkDebugf("------- write threw an exception\n"); return false; } - + buffer = (void*)((char*)buffer + requested); size -= requested; } return true; } - + virtual void flush() { fEnv->CallVoidMethod(fJavaOutputStream, gOutputStream_flushMethodID); } - + private: JNIEnv* fEnv; jobject fJavaOutputStream; // the caller owns this object @@ -242,14 +239,13 @@ SkWStream* CreateJavaOutputStreamAdaptor(JNIEnv* env, jobject stream, static bool gInited; if (!gInited) { - gOutputStream_Clazz = env->FindClass("java/io/OutputStream"); - RETURN_NULL_IF_NULL(gOutputStream_Clazz); - gOutputStream_Clazz = (jclass)env->NewGlobalRef(gOutputStream_Clazz); + jclass outputStream_Clazz = env->FindClass("java/io/OutputStream"); + RETURN_NULL_IF_NULL(outputStream_Clazz); - gOutputStream_writeMethodID = env->GetMethodID(gOutputStream_Clazz, + gOutputStream_writeMethodID = env->GetMethodID(outputStream_Clazz, "write", "([BII)V"); RETURN_NULL_IF_NULL(gOutputStream_writeMethodID); - gOutputStream_flushMethodID = env->GetMethodID(gOutputStream_Clazz, + gOutputStream_flushMethodID = env->GetMethodID(outputStream_Clazz, "flush", "()V"); RETURN_NULL_IF_NULL(gOutputStream_flushMethodID); @@ -258,4 +254,3 @@ SkWStream* CreateJavaOutputStreamAdaptor(JNIEnv* env, jobject stream, return new SkJavaOutputStream(env, stream, storage); } - |