summaryrefslogtreecommitdiffstats
path: root/core/jni/android
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2011-04-08 14:10:28 -0700
committerElliott Hughes <enh@google.com>2011-04-08 15:01:19 -0700
commit69a017bc1d1649350f830dfada5c6ed5eac0b770 (patch)
tree6ecc6d9658272b268ce931d417930e2ea1bfa3f7 /core/jni/android
parent5008e92d1fd573d926cd55c39ca723a6fbdf7c4b (diff)
downloadframeworks_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.cpp4
-rw-r--r--core/jni/android/graphics/NinePatch.cpp27
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 }
};