diff options
Diffstat (limited to 'core/jni/android_view_GraphicBuffer.cpp')
-rw-r--r-- | core/jni/android_view_GraphicBuffer.cpp | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/core/jni/android_view_GraphicBuffer.cpp b/core/jni/android_view_GraphicBuffer.cpp index 2e8dccf..8a426ac 100644 --- a/core/jni/android_view_GraphicBuffer.cpp +++ b/core/jni/android_view_GraphicBuffer.cpp @@ -74,15 +74,10 @@ static struct { } gRectClassInfo; static struct { - jfieldID mFinalizer; - jfieldID mNativeCanvas; jfieldID mSurfaceFormat; + jmethodID safeCanvasSwap; } gCanvasClassInfo; -static struct { - jfieldID mNativeCanvas; -} gCanvasFinalizerClassInfo; - #define GET_INT(object, field) \ env->GetIntField(object, field) @@ -146,15 +141,6 @@ static void android_view_GraphiceBuffer_destroy(JNIEnv* env, jobject clazz, // Canvas management // ---------------------------------------------------------------------------- -static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) { - jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer); - SkCanvas* previousCanvas = reinterpret_cast<SkCanvas*>( - GET_LONG(canvasObj, gCanvasClassInfo.mNativeCanvas)); - SET_LONG(canvasObj, gCanvasClassInfo.mNativeCanvas, (long) newCanvas); - SET_LONG(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (long) newCanvas); - SkSafeUnref(previousCanvas); -} - static inline SkBitmap::Config convertPixelFormat(int32_t format) { switch (format) { case PIXEL_FORMAT_RGBA_8888: @@ -213,7 +199,7 @@ static jboolean android_view_GraphicBuffer_lockCanvas(JNIEnv* env, jobject, SET_INT(canvas, gCanvasClassInfo.mSurfaceFormat, buffer->getPixelFormat()); SkCanvas* nativeCanvas = SkNEW_ARGS(SkCanvas, (bitmap)); - swapCanvasPtr(env, canvas, nativeCanvas); + INVOKEV(canvas, gCanvasClassInfo.safeCanvasSwap, (jlong)nativeCanvas, false); SkRect clipRect; clipRect.set(rect.left, rect.top, rect.right, rect.bottom); @@ -233,7 +219,7 @@ static jboolean android_view_GraphicBuffer_unlockCanvasAndPost(JNIEnv* env, jobj GraphicBufferWrapper* wrapper = reinterpret_cast<GraphicBufferWrapper*>(wrapperHandle); SkCanvas* nativeCanvas = SkNEW(SkCanvas); - swapCanvasPtr(env, canvas, nativeCanvas); + INVOKEV(canvas, gCanvasClassInfo.safeCanvasSwap, (jlong)nativeCanvas, false); if (wrapper) { status_t status = wrapper->buffer->unlock(); @@ -332,13 +318,8 @@ int register_android_view_GraphicBuffer(JNIEnv* env) { GET_FIELD_ID(gRectClassInfo.bottom, clazz, "bottom", "I"); FIND_CLASS(clazz, "android/graphics/Canvas"); - GET_FIELD_ID(gCanvasClassInfo.mFinalizer, clazz, "mFinalizer", - "Landroid/graphics/Canvas$CanvasFinalizer;"); - GET_FIELD_ID(gCanvasClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "J"); GET_FIELD_ID(gCanvasClassInfo.mSurfaceFormat, clazz, "mSurfaceFormat", "I"); - - FIND_CLASS(clazz, "android/graphics/Canvas$CanvasFinalizer"); - GET_FIELD_ID(gCanvasFinalizerClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "J"); + GET_METHOD_ID(gCanvasClassInfo.safeCanvasSwap, clazz, "safeCanvasSwap", "(JZ)V"); return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods)); } |