From 65e7aa56f56097418d617663683544c25b3988ea Mon Sep 17 00:00:00 2001 From: Jason Sams Date: Thu, 24 Sep 2009 17:38:20 -0700 Subject: Implement pause/resume for the RS thread. --- graphics/java/android/renderscript/RSSurfaceView.java | 11 +++++++++-- graphics/java/android/renderscript/RenderScript.java | 10 ++++++++++ graphics/jni/android_renderscript_RenderScript.cpp | 18 ++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) (limited to 'graphics') diff --git a/graphics/java/android/renderscript/RSSurfaceView.java b/graphics/java/android/renderscript/RSSurfaceView.java index 3d6acc9..b46a749 100644 --- a/graphics/java/android/renderscript/RSSurfaceView.java +++ b/graphics/java/android/renderscript/RSSurfaceView.java @@ -36,6 +36,7 @@ import android.view.SurfaceView; **/ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mSurfaceHolder; + private RenderScript mRS; /** * Standard View constructor. In order to render something, you @@ -97,6 +98,9 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback * Must not be called before a renderer has been set. */ public void onPause() { + if(mRS != null) { + mRS.pause(); + } Log.v(RenderScript.LOG_TAG, "onPause"); } @@ -108,6 +112,9 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback * Must not be called before a renderer has been set. */ public void onResume() { + if(mRS != null) { + mRS.resume(); + } Log.v(RenderScript.LOG_TAG, "onResume"); } @@ -138,8 +145,8 @@ public class RSSurfaceView extends SurfaceView implements SurfaceHolder.Callback while ((sur == null) || (mSurfaceHolder == null)) { sur = getHolder().getSurface(); } - RenderScript rs = new RenderScript(sur, useDepth, forceSW); - return rs; + mRS = new RenderScript(sur, useDepth, forceSW); + return mRS; } public RenderScript createRenderScript(boolean useDepth) { diff --git a/graphics/java/android/renderscript/RenderScript.java b/graphics/java/android/renderscript/RenderScript.java index b7cd21b..f815f52 100644 --- a/graphics/java/android/renderscript/RenderScript.java +++ b/graphics/java/android/renderscript/RenderScript.java @@ -73,6 +73,8 @@ public class RenderScript { native void nContextBindProgramRaster(int pr); native void nContextAddDefineI32(String name, int value); native void nContextAddDefineF(String name, float value); + native void nContextPause(); + native void nContextResume(); native void nAssignName(int obj, byte[] name); native void nObjDestroy(int id); @@ -217,6 +219,14 @@ public class RenderScript { mDev = 0; } + void pause() { + nContextPause(); + } + + void resume() { + nContextResume(); + } + ////////////////////////////////////////////////////////////////////////////////// // File diff --git a/graphics/jni/android_renderscript_RenderScript.cpp b/graphics/jni/android_renderscript_RenderScript.cpp index f86d86a..9054b65 100644 --- a/graphics/jni/android_renderscript_RenderScript.cpp +++ b/graphics/jni/android_renderscript_RenderScript.cpp @@ -179,6 +179,22 @@ nContextDestroy(JNIEnv *_env, jobject _this, jint con) static void +nContextPause(JNIEnv *_env, jobject _this) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + LOG_API("nContextPause, con(%p)", con); + rsContextPause(con); +} + +static void +nContextResume(JNIEnv *_env, jobject _this) +{ + RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); + LOG_API("nContextResume, con(%p)", con); + rsContextResume(con); +} + +static void nElementBegin(JNIEnv *_env, jobject _this) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); @@ -1282,6 +1298,8 @@ static JNINativeMethod methods[] = { {"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig }, {"nContextCreate", "(ILandroid/view/Surface;IZ)I", (void*)nContextCreate }, {"nContextDestroy", "(I)V", (void*)nContextDestroy }, +{"nContextPause", "()V", (void*)nContextPause }, +{"nContextResume", "()V", (void*)nContextResume }, {"nAssignName", "(I[B)V", (void*)nAssignName }, {"nObjDestroy", "(I)V", (void*)nObjDestroy }, {"nObjDestroyOOB", "(I)V", (void*)nObjDestroyOOB }, -- cgit v1.1