summaryrefslogtreecommitdiffstats
path: root/graphics/jni
diff options
context:
space:
mode:
authorJason Sams <rjsams@android.com>2009-10-06 13:58:47 -0700
committerJason Sams <rjsams@android.com>2009-10-06 13:58:47 -0700
commit516c31911578db8ce53529483c3ded918ac7dc6b (patch)
treeeee49f301e720ddfa249375abf611d550a0fba5d /graphics/jni
parentf7ae77cd67f1a3993b8e56c1af4720a7adf4e69d (diff)
downloadframeworks_base-516c31911578db8ce53529483c3ded918ac7dc6b.zip
frameworks_base-516c31911578db8ce53529483c3ded918ac7dc6b.tar.gz
frameworks_base-516c31911578db8ce53529483c3ded918ac7dc6b.tar.bz2
Implement data push from scripts. Fixes the problem where apps would have to poll to monitor a scripts state.
Fix bug in StoreState where state could be overridden by the default unless the script used more than one state. Change only impacts renderscript and renderscript apps.
Diffstat (limited to 'graphics/jni')
-rw-r--r--graphics/jni/android_renderscript_RenderScript.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp
index 9054b65..fa3baa2 100644
--- a/graphics/jni/android_renderscript_RenderScript.cpp
+++ b/graphics/jni/android_renderscript_RenderScript.cpp
@@ -194,6 +194,37 @@ nContextResume(JNIEnv *_env, jobject _this)
rsContextResume(con);
}
+static jint
+nContextGetMessage(JNIEnv *_env, jobject _this, jintArray data, jboolean wait)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ jint len = _env->GetArrayLength(data);
+ LOG_API("nContextGetMessage, con(%p), len(%i)", con, len);
+ jint *ptr = _env->GetIntArrayElements(data, NULL);
+ size_t receiveLen;
+ int id = rsContextGetMessage(con, ptr, &receiveLen, len * 4, wait);
+ if (!id && receiveLen) {
+ LOGE("message receive buffer too small. %i", receiveLen);
+ }
+ _env->ReleaseIntArrayElements(data, ptr, 0);
+ return id;
+}
+
+static void nContextInitToClient(JNIEnv *_env, jobject _this)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ LOG_API("nContextInitToClient, con(%p)", con);
+ rsContextInitToClient(con);
+}
+
+static void nContextDeinitToClient(JNIEnv *_env, jobject _this)
+{
+ RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+ LOG_API("nContextDeinitToClient, con(%p)", con);
+ rsContextDeinitToClient(con);
+}
+
+
static void
nElementBegin(JNIEnv *_env, jobject _this)
{
@@ -1303,6 +1334,9 @@ static JNINativeMethod methods[] = {
{"nAssignName", "(I[B)V", (void*)nAssignName },
{"nObjDestroy", "(I)V", (void*)nObjDestroy },
{"nObjDestroyOOB", "(I)V", (void*)nObjDestroyOOB },
+{"nContextGetMessage", "([IZ)I", (void*)nContextGetMessage },
+{"nContextInitToClient", "()V", (void*)nContextInitToClient },
+{"nContextDeinitToClient", "()V", (void*)nContextDeinitToClient },
{"nFileOpen", "([B)I", (void*)nFileOpen },