Loading libs/rs/rsContext.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -528,6 +528,7 @@ void * Context::threadProc(void *vrsc) { void Context::destroyWorkerThreadResources() { //LOGV("destroyWorkerThreadResources 1"); ObjectBase::zeroAllUserRef(this); if (mIsGraphicsContext) { mRaster.clear(); mFragment.clear(); Loading @@ -542,7 +543,6 @@ void Context::destroyWorkerThreadResources() { mStateFont.deinit(this); mShaderCache.cleanupAll(); } ObjectBase::zeroAllUserRef(this); //LOGV("destroyWorkerThreadResources 2"); mExit = true; } Loading libs/rs/rsFont.cpp +9 −12 Original line number Diff line number Diff line Loading @@ -74,6 +74,15 @@ bool Font::init(const char *name, float fontSize, uint32_t dpi, const void *data return true; } void Font::preDestroy() const { for (uint32_t ct = 0; ct < mRSC->mStateFont.mActiveFonts.size(); ct++) { if (mRSC->mStateFont.mActiveFonts[ct] == this) { mRSC->mStateFont.mActiveFonts.removeAt(ct); break; } } } void Font::invalidateTextureCache() { for (uint32_t i = 0; i < mCachedGlyphs.size(); i ++) { mCachedGlyphs.valueAt(i)->mIsValid = false; Loading Loading @@ -309,13 +318,6 @@ Font::~Font() { FT_Done_Face(mFace); } for (uint32_t ct = 0; ct < mRSC->mStateFont.mActiveFonts.size(); ct++) { if (mRSC->mStateFont.mActiveFonts[ct] == this) { mRSC->mStateFont.mActiveFonts.removeAt(ct); break; } } for (uint32_t i = 0; i < mCachedGlyphs.size(); i ++) { CachedGlyphInfo *glyph = mCachedGlyphs.valueAt(i); delete glyph; Loading Loading @@ -799,11 +801,6 @@ void FontState::deinit(Context *rsc) { mDefault.clear(); Vector<Font*> fontsToDereference = mActiveFonts; for (uint32_t i = 0; i < fontsToDereference.size(); i ++) { fontsToDereference[i]->zeroUserRef(); } if (mLibrary) { FT_Done_FreeType( mLibrary ); mLibrary = NULL; Loading libs/rs/rsFont.h +1 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ protected: Font(Context *rsc); bool init(const char *name, float fontSize, uint32_t dpi, const void *data = NULL, uint32_t dataLen = 0); virtual void preDestroy() const; FT_Face mFace; bool mInitialized; bool mHasKerning; Loading libs/rs/rsScript.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -78,8 +78,6 @@ void Script::setVarObj(uint32_t slot, ObjectBase *val) { (*destPtr)->decSysRef(); } *destPtr = val; } else { LOGV("Calling setVarObj on slot = %i which is null. This is dangerous because the script will not hold a ref count on the object.", slot); } } Loading libs/rs/rsScriptC.cpp +21 −3 Original line number Diff line number Diff line Loading @@ -94,16 +94,24 @@ char *genCacheFileName(const char *cacheDir, } ScriptC::ScriptC(Context *rsc) : Script(rsc) { LOGD(">>>> ScriptC ctor called, obj=%p", this); mBccScript = NULL; memset(&mProgram, 0, sizeof(mProgram)); } ScriptC::~ScriptC() { LOGD(">>>> ~ScriptC() mBccScript = %p", mBccScript); if (mBccScript) { if (mProgram.mObjectSlotList) { for (size_t ct=0; ct < mProgram.mObjectSlotCount; ct++) { setVarObj(mProgram.mObjectSlotList[ct], NULL); } delete [] mProgram.mObjectSlotList; mProgram.mObjectSlotList = NULL; mProgram.mObjectSlotCount = 0; } LOGD(">>>> ~ScriptC bccDisposeScript(%p)", mBccScript); bccDisposeScript(mBccScript); LOGD(">>>> ~ScriptC(mBCCScript)"); } free(mEnviroment.mScriptText); mEnviroment.mScriptText = NULL; Loading Loading @@ -589,6 +597,16 @@ bool ScriptCState::runCompiler(Context *rsc, return false; } } size_t objectSlotCount = bccGetObjectSlotCount(s->mBccScript); uint32_t *objectSlots = NULL; if (objectSlotCount) { objectSlots = new uint32_t[objectSlotCount]; bccGetObjectSlotList(s->mBccScript, objectSlotCount, objectSlots); s->mProgram.mObjectSlotList = objectSlots; s->mProgram.mObjectSlotCount = objectSlotCount; } return true; } Loading Loading
libs/rs/rsContext.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -528,6 +528,7 @@ void * Context::threadProc(void *vrsc) { void Context::destroyWorkerThreadResources() { //LOGV("destroyWorkerThreadResources 1"); ObjectBase::zeroAllUserRef(this); if (mIsGraphicsContext) { mRaster.clear(); mFragment.clear(); Loading @@ -542,7 +543,6 @@ void Context::destroyWorkerThreadResources() { mStateFont.deinit(this); mShaderCache.cleanupAll(); } ObjectBase::zeroAllUserRef(this); //LOGV("destroyWorkerThreadResources 2"); mExit = true; } Loading
libs/rs/rsFont.cpp +9 −12 Original line number Diff line number Diff line Loading @@ -74,6 +74,15 @@ bool Font::init(const char *name, float fontSize, uint32_t dpi, const void *data return true; } void Font::preDestroy() const { for (uint32_t ct = 0; ct < mRSC->mStateFont.mActiveFonts.size(); ct++) { if (mRSC->mStateFont.mActiveFonts[ct] == this) { mRSC->mStateFont.mActiveFonts.removeAt(ct); break; } } } void Font::invalidateTextureCache() { for (uint32_t i = 0; i < mCachedGlyphs.size(); i ++) { mCachedGlyphs.valueAt(i)->mIsValid = false; Loading Loading @@ -309,13 +318,6 @@ Font::~Font() { FT_Done_Face(mFace); } for (uint32_t ct = 0; ct < mRSC->mStateFont.mActiveFonts.size(); ct++) { if (mRSC->mStateFont.mActiveFonts[ct] == this) { mRSC->mStateFont.mActiveFonts.removeAt(ct); break; } } for (uint32_t i = 0; i < mCachedGlyphs.size(); i ++) { CachedGlyphInfo *glyph = mCachedGlyphs.valueAt(i); delete glyph; Loading Loading @@ -799,11 +801,6 @@ void FontState::deinit(Context *rsc) { mDefault.clear(); Vector<Font*> fontsToDereference = mActiveFonts; for (uint32_t i = 0; i < fontsToDereference.size(); i ++) { fontsToDereference[i]->zeroUserRef(); } if (mLibrary) { FT_Done_FreeType( mLibrary ); mLibrary = NULL; Loading
libs/rs/rsFont.h +1 −0 Original line number Diff line number Diff line Loading @@ -119,6 +119,7 @@ protected: Font(Context *rsc); bool init(const char *name, float fontSize, uint32_t dpi, const void *data = NULL, uint32_t dataLen = 0); virtual void preDestroy() const; FT_Face mFace; bool mInitialized; bool mHasKerning; Loading
libs/rs/rsScript.cpp +0 −2 Original line number Diff line number Diff line Loading @@ -78,8 +78,6 @@ void Script::setVarObj(uint32_t slot, ObjectBase *val) { (*destPtr)->decSysRef(); } *destPtr = val; } else { LOGV("Calling setVarObj on slot = %i which is null. This is dangerous because the script will not hold a ref count on the object.", slot); } } Loading
libs/rs/rsScriptC.cpp +21 −3 Original line number Diff line number Diff line Loading @@ -94,16 +94,24 @@ char *genCacheFileName(const char *cacheDir, } ScriptC::ScriptC(Context *rsc) : Script(rsc) { LOGD(">>>> ScriptC ctor called, obj=%p", this); mBccScript = NULL; memset(&mProgram, 0, sizeof(mProgram)); } ScriptC::~ScriptC() { LOGD(">>>> ~ScriptC() mBccScript = %p", mBccScript); if (mBccScript) { if (mProgram.mObjectSlotList) { for (size_t ct=0; ct < mProgram.mObjectSlotCount; ct++) { setVarObj(mProgram.mObjectSlotList[ct], NULL); } delete [] mProgram.mObjectSlotList; mProgram.mObjectSlotList = NULL; mProgram.mObjectSlotCount = 0; } LOGD(">>>> ~ScriptC bccDisposeScript(%p)", mBccScript); bccDisposeScript(mBccScript); LOGD(">>>> ~ScriptC(mBCCScript)"); } free(mEnviroment.mScriptText); mEnviroment.mScriptText = NULL; Loading Loading @@ -589,6 +597,16 @@ bool ScriptCState::runCompiler(Context *rsc, return false; } } size_t objectSlotCount = bccGetObjectSlotCount(s->mBccScript); uint32_t *objectSlots = NULL; if (objectSlotCount) { objectSlots = new uint32_t[objectSlotCount]; bccGetObjectSlotList(s->mBccScript, objectSlotCount, objectSlots); s->mProgram.mObjectSlotList = objectSlots; s->mProgram.mObjectSlotCount = objectSlotCount; } return true; } Loading