summaryrefslogtreecommitdiffstats
path: root/libs/rs/rsScript.cpp
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2010-11-16 18:30:58 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-11-16 18:30:58 -0800
commit68f0a32d103d3861103bce3763b222bde99c0a4c (patch)
tree2681e49340e97dc410b9a376a84754c7c5136db0 /libs/rs/rsScript.cpp
parent4a0d0b34b244b5b730e861d875e7ae289cbb3311 (diff)
parent6f4cf0b8885403ead157ae00fd43cf1282331c23 (diff)
downloadframeworks_base-68f0a32d103d3861103bce3763b222bde99c0a4c.zip
frameworks_base-68f0a32d103d3861103bce3763b222bde99c0a4c.tar.gz
frameworks_base-68f0a32d103d3861103bce3763b222bde99c0a4c.tar.bz2
Merge "Fix ref counting for globals when set from java code."
Diffstat (limited to 'libs/rs/rsScript.cpp')
-rw-r--r--libs/rs/rsScript.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/libs/rs/rsScript.cpp b/libs/rs/rsScript.cpp
index 4ffdbfd..efdc626 100644
--- a/libs/rs/rsScript.cpp
+++ b/libs/rs/rsScript.cpp
@@ -67,6 +67,22 @@ void Script::setVar(uint32_t slot, const void *val, uint32_t len) {
}
}
+void Script::setVarObj(uint32_t slot, ObjectBase *val) {
+ ObjectBase **destPtr = ((ObjectBase ***)mEnviroment.mFieldAddress)[slot];
+
+ if (destPtr) {
+ if (val != NULL) {
+ val->incSysRef();
+ }
+ if (*destPtr) {
+ (*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);
+ }
+}
+
namespace android {
namespace renderscript {
@@ -103,6 +119,12 @@ void rsi_ScriptSetVarI(Context *rsc, RsScript vs, uint32_t slot, int value) {
s->setVar(slot, &value, sizeof(value));
}
+void rsi_ScriptSetVarObj(Context *rsc, RsScript vs, uint32_t slot, RsObjectBase value) {
+ Script *s = static_cast<Script *>(vs);
+ ObjectBase *o = static_cast<ObjectBase *>(value);
+ s->setVarObj(slot, o);
+}
+
void rsi_ScriptSetVarJ(Context *rsc, RsScript vs, uint32_t slot, long long value) {
Script *s = static_cast<Script *>(vs);
s->setVar(slot, &value, sizeof(value));