diff options
author | Stephen Hines <srhines@google.com> | 2011-08-01 15:02:34 -0700 |
---|---|---|
committer | Stephen Hines <srhines@google.com> | 2011-08-03 18:46:56 -0700 |
commit | 4382467a80dd12c6362d57edca7f2367f7ae877c (patch) | |
tree | f91d338f48444ccb373040ba356910c3fc52c8df /libs/rs/driver/rsdBcc.cpp | |
parent | 00451ed2d1f21945766bc0c59e762ef39cb391b8 (diff) | |
download | frameworks_base-4382467a80dd12c6362d57edca7f2367f7ae877c.zip frameworks_base-4382467a80dd12c6362d57edca7f2367f7ae877c.tar.gz frameworks_base-4382467a80dd12c6362d57edca7f2367f7ae877c.tar.bz2 |
Start using bcinfo components within librs.
BUG=4942491
Change-Id: I3a46783511c4954bac9eadbbbefe5abf85498c16
Diffstat (limited to 'libs/rs/driver/rsdBcc.cpp')
-rw-r--r-- | libs/rs/driver/rsdBcc.cpp | 64 |
1 files changed, 36 insertions, 28 deletions
diff --git a/libs/rs/driver/rsdBcc.cpp b/libs/rs/driver/rsdBcc.cpp index 0c0aa10..807ed24 100644 --- a/libs/rs/driver/rsdBcc.cpp +++ b/libs/rs/driver/rsdBcc.cpp @@ -19,7 +19,7 @@ #include "rsdBcc.h" #include "rsdRuntime.h" -#include <bcinfo/bcinfo.h> +#include <bcinfo/MetadataExtractor.h> #include "rsContext.h" #include "rsScriptC.h" @@ -40,7 +40,7 @@ struct DrvScript { BCCScriptRef mBccScript; - struct BCScriptMetadata *mScriptMetadata; + bcinfo::MetadataExtractor *ME; InvokeFunc_t *mInvokeFunctions; void ** mFieldAddress; @@ -71,7 +71,9 @@ bool rsdScriptInit(const Context *rsc, pthread_mutex_lock(&rsdgInitMutex); char *cachePath = NULL; - struct BCScriptMetadata *md = NULL; + size_t exportFuncCount = 0; + size_t exportVarCount = 0; + size_t objectSlotCount = 0; DrvScript *drv = (DrvScript *)calloc(1, sizeof(DrvScript)); if (drv == NULL) { @@ -84,13 +86,13 @@ bool rsdScriptInit(const Context *rsc, drv->mScriptText = bitcode; drv->mScriptTextLength = bitcodeSize; - md = bcinfoGetScriptMetadata((const char*)drv->mScriptText, - drv->mScriptTextLength, 0); - if (!md) { + + drv->ME = new bcinfo::MetadataExtractor((const char*)drv->mScriptText, + drv->mScriptTextLength); + if (!drv->ME->extract()) { LOGE("bcinfo: failed to read script metadata"); goto error; } - drv->mScriptMetadata = md; //LOGE("mBccScript %p", script->mBccScript); @@ -122,40 +124,41 @@ bool rsdScriptInit(const Context *rsc, drv->mRoot = reinterpret_cast<int (*)()>(bccGetFuncAddr(drv->mBccScript, "root")); drv->mInit = reinterpret_cast<void (*)()>(bccGetFuncAddr(drv->mBccScript, "init")); - if (md->exportFuncCount > 0) { - drv->mInvokeFunctions = (InvokeFunc_t*) calloc(md->exportFuncCount, + exportFuncCount = drv->ME->getExportFuncCount(); + if (exportFuncCount > 0) { + drv->mInvokeFunctions = (InvokeFunc_t*) calloc(exportFuncCount, sizeof(InvokeFunc_t)); - bccGetExportFuncList(drv->mBccScript, - md->exportFuncCount, + bccGetExportFuncList(drv->mBccScript, exportFuncCount, (void **) drv->mInvokeFunctions); } else { drv->mInvokeFunctions = NULL; } - if (md->exportVarCount > 0) { - drv->mFieldAddress = (void **) calloc(md->exportVarCount, - sizeof(void*)); - drv->mFieldIsObject = (bool *) calloc(md->exportVarCount, sizeof(bool)); - bccGetExportVarList(drv->mBccScript, - md->exportVarCount, + exportVarCount = drv->ME->getExportVarCount(); + if (exportVarCount > 0) { + drv->mFieldAddress = (void **) calloc(exportVarCount, sizeof(void*)); + drv->mFieldIsObject = (bool *) calloc(exportVarCount, sizeof(bool)); + bccGetExportVarList(drv->mBccScript, exportVarCount, (void **) drv->mFieldAddress); } else { drv->mFieldAddress = NULL; drv->mFieldIsObject = NULL; } - if (md->objectSlotCount) { - for (uint32_t ct=0; ct < md->objectSlotCount; ct++) { - drv->mFieldIsObject[md->objectSlotList[ct]] = true; + objectSlotCount = drv->ME->getObjectSlotCount(); + if (objectSlotCount > 0) { + const uint32_t *objectSlotList = drv->ME->getObjectSlotList(); + for (uint32_t ct=0; ct < objectSlotCount; ct++) { + drv->mFieldIsObject[objectSlotList[ct]] = true; } } // Copy info over to runtime - script->mHal.info.exportedFunctionCount = md->exportFuncCount; - script->mHal.info.exportedVariableCount = md->exportVarCount; - script->mHal.info.exportedPragmaCount = md->pragmaCount; - script->mHal.info.exportedPragmaKeyList = md->pragmaKeyList; - script->mHal.info.exportedPragmaValueList = md->pragmaValueList; + script->mHal.info.exportedFunctionCount = drv->ME->getExportFuncCount(); + script->mHal.info.exportedVariableCount = drv->ME->getExportVarCount(); + script->mHal.info.exportedPragmaCount = drv->ME->getPragmaCount(); + script->mHal.info.exportedPragmaKeyList = drv->ME->getPragmaKeyList(); + script->mHal.info.exportedPragmaValueList = drv->ME->getPragmaValueList(); script->mHal.info.root = drv->mRoot; pthread_mutex_unlock(&rsdgInitMutex); @@ -164,6 +167,10 @@ bool rsdScriptInit(const Context *rsc, error: pthread_mutex_unlock(&rsdgInitMutex); + if (drv->ME) { + delete drv->ME; + drv->ME = NULL; + } free(drv); return false; @@ -445,10 +452,10 @@ void rsdScriptSetGlobalObj(const Context *dc, const Script *script, uint32_t slo void rsdScriptDestroy(const Context *dc, Script *script) { DrvScript *drv = (DrvScript *)script->mHal.drv; - struct BCScriptMetadata *md = drv->mScriptMetadata; if (drv->mFieldAddress) { - for (size_t ct = 0; ct < md->exportVarCount; ct++) { + size_t exportVarCount = drv->ME->getExportVarCount(); + for (size_t ct = 0; ct < exportVarCount; ct++) { if (drv->mFieldIsObject[ct]) { // The field address can be NULL if the script-side has // optimized the corresponding global variable away. @@ -467,7 +474,8 @@ void rsdScriptDestroy(const Context *dc, Script *script) { drv->mInvokeFunctions = NULL; } - bcinfoReleaseScriptMetadata(&drv->mScriptMetadata); + delete drv->ME; + drv->ME = NULL; free(drv); script->mHal.drv = NULL; |