From 90f4c18a868aa921feae953e380a2f9f6a4ade38 Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Tue, 8 Feb 2011 12:25:47 -0800 Subject: [PATCH] Use JNI helper function to get buffer address This replaces the Get/Release sequence with a call to jniGetNonMovableArrayElements. Bug 3409356 Change-Id: I847fd67ac71d904fef0c807ac25a29f802e6cd45 --- core/jni/android/graphics/Graphics.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp index 48ff5ed2769b3..6fedde2e81398 100644 --- a/core/jni/android/graphics/Graphics.cpp +++ b/core/jni/android/graphics/Graphics.cpp @@ -502,6 +502,8 @@ void AndroidPixelRef::globalUnref() { /////////////////////////////////////////////////////////////////////////////// +extern "C" jbyte* jniGetNonMovableArrayElements(C_JNIEnv* env, jarray arrayObj); + jbyteArray GraphicsJNI::allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap, SkColorTable* ctable) { Sk64 size64 = bitmap->getSize64(); @@ -514,8 +516,8 @@ jbyteArray GraphicsJNI::allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap, size_t size = size64.get32(); jbyteArray arrayObj = env->NewByteArray(size); if (arrayObj) { - jbyte *addr = env->GetByteArrayElements(arrayObj, NULL); - env->ReleaseByteArrayElements(arrayObj, addr, 0); + // TODO: make this work without jniGetNonMovableArrayElements + jbyte* addr = jniGetNonMovableArrayElements(&env->functions, arrayObj); if (addr) { SkPixelRef* pr = new AndroidPixelRef(env, (void*) addr, size, arrayObj, ctable); bitmap->setPixelRef(pr)->unref();