Modify script loading behavior.
This moves away from RSInfo and toward bcinfo. This also disables all caching for the time being.
Change-Id: Id7c717258d51e0b45540a78596f1bc9c94468efb
diff --git a/cpu_ref/rsCpuScript.cpp b/cpu_ref/rsCpuScript.cpp
index 01a3e5a..432312b 100644
--- a/cpu_ref/rsCpuScript.cpp
+++ b/cpu_ref/rsCpuScript.cpp
@@ -473,9 +473,8 @@
useRSDebugContext = true;
// Skip the cache lookup
} else if (!is_force_recompile()) {
- // Attempt to just load the script from cache first if we can.
- exec = bcc::RSCompilerDriver::loadScript(cacheDir, resName,
- (const char *)bitcode, bitcodeSize, mResolver);
+ // New cache infrastructure goes here
+
}
if (exec == NULL) {
@@ -509,10 +508,15 @@
reinterpret_cast<void (*)()>(exec->getSymbolAddress(".rs.dtor"));
- const bcc::RSInfo *info = &mExecutable->getInfo();
- if (info->getExportVarNames().size()) {
- mBoundAllocs = new Allocation *[info->getExportVarNames().size()];
- memset(mBoundAllocs, 0, sizeof(void *) * info->getExportVarNames().size());
+ if (ME.getExportVarCount()) {
+ mBoundAllocs = new Allocation *[ME.getExportVarCount()];
+ memset(mBoundAllocs, 0, sizeof(void *) * ME.getExportVarCount());
+ }
+
+ for (size_t i = 0; i < ME.getExportForEachSignatureCount(); i++) {
+ char* name = new char[strlen(ME.getExportForEachNameList()[i]) + 1];
+ mExportedForEachFuncList.push_back(std::make_pair(name,
+ ME.getExportForEachSignatureList()[i]));
}
#else
@@ -738,13 +742,11 @@
void RsdCpuScriptImpl::populateScript(Script *script) {
#ifndef FAKE_ARM64_BUILD
#ifndef RS_COMPATIBILITY_LIB
- const bcc::RSInfo *info = &mExecutable->getInfo();
-
// Copy info over to runtime
- script->mHal.info.exportedFunctionCount = info->getExportFuncNames().size();
- script->mHal.info.exportedVariableCount = info->getExportVarNames().size();
- script->mHal.info.exportedForeachFuncList = info->getExportForeachFuncs().array();
- script->mHal.info.exportedPragmaCount = info->getPragmas().size();
+ script->mHal.info.exportedFunctionCount = mExecutable->getExportFuncAddrs().size();
+ script->mHal.info.exportedVariableCount = mExecutable->getExportVarAddrs().size();
+ script->mHal.info.exportedForeachFuncList = &mExportedForEachFuncList[0];
+ script->mHal.info.exportedPragmaCount = mExecutable->getPragmaKeys().size();
script->mHal.info.exportedPragmaKeyList =
const_cast<const char**>(mExecutable->getPragmaKeys().array());
script->mHal.info.exportedPragmaValueList =
@@ -1147,6 +1149,10 @@
if (mBoundAllocs) {
delete[] mBoundAllocs;
}
+
+ for (size_t i = 0; i < mExportedForEachFuncList.size(); i++) {
+ delete[] mExportedForEachFuncList[i].first;
+ }
#else
if (mFieldIsObject) {
for (size_t i = 0; i < mExportedVariableCount; ++i) {
diff --git a/cpu_ref/rsCpuScript.h b/cpu_ref/rsCpuScript.h
index fded347..1fe66ce 100644
--- a/cpu_ref/rsCpuScript.h
+++ b/cpu_ref/rsCpuScript.h
@@ -23,6 +23,8 @@
#ifndef RS_COMPATIBILITY_LIB
#include <bcc/ExecutionEngine/CompilerRTSymbolResolver.h>
#include <bcc/ExecutionEngine/SymbolResolverProxy.h>
+#include <vector>
+#include <utility>
#endif
#include "rsCpuCore.h"
@@ -116,6 +118,8 @@
void (*mInit)();
void (*mFreeChildren)();
+ std::vector<std::pair<const char *, uint32_t> > mExportedForEachFuncList;
+
bcc::BCCContext *mCompilerContext;
bcc::RSCompilerDriver *mCompilerDriver;
bcc::CompilerRTSymbolResolver mCompilerRuntime;