am 4c7d3f28
: Merge "Remove dead code: NIOBuffer." into gingerbread
Merge commit '4c7d3f28898f4e0d8e9f54537fb92948e650df7f' into gingerbread-plus-aosp * commit '4c7d3f28898f4e0d8e9f54537fb92948e650df7f': Remove dead code: NIOBuffer.
This commit is contained in:
@ -92,7 +92,6 @@ LOCAL_SRC_FILES:= \
|
||||
android/graphics/MaskFilter.cpp \
|
||||
android/graphics/Matrix.cpp \
|
||||
android/graphics/Movie.cpp \
|
||||
android/graphics/NIOBuffer.cpp \
|
||||
android/graphics/NinePatch.cpp \
|
||||
android/graphics/NinePatchImpl.cpp \
|
||||
android/graphics/Paint.cpp \
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
#include "jni.h"
|
||||
#include "GraphicsJNI.h"
|
||||
#include "NIOBuffer.h"
|
||||
#include "SkPicture.h"
|
||||
#include "SkRegion.h"
|
||||
#include <android_runtime/AndroidRuntime.h>
|
||||
@ -650,8 +649,6 @@ int register_android_graphics_Graphics(JNIEnv* env)
|
||||
gVMRuntime_trackExternalFreeMethodID =
|
||||
env->GetMethodID(c, "trackExternalFree", "(J)V");
|
||||
|
||||
NIOBuffer::RegisterJNI(env);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1,143 +0,0 @@
|
||||
#include "NIOBuffer.h"
|
||||
#include "GraphicsJNI.h"
|
||||
|
||||
// enable this to dump each time we ref/unref a global java object (buffer)
|
||||
//
|
||||
//#define TRACE_GLOBAL_REFS
|
||||
|
||||
//#define TRACE_ARRAY_LOCKS
|
||||
|
||||
static jclass gNIOAccess_classID;
|
||||
static jmethodID gNIOAccess_getBasePointer;
|
||||
static jmethodID gNIOAccess_getBaseArray;
|
||||
static jmethodID gNIOAccess_getBaseArrayOffset;
|
||||
static jmethodID gNIOAccess_getRemainingBytes;
|
||||
|
||||
void NIOBuffer::RegisterJNI(JNIEnv* env) {
|
||||
if (0 != gNIOAccess_classID) {
|
||||
return; // already called
|
||||
}
|
||||
|
||||
jclass c = env->FindClass("java/nio/NIOAccess");
|
||||
gNIOAccess_classID = (jclass)env->NewGlobalRef(c);
|
||||
|
||||
gNIOAccess_getBasePointer = env->GetStaticMethodID(gNIOAccess_classID,
|
||||
"getBasePointer", "(Ljava/nio/Buffer;)J");
|
||||
gNIOAccess_getBaseArray = env->GetStaticMethodID(gNIOAccess_classID,
|
||||
"getBaseArray", "(Ljava/nio/Buffer;)Ljava/lang/Object;");
|
||||
gNIOAccess_getBaseArrayOffset = env->GetStaticMethodID(gNIOAccess_classID,
|
||||
"getBaseArrayOffset", "(Ljava/nio/Buffer;)I");
|
||||
gNIOAccess_getRemainingBytes = env->GetStaticMethodID(gNIOAccess_classID,
|
||||
"getRemainingBytes", "(Ljava/nio/Buffer;)I");
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef TRACE_GLOBAL_REFS
|
||||
static int gGlobalRefs;
|
||||
#endif
|
||||
|
||||
#ifdef TRACE_ARRAY_LOCKS
|
||||
static int gLockCount;
|
||||
#endif
|
||||
|
||||
NIOBuffer::NIOBuffer(JNIEnv* env, jobject buffer) {
|
||||
fBuffer = env->NewGlobalRef(buffer);
|
||||
#ifdef TRACE_GLOBAL_REFS
|
||||
SkDebugf("------------ newglobalref bbuffer %X %d\n", buffer, gGlobalRefs++);
|
||||
#endif
|
||||
fLockedPtr = NULL;
|
||||
fLockedArray = NULL;
|
||||
}
|
||||
|
||||
NIOBuffer::~NIOBuffer() {
|
||||
// free() needs to have already been called
|
||||
if (NULL != fBuffer) {
|
||||
SkDebugf("----- leaked fBuffer in NIOBuffer");
|
||||
sk_throw();
|
||||
}
|
||||
}
|
||||
|
||||
void NIOBuffer::free(JNIEnv* env) {
|
||||
|
||||
if (NULL != fLockedPtr) {
|
||||
SkDebugf("======= free: array still locked %x %p\n", fLockedArray, fLockedPtr);
|
||||
}
|
||||
|
||||
|
||||
if (NULL != fBuffer) {
|
||||
#ifdef TRACE_GLOBAL_REFS
|
||||
SkDebugf("----------- deleteglobalref buffer %X %d\n", fBuffer, --gGlobalRefs);
|
||||
#endif
|
||||
env->DeleteGlobalRef(fBuffer);
|
||||
fBuffer = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
void* NIOBuffer::lock(JNIEnv* env, int* remaining) {
|
||||
if (NULL != fLockedPtr) {
|
||||
SkDebugf("======= lock: array still locked %x %p\n", fLockedArray, fLockedPtr);
|
||||
}
|
||||
|
||||
fLockedPtr = NULL;
|
||||
fLockedArray = NULL;
|
||||
|
||||
if (NULL != remaining) {
|
||||
*remaining = env->CallStaticIntMethod(gNIOAccess_classID,
|
||||
gNIOAccess_getRemainingBytes,
|
||||
fBuffer);
|
||||
if (GraphicsJNI::hasException(env)) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
jlong pointer = env->CallStaticLongMethod(gNIOAccess_classID,
|
||||
gNIOAccess_getBasePointer,
|
||||
fBuffer);
|
||||
if (GraphicsJNI::hasException(env)) {
|
||||
return NULL;
|
||||
}
|
||||
if (0 != pointer) {
|
||||
return reinterpret_cast<void*>(pointer);
|
||||
}
|
||||
|
||||
fLockedArray = (jbyteArray)env->CallStaticObjectMethod(gNIOAccess_classID,
|
||||
gNIOAccess_getBaseArray,
|
||||
fBuffer);
|
||||
if (GraphicsJNI::hasException(env) || NULL == fLockedArray) {
|
||||
return NULL;
|
||||
}
|
||||
jint offset = env->CallStaticIntMethod(gNIOAccess_classID,
|
||||
gNIOAccess_getBaseArrayOffset,
|
||||
fBuffer);
|
||||
fLockedPtr = env->GetByteArrayElements(fLockedArray, NULL);
|
||||
if (GraphicsJNI::hasException(env)) {
|
||||
SkDebugf("------------ failed to lockarray %x\n", fLockedArray);
|
||||
return NULL;
|
||||
}
|
||||
#ifdef TRACE_ARRAY_LOCKS
|
||||
SkDebugf("------------ lockarray %x %p %d\n",
|
||||
fLockedArray, fLockedPtr, gLockCount++);
|
||||
#endif
|
||||
if (NULL == fLockedPtr) {
|
||||
offset = 0;
|
||||
}
|
||||
return (char*)fLockedPtr + offset;
|
||||
}
|
||||
|
||||
void NIOBuffer::unlock(JNIEnv* env, bool dataChanged) {
|
||||
if (NULL != fLockedPtr) {
|
||||
#ifdef TRACE_ARRAY_LOCKS
|
||||
SkDebugf("------------ unlockarray %x %p %d\n",
|
||||
fLockedArray, fLockedPtr, --gLockCount);
|
||||
#endif
|
||||
env->ReleaseByteArrayElements(fLockedArray, (jbyte*)fLockedPtr,
|
||||
dataChanged ? 0 : JNI_ABORT);
|
||||
|
||||
fLockedPtr = NULL;
|
||||
fLockedArray = NULL;
|
||||
} else {
|
||||
SkDebugf("============= unlock called with null ptr %x\n", fLockedArray);
|
||||
}
|
||||
}
|
||||
|
@ -1,27 +0,0 @@
|
||||
#ifndef NIOBuffer_DEFINED
|
||||
#define NIOBuffer_DEFINED
|
||||
|
||||
#include <jni.h>
|
||||
#include "SkBitmap.h"
|
||||
|
||||
class NIOBuffer {
|
||||
public:
|
||||
NIOBuffer(JNIEnv* env, jobject buffer);
|
||||
// this checks to ensure that free() was called
|
||||
~NIOBuffer();
|
||||
|
||||
void* lock(JNIEnv* env, int* remaining);
|
||||
void unlock(JNIEnv* env, bool dataChanged);
|
||||
// must be called before destructor
|
||||
void free(JNIEnv* env);
|
||||
|
||||
// call once on boot, to setup JNI globals
|
||||
static void RegisterJNI(JNIEnv*);
|
||||
|
||||
private:
|
||||
jobject fBuffer;
|
||||
void* fLockedPtr;
|
||||
jbyteArray fLockedArray;
|
||||
};
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user