am ebca5eec: am 83665194: Merge change I9d5e03db into eclair

Merge commit 'ebca5eec1c1e0a0cfc4ad25d1aacb1a3e30e44ef' into eclair-mr2-plus-aosp

* commit 'ebca5eec1c1e0a0cfc4ad25d1aacb1a3e30e44ef':
  Fix RS bugs.  We were holding a pointer to the script text from the java vm. Move freeing of objects to before context teardown to allow allocations to clean up their data.
This commit is contained in:
Jason Sams
2009-11-03 15:20:53 -08:00
committed by Android Git Automerger
6 changed files with 23 additions and 14 deletions

View File

@@ -54,6 +54,17 @@ Allocation::~Allocation()
{
free(mPtr);
mPtr = NULL;
if (mBufferID) {
// Causes a SW crash....
//LOGV(" mBufferID %i", mBufferID);
//glDeleteBuffers(1, &mBufferID);
//mBufferID = 0;
}
if (mTextureID) {
glDeleteTextures(1, &mTextureID);
mTextureID = 0;
}
}
void Allocation::setCpuWritable(bool)

View File

@@ -342,6 +342,9 @@ void * Context::threadProc(void *vrsc)
rsc->mStateFragmentStore.deinit(rsc);
ObjectBase::zeroAllUserRef(rsc);
rsc->mObjDestroy.mNeedToEmpty = true;
rsc->objDestroyOOBRun();
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
eglSwapBuffers(rsc->mEGL.mDisplay, rsc->mEGL.mSurface);
@@ -350,8 +353,6 @@ void * Context::threadProc(void *vrsc)
rsc->deinitEGL();
pthread_mutex_unlock(&gInitMutex);
rsc->mObjDestroy.mNeedToEmpty = true;
rsc->objDestroyOOBRun();
LOGV("RS Thread exited");
return NULL;
}

View File

@@ -113,12 +113,7 @@ bool ObjectBase::decSysRef() const
void ObjectBase::setName(const char *name)
{
delete mName;
mName = NULL;
if (name) {
mName = new char[strlen(name) +1];
strcpy(mName, name);
}
setName(name, strlen(name));
}
void ObjectBase::setName(const char *name, uint32_t len)

View File

@@ -54,7 +54,7 @@ public:
ObjectBaseRef<ProgramRaster> mRaster;
ObjectBaseRef<ProgramFragmentStore> mFragmentStore;
InvokeFunc_t mInvokables[MAX_SCRIPT_BANKS];
const char * mScriptText;
char * mScriptText;
uint32_t mScriptTextLength;
};
Enviroment_t mEnviroment;

View File

@@ -46,6 +46,8 @@ ScriptC::~ScriptC()
if (mAccScript) {
accDeleteScript(mAccScript);
}
free(mEnviroment.mScriptText);
mEnviroment.mScriptText = NULL;
}
void ScriptC::setupScript()
@@ -404,7 +406,11 @@ void rsi_ScriptCSetScript(Context * rsc, void *vp)
void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
{
ScriptCState *ss = &rsc->mScriptC;
ss->mScript->mEnviroment.mScriptText = text;
char *t = (char *)malloc(len + 1);
memcpy(t, text, len);
t[len] = 0;
ss->mScript->mEnviroment.mScriptText = t;
ss->mScript->mEnviroment.mScriptTextLength = len;
}

View File

@@ -41,10 +41,6 @@ public:
virtual ~ScriptC();
struct Program_t {
const char * mScriptText;
uint32_t mScriptTextLength;
int mVersionMajor;
int mVersionMinor;