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

Commit c55de66a authored by Jason Sams's avatar Jason Sams
Browse files

Cleanup script init to fix bogus log printing and

reduce memory churn.

Change-Id: I0bf5392102e3d59fea81f5f9f832887113602b7f
parent b867b1f6
Loading
Loading
Loading
Loading
+17 −8
Original line number Original line Diff line number Diff line
@@ -201,9 +201,9 @@ bool Context::initGLThread() {
    mGL.mExtensions = glGetString(GL_EXTENSIONS);
    mGL.mExtensions = glGetString(GL_EXTENSIONS);


    //LOGV("EGL Version %i %i", mEGL.mMajorVersion, mEGL.mMinorVersion);
    //LOGV("EGL Version %i %i", mEGL.mMajorVersion, mEGL.mMinorVersion);
    LOGV("GL Version %s", mGL.mVersion);
    //LOGV("GL Version %s", mGL.mVersion);
    //LOGV("GL Vendor %s", mGL.mVendor);
    //LOGV("GL Vendor %s", mGL.mVendor);
    LOGV("GL Renderer %s", mGL.mRenderer);
    //LOGV("GL Renderer %s", mGL.mRenderer);
    //LOGV("GL Extensions %s", mGL.mExtensions);
    //LOGV("GL Extensions %s", mGL.mExtensions);


    const char *verptr = NULL;
    const char *verptr = NULL;
@@ -468,7 +468,6 @@ void * Context::threadProc(void *vrsc) {
         return NULL;
         return NULL;
     }
     }


     rsc->mScriptC.init(rsc);
     if (rsc->mIsGraphicsContext) {
     if (rsc->mIsGraphicsContext) {
         rsc->mStateRaster.init(rsc);
         rsc->mStateRaster.init(rsc);
         rsc->setProgramRaster(NULL);
         rsc->setProgramRaster(NULL);
@@ -528,7 +527,7 @@ void * Context::threadProc(void *vrsc) {
}
}


void Context::destroyWorkerThreadResources() {
void Context::destroyWorkerThreadResources() {
    LOGV("destroyWorkerThreadResources 1");
    //LOGV("destroyWorkerThreadResources 1");
    if (mIsGraphicsContext) {
    if (mIsGraphicsContext) {
         mRaster.clear();
         mRaster.clear();
         mFragment.clear();
         mFragment.clear();
@@ -544,7 +543,7 @@ void Context::destroyWorkerThreadResources() {
         mShaderCache.cleanupAll();
         mShaderCache.cleanupAll();
    }
    }
    ObjectBase::zeroAllUserRef(this);
    ObjectBase::zeroAllUserRef(this);
    LOGV("destroyWorkerThreadResources 2");
    //LOGV("destroyWorkerThreadResources 2");
    mExit = true;
    mExit = true;
}
}


@@ -552,7 +551,7 @@ void * Context::helperThreadProc(void *vrsc) {
     Context *rsc = static_cast<Context *>(vrsc);
     Context *rsc = static_cast<Context *>(vrsc);
     uint32_t idx = (uint32_t)android_atomic_inc(&rsc->mWorkers.mLaunchCount);
     uint32_t idx = (uint32_t)android_atomic_inc(&rsc->mWorkers.mLaunchCount);


     LOGV("RS helperThread starting %p idx=%i", rsc, idx);
     //LOGV("RS helperThread starting %p idx=%i", rsc, idx);


     rsc->mWorkers.mLaunchSignals[idx].init();
     rsc->mWorkers.mLaunchSignals[idx].init();
     rsc->mWorkers.mNativeThreadId[idx] = gettid();
     rsc->mWorkers.mNativeThreadId[idx] = gettid();
@@ -573,7 +572,7 @@ void * Context::helperThreadProc(void *vrsc) {
         LOGE("pthread_setspecific %i", status);
         LOGE("pthread_setspecific %i", status);
     }
     }


     while (rsc->mRunning) {
     while (!rsc->mExit) {
         rsc->mWorkers.mLaunchSignals[idx].wait();
         rsc->mWorkers.mLaunchSignals[idx].wait();
         if (rsc->mWorkers.mLaunchCallback) {
         if (rsc->mWorkers.mLaunchCallback) {
            rsc->mWorkers.mLaunchCallback(rsc->mWorkers.mLaunchData, idx);
            rsc->mWorkers.mLaunchCallback(rsc->mWorkers.mLaunchData, idx);
@@ -582,7 +581,7 @@ void * Context::helperThreadProc(void *vrsc) {
         rsc->mWorkers.mCompleteSignal.set();
         rsc->mWorkers.mCompleteSignal.set();
     }
     }


     LOGV("RS helperThread exiting %p idx=%i", rsc, idx);
     //LOGV("RS helperThread exited %p idx=%i", rsc, idx);
     return NULL;
     return NULL;
}
}


@@ -730,6 +729,16 @@ Context::~Context() {
    mIO.shutdown();
    mIO.shutdown();
    int status = pthread_join(mThreadId, &res);
    int status = pthread_join(mThreadId, &res);


    // Cleanup compute threads.
    mWorkers.mLaunchData = NULL;
    mWorkers.mLaunchCallback = NULL;
    mWorkers.mRunningCount = (int)mWorkers.mCount;
    for (uint32_t ct = 0; ct < mWorkers.mCount; ct++) {
        mWorkers.mLaunchSignals[ct].set();
        int status = pthread_join(mWorkers.mThreadId[ct], &res);
    }
    rsAssert(!mWorkers.mRunningCount);

    // Global structure cleanup.
    // Global structure cleanup.
    pthread_mutex_lock(&gInitMutex);
    pthread_mutex_lock(&gInitMutex);
    if (mDev) {
    if (mDev) {
+10 −22
Original line number Original line Diff line number Diff line
@@ -421,21 +421,9 @@ void ScriptC::Invoke(Context *rsc, uint32_t slot, const void *data, uint32_t len
}
}


ScriptCState::ScriptCState() {
ScriptCState::ScriptCState() {
    mScript.clear();
}
}


ScriptCState::~ScriptCState() {
ScriptCState::~ScriptCState() {
    mScript.clear();
}

void ScriptCState::init(Context *rsc) {
    clear(rsc);
}

void ScriptCState::clear(Context *rsc) {
    rsAssert(rsc);
    mScript.clear();
    mScript.set(new ScriptC(rsc));
}
}


static void* symbolLookup(void* pContext, char const* name) {
static void* symbolLookup(void* pContext, char const* name) {
@@ -608,8 +596,6 @@ namespace android {
namespace renderscript {
namespace renderscript {


void rsi_ScriptCBegin(Context * rsc) {
void rsi_ScriptCBegin(Context * rsc) {
    ScriptCState *ss = &rsc->mScriptC;
    ss->clear(rsc);
}
}


void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) {
void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) {
@@ -618,8 +604,8 @@ void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len) {
    char *t = (char *)malloc(len + 1);
    char *t = (char *)malloc(len + 1);
    memcpy(t, text, len);
    memcpy(t, text, len);
    t[len] = 0;
    t[len] = 0;
    ss->mScript->mEnviroment.mScriptText = t;
    ss->mScriptText = t;
    ss->mScript->mEnviroment.mScriptTextLength = len;
    ss->mScriptLen = len;
}
}




@@ -630,17 +616,19 @@ RsScript rsi_ScriptCCreate(Context *rsc,
{
{
    ScriptCState *ss = &rsc->mScriptC;
    ScriptCState *ss = &rsc->mScriptC;


    ObjectBaseRef<ScriptC> s(ss->mScript);
    ScriptC *s = new ScriptC(rsc);
    ss->mScript.clear();
    s->mEnviroment.mScriptText = ss->mScriptText;
    s->mEnviroment.mScriptTextLength = ss->mScriptLen;
    ss->mScriptText = NULL;
    ss->mScriptLen = 0;
    s->incUserRef();
    s->incUserRef();


    if (!ss->runCompiler(rsc, s.get(), resName, cacheDir)) {
    if (!ss->runCompiler(rsc, s, resName, cacheDir)) {
        // Error during compile, destroy s and return null.
        // Error during compile, destroy s and return null.
        s->zeroUserRef();
        delete s;
        return NULL;
        return NULL;
    }
    }
    ss->clear(rsc);
    return s;
    return s.get();
}
}


}
}
+2 −5
Original line number Original line Diff line number Diff line
@@ -76,11 +76,9 @@ public:
    ScriptCState();
    ScriptCState();
    ~ScriptCState();
    ~ScriptCState();


    ObjectBaseRef<ScriptC> mScript;
    char * mScriptText;
    size_t mScriptLen;


    void init(Context *rsc);

    void clear(Context *rsc);
    bool runCompiler(Context *rsc, ScriptC *s, const char *resName, const char *cacheDir);
    bool runCompiler(Context *rsc, ScriptC *s, const char *resName, const char *cacheDir);


    struct SymbolTable_t {
    struct SymbolTable_t {
@@ -88,7 +86,6 @@ public:
        void * mPtr;
        void * mPtr;
        bool threadable;
        bool threadable;
    };
    };
    //static SymbolTable_t gSyms[];
    static const SymbolTable_t * lookupSymbol(const char *);
    static const SymbolTable_t * lookupSymbol(const char *);
    static const SymbolTable_t * lookupSymbolCL(const char *);
    static const SymbolTable_t * lookupSymbolCL(const char *);
    static const SymbolTable_t * lookupSymbolGL(const char *);
    static const SymbolTable_t * lookupSymbolGL(const char *);