am a4967fac: Merge "Cleanup script init to fix bogus log printing and reduce memory churn." into honeycomb

* commit 'a4967facf4b496fbc39adeb240182dad6c7dad6a':
  Cleanup script init to fix bogus log printing and reduce memory churn.
This commit is contained in:
Jason Sams
2011-01-24 17:32:55 -08:00
committed by Android Git Automerger
3 changed files with 29 additions and 35 deletions

View File

@@ -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) {

View File

@@ -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();
} }
} }

View File

@@ -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 *);