Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d06aa4fd authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 21825 into eclair

* changes:
  Implement OOB destroy method that can be called from the java finalizer removing the need to explicitly destroy objects.
parents 9abcba3c 730ee65d
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -60,8 +60,13 @@ class BaseObj {
    protected void finalize() throws Throwable
    {
        if (!mDestroyed) {
            if(mID != 0) {
                mRS.nObjDestroyOOB(mID);
            }
            mID = 0;
            mDestroyed = true;
            Log.v(RenderScript.LOG_TAG,
                  getClass() + " finalized without having released the RS reference.");
                  getClass() + " auto finalizing object without having released the RS reference.");
        }
        super.finalize();
    }
+1 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ public class RenderScript {

    native void nAssignName(int obj, byte[] name);
    native void nObjDestroy(int id);
    native void nObjDestroyOOB(int id);
    native int  nFileOpen(byte[] name);

    native void nElementBegin();
+10 −0
Original line number Diff line number Diff line
@@ -86,6 +86,15 @@ nObjDestroy(JNIEnv *_env, jobject _this, jint obj)
    rsObjDestroy(con, (void *)obj);
}

static void
nObjDestroyOOB(JNIEnv *_env, jobject _this, jint obj)
{
    // This function only differs from nObjDestroy in that it calls the
    // special Out Of Band version of ObjDestroy which is thread safe.
    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
    LOG_API("nObjDestroyOOB, con(%p) obj(%p)", con, (void *)obj);
    rsObjDestroyOOB(con, (void *)obj);
}

static jint
nFileOpen(JNIEnv *_env, jobject _this, jbyteArray str)
@@ -1217,6 +1226,7 @@ static JNINativeMethod methods[] = {
{"nContextDestroy",                "(I)V",                                 (void*)nContextDestroy },
{"nAssignName",                    "(I[B)V",                               (void*)nAssignName },
{"nObjDestroy",                    "(I)V",                                 (void*)nObjDestroy },
{"nObjDestroyOOB",                 "(I)V",                                 (void*)nObjDestroyOOB },

{"nFileOpen",                      "([B)I",                                (void*)nFileOpen },

+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ void rsDeviceDestroy(RsDevice);

RsContext rsContextCreate(RsDevice, void *, uint32_t version);
void rsContextDestroy(RsContext);
void rsObjDestroyOOB(RsContext, void *);

#define RS_MAX_TEXTURE 2

+8 −10
Original line number Diff line number Diff line
@@ -67,8 +67,6 @@ public class FountainRS {

    private RenderScript mRS;
    private Allocation mIntAlloc;
    private Allocation mPartAlloc;
    private Script mScript;
    private SimpleMesh mSM;
    private SomeData mSD;
    private Type mSDType;
@@ -94,9 +92,9 @@ public class FountainRS {
        mSM = smb.create();
        mSM.setName("PartMesh");

        mPartAlloc = mSM.createVertexAllocation(vtxSlot);
        mPartAlloc.setName("PartBuffer");
        mSM.bindVertexAllocation(mPartAlloc, 0);
        Allocation partAlloc = mSM.createVertexAllocation(vtxSlot);
        partAlloc.setName("PartBuffer");
        mSM.bindVertexAllocation(partAlloc, 0);

        // All setup of named objects should be done by this point
        // because we are about to compile the script.
@@ -104,12 +102,12 @@ public class FountainRS {
        sb.setScript(mRes, R.raw.fountain);
        sb.setRoot(true);
        sb.setType(mSDType, "Control", 0);
        mScript = sb.create();
        mScript.setClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        Script script = sb.create();
        script.setClearColor(0.0f, 0.0f, 0.0f, 1.0f);

        mScript.bindAllocation(mIntAlloc, 0);
        mScript.bindAllocation(mPartAlloc, 1);
        mRS.contextBindRootScript(mScript);
        script.bindAllocation(mIntAlloc, 0);
        script.bindAllocation(partAlloc, 1);
        mRS.contextBindRootScript(script);
    }

}
Loading