Merge "Remove OOB object destruction."
This commit is contained in:
@@ -62,7 +62,7 @@ class BaseObj {
|
||||
{
|
||||
if (!mDestroyed) {
|
||||
if(mID != 0 && mRS.isAlive()) {
|
||||
mRS.nObjDestroyOOB(mID);
|
||||
mRS.nObjDestroy(mID);
|
||||
}
|
||||
mRS = null;
|
||||
mID = 0;
|
||||
|
||||
@@ -143,10 +143,6 @@ public class RenderScript {
|
||||
synchronized void nObjDestroy(int id) {
|
||||
rsnObjDestroy(mContext, id);
|
||||
}
|
||||
native void rsnObjDestroyOOB(int con, int id);
|
||||
synchronized void nObjDestroyOOB(int id) {
|
||||
rsnObjDestroyOOB(mContext, id);
|
||||
}
|
||||
native int rsnFileOpen(int con, byte[] name);
|
||||
synchronized int nFileOpen(byte[] name) {
|
||||
return rsnFileOpen(mContext, name);
|
||||
|
||||
@@ -117,14 +117,6 @@ nObjDestroy(JNIEnv *_env, jobject _this, RsContext con, jint obj)
|
||||
rsObjDestroy(con, (void *)obj);
|
||||
}
|
||||
|
||||
static void
|
||||
nObjDestroyOOB(JNIEnv *_env, jobject _this, RsContext con, jint obj)
|
||||
{
|
||||
// This function only differs from nObjDestroy in that it calls the
|
||||
// special Out Of Band version of ObjDestroy which is thread safe.
|
||||
LOG_API("nObjDestroyOOB, con(%p) obj(%p)", con, (void *)obj);
|
||||
rsObjDestroyOOB(con, (void *)obj);
|
||||
}
|
||||
|
||||
static jint
|
||||
nFileOpen(JNIEnv *_env, jobject _this, RsContext con, jbyteArray str)
|
||||
@@ -1377,7 +1369,6 @@ static JNINativeMethod methods[] = {
|
||||
{"rsnAssignName", "(II[B)V", (void*)nAssignName },
|
||||
{"rsnGetName", "(II)Ljava/lang/String;", (void*)nGetName },
|
||||
{"rsnObjDestroy", "(II)V", (void*)nObjDestroy },
|
||||
{"rsnObjDestroyOOB", "(II)V", (void*)nObjDestroyOOB },
|
||||
|
||||
{"rsnFileOpen", "(I[B)I", (void*)nFileOpen },
|
||||
{"rsnFileA3DCreateFromAssetStream", "(II)I", (void*)nFileA3DCreateFromAssetStream },
|
||||
|
||||
@@ -63,7 +63,6 @@ void rsDeviceSetConfig(RsDevice, RsDeviceParam, int32_t value);
|
||||
RsContext rsContextCreate(RsDevice, uint32_t version);
|
||||
RsContext rsContextCreateGL(RsDevice, uint32_t version, bool useDepth);
|
||||
void rsContextDestroy(RsContext);
|
||||
void rsObjDestroyOOB(RsContext, void *);
|
||||
|
||||
uint32_t rsContextGetMessage(RsContext, void *data, size_t *receiveLen, size_t bufferLen, bool wait);
|
||||
void rsContextInitToClient(RsContext);
|
||||
|
||||
@@ -340,9 +340,6 @@ void * Context::threadProc(void *vrsc)
|
||||
rsc->timerPrint();
|
||||
rsc->timerReset();
|
||||
}
|
||||
if (rsc->mObjDestroy.mNeedToEmpty) {
|
||||
rsc->objDestroyOOBRun();
|
||||
}
|
||||
if (rsc->mThreadPriority > 0 && targetTime) {
|
||||
int32_t t = (targetTime - (int32_t)(rsc->mTimeMSLastScript + rsc->mTimeMSLastSwap)) * 1000;
|
||||
if (t > 0) {
|
||||
@@ -367,9 +364,6 @@ void * Context::threadProc(void *vrsc)
|
||||
}
|
||||
ObjectBase::zeroAllUserRef(rsc);
|
||||
|
||||
rsc->mObjDestroy.mNeedToEmpty = true;
|
||||
rsc->objDestroyOOBRun();
|
||||
|
||||
if (rsc->mIsGraphicsContext) {
|
||||
pthread_mutex_lock(&gInitMutex);
|
||||
rsc->deinitEGL();
|
||||
@@ -488,7 +482,6 @@ Context::Context(Device *dev, bool isGraphics, bool useDepth)
|
||||
|
||||
mWndSurface = NULL;
|
||||
|
||||
objDestroyOOBInit();
|
||||
timerInit();
|
||||
timerSet(RS_TIMER_INTERNAL);
|
||||
|
||||
@@ -534,8 +527,6 @@ Context::~Context()
|
||||
|
||||
mIO.shutdown();
|
||||
int status = pthread_join(mThreadId, &res);
|
||||
mObjDestroy.mNeedToEmpty = true;
|
||||
objDestroyOOBRun();
|
||||
|
||||
// Global structure cleanup.
|
||||
pthread_mutex_lock(&gInitMutex);
|
||||
@@ -548,8 +539,6 @@ Context::~Context()
|
||||
mDev = NULL;
|
||||
}
|
||||
pthread_mutex_unlock(&gInitMutex);
|
||||
|
||||
objDestroyOOBDestroy();
|
||||
}
|
||||
|
||||
void Context::setSurface(uint32_t w, uint32_t h, ANativeWindow *sur)
|
||||
@@ -721,49 +710,6 @@ void Context::removeName(ObjectBase *obj)
|
||||
}
|
||||
}
|
||||
|
||||
bool Context::objDestroyOOBInit()
|
||||
{
|
||||
if (!mObjDestroy.mMutex.init()) {
|
||||
LOGE("Context::ObjDestroyOOBInit mutex init failure");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void Context::objDestroyOOBRun()
|
||||
{
|
||||
if (mObjDestroy.mNeedToEmpty) {
|
||||
if (!mObjDestroy.mMutex.lock()) {
|
||||
LOGE("Context::ObjDestroyOOBRun: error locking for OOBRun.");
|
||||
return;
|
||||
}
|
||||
|
||||
for (size_t ct = 0; ct < mObjDestroy.mDestroyList.size(); ct++) {
|
||||
mObjDestroy.mDestroyList[ct]->decUserRef();
|
||||
}
|
||||
mObjDestroy.mDestroyList.clear();
|
||||
mObjDestroy.mNeedToEmpty = false;
|
||||
mObjDestroy.mMutex.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
void Context::objDestroyOOBDestroy()
|
||||
{
|
||||
rsAssert(!mObjDestroy.mNeedToEmpty);
|
||||
}
|
||||
|
||||
void Context::objDestroyAdd(ObjectBase *obj)
|
||||
{
|
||||
if (!mObjDestroy.mMutex.lock()) {
|
||||
LOGE("Context::ObjDestroyOOBRun: error locking for OOBRun.");
|
||||
return;
|
||||
}
|
||||
|
||||
mObjDestroy.mNeedToEmpty = true;
|
||||
mObjDestroy.mDestroyList.add(obj);
|
||||
mObjDestroy.mMutex.unlock();
|
||||
}
|
||||
|
||||
uint32_t Context::getMessageToClient(void *data, size_t *receiveLen, size_t bufferLen, bool wait)
|
||||
{
|
||||
//LOGE("getMessageToClient %i %i", bufferLen, wait);
|
||||
@@ -1003,12 +949,6 @@ void rsContextDestroy(RsContext vrsc)
|
||||
delete rsc;
|
||||
}
|
||||
|
||||
void rsObjDestroyOOB(RsContext vrsc, void *obj)
|
||||
{
|
||||
Context * rsc = static_cast<Context *>(vrsc);
|
||||
rsc->objDestroyAdd(static_cast<ObjectBase *>(obj));
|
||||
}
|
||||
|
||||
uint32_t rsContextGetMessage(RsContext vrsc, void *data, size_t *receiveLen, size_t bufferLen, bool wait)
|
||||
{
|
||||
Context * rsc = static_cast<Context *>(vrsc);
|
||||
|
||||
@@ -137,7 +137,6 @@ public:
|
||||
|
||||
|
||||
ThreadIO mIO;
|
||||
void objDestroyAdd(ObjectBase *);
|
||||
|
||||
// Timers
|
||||
enum Timers {
|
||||
@@ -248,16 +247,6 @@ protected:
|
||||
ObjectBaseRef<ProgramRaster> mRaster;
|
||||
ObjectBaseRef<Font> mFont;
|
||||
|
||||
struct ObjDestroyOOB {
|
||||
Mutex mMutex;
|
||||
Vector<ObjectBase *> mDestroyList;
|
||||
bool mNeedToEmpty;
|
||||
};
|
||||
ObjDestroyOOB mObjDestroy;
|
||||
bool objDestroyOOBInit();
|
||||
void objDestroyOOBRun();
|
||||
void objDestroyOOBDestroy();
|
||||
|
||||
void displayDebugStats();
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user