diff options
author | Elliott Hughes <enh@google.com> | 2011-04-08 14:10:28 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2011-04-08 15:01:19 -0700 |
commit | 69a017bc1d1649350f830dfada5c6ed5eac0b770 (patch) | |
tree | 6ecc6d9658272b268ce931d417930e2ea1bfa3f7 /core/jni/android | |
parent | 5008e92d1fd573d926cd55c39ca723a6fbdf7c4b (diff) | |
download | frameworks_base-69a017bc1d1649350f830dfada5c6ed5eac0b770.zip frameworks_base-69a017bc1d1649350f830dfada5c6ed5eac0b770.tar.gz frameworks_base-69a017bc1d1649350f830dfada5c6ed5eac0b770.tar.bz2 |
More JNI exception-throwing cleanup.
There are a few (unimportant) bug fixes here. There were several attempts to
throw exceptions in situations where there's already a pending exception.
There were also cases where the code was wrong; it was checking for a NULL
return from Get*ArrayElements and throwing NPE, but passing NULL is an error
that causes a crash and a NULL return means an exception has already been
thrown. I didn't want to get into the Scoped* classes just yet, but that
was by far the easiest way to fix this.
Change-Id: I0b31160ee51b96e82539f6514b8412b149dba7c3
Diffstat (limited to 'core/jni/android')
-rw-r--r-- | core/jni/android/graphics/Graphics.cpp | 4 | ||||
-rw-r--r-- | core/jni/android/graphics/NinePatch.cpp | 27 |
2 files changed, 15 insertions, 16 deletions
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp index 233167f..6c28e65 100644 --- a/core/jni/android/graphics/Graphics.cpp +++ b/core/jni/android/graphics/Graphics.cpp @@ -11,7 +11,7 @@ #include <android_runtime/AndroidRuntime.h> void doThrowNPE(JNIEnv* env) { - jniThrowException(env, "java/lang/NullPointerException", NULL); + jniThrowNullPointerException(env, NULL); } void doThrowAIOOBE(JNIEnv* env) { @@ -19,7 +19,7 @@ void doThrowAIOOBE(JNIEnv* env) { } void doThrowRE(JNIEnv* env, const char* msg) { - jniThrowException(env, "java/lang/RuntimeException", msg); + jniThrowRuntimeException(env, msg); } void doThrowIAE(JNIEnv* env, const char* msg) { diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp index 50df0f7..f9a3518 100644 --- a/core/jni/android/graphics/NinePatch.cpp +++ b/core/jni/android/graphics/NinePatch.cpp @@ -30,7 +30,7 @@ extern void NinePatch_Draw(SkCanvas* canvas, const SkRect& bounds, const SkBitmap& bitmap, const android::Res_png_9patch& chunk, const SkPaint* paint, SkRegion** outRegion); - + using namespace android; class SkNinePatchGlue { @@ -58,8 +58,7 @@ public: static void validateNinePatchChunk(JNIEnv* env, jobject, jint, jbyteArray obj) { if (env->GetArrayLength(obj) < (int) (sizeof(Res_png_9patch))) { - jniThrowException(env, "java/lang/RuntimeException", - "Array too small for chunk."); + jniThrowRuntimeException(env, "Array too small for chunk."); return; } @@ -80,7 +79,7 @@ public: assert(chunkSize == chunk->serializedSize()); // this relies on deserialization being done in place Res_png_9patch::deserialize(chunk); - + if (destDensity == srcDensity || destDensity == 0 || srcDensity == 0) { LOGV("Drawing unscaled 9-patch: (%g,%g)-(%g,%g)", @@ -89,26 +88,26 @@ public: NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL); } else { canvas->save(); - + SkScalar scale = SkFloatToScalar(destDensity / (float)srcDensity); canvas->translate(bounds.fLeft, bounds.fTop); canvas->scale(scale, scale); - + bounds.fRight = SkScalarDiv(bounds.fRight-bounds.fLeft, scale); bounds.fBottom = SkScalarDiv(bounds.fBottom-bounds.fTop, scale); bounds.fLeft = bounds.fTop = 0; - + LOGV("Drawing scaled 9-patch: (%g,%g)-(%g,%g) srcDensity=%d destDensity=%d", SkScalarToFloat(bounds.fLeft), SkScalarToFloat(bounds.fTop), SkScalarToFloat(bounds.fRight), SkScalarToFloat(bounds.fBottom), srcDensity, destDensity); - + NinePatch_Draw(canvas, bounds, *bitmap, *chunk, paint, NULL); - + canvas->restore(); } } - } + } static void drawF(JNIEnv* env, jobject, SkCanvas* canvas, jobject boundsRectF, const SkBitmap* bitmap, jbyteArray chunkObj, const SkPaint* paint, @@ -125,7 +124,7 @@ public: draw(env, canvas, bounds, bitmap, chunkObj, paint, destDensity, srcDensity); } - + static void drawI(JNIEnv* env, jobject, SkCanvas* canvas, jobject boundsRect, const SkBitmap* bitmap, jbyteArray chunkObj, const SkPaint* paint, jint destDensity, jint srcDensity) @@ -140,7 +139,7 @@ public: GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); draw(env, canvas, bounds, bitmap, chunkObj, paint, destDensity, srcDensity); } - + static jint getTransparentRegion(JNIEnv* env, jobject, const SkBitmap* bitmap, jbyteArray chunkObj, jobject boundsRect) @@ -148,7 +147,7 @@ public: SkASSERT(bitmap); SkASSERT(chunkObj); SkASSERT(boundsRect); - + SkRect bounds; GraphicsJNI::jrect_to_rect(env, boundsRect, &bounds); size_t chunkSize = env->GetArrayLength(chunkObj); @@ -179,7 +178,7 @@ static JNINativeMethod gNinePatchMethods[] = { { "validateNinePatchChunk", "(I[B)V", (void*)SkNinePatchGlue::validateNinePatchChunk }, { "nativeDraw", "(ILandroid/graphics/RectF;I[BIII)V", (void*)SkNinePatchGlue::drawF }, { "nativeDraw", "(ILandroid/graphics/Rect;I[BIII)V", (void*)SkNinePatchGlue::drawI }, - { "nativeGetTransparentRegion", "(I[BLandroid/graphics/Rect;)I", + { "nativeGetTransparentRegion", "(I[BLandroid/graphics/Rect;)I", (void*)SkNinePatchGlue::getTransparentRegion } }; |