summaryrefslogtreecommitdiffstats
path: root/core/jni/android
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2011-04-12 11:28:59 -0700
committerElliott Hughes <enh@google.com>2011-04-12 11:28:59 -0700
commitdd66bcbf9d6ef0c50a18d9c4b1b39ce7ef7afcc4 (patch)
treed44c2b9758436b189a2091297fa1e22d350da4a3 /core/jni/android
parentae447967b5f07dd789a7488aa9e190637478a97c (diff)
downloadframeworks_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.cpp63
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);
}
-