Loading graphics/java/android/renderscript/RenderScript.java +16 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ public class RenderScript { native int nContextCreate(int dev, int ver, boolean useDepth); native void nContextDestroy(int con); native void nContextSetSurface(int w, int h, Surface sur); native void nContextSetPriority(int p); native void nContextBindRootScript(int script); native void nContextBindSampler(int sampler, int slot); Loading Loading @@ -218,6 +219,7 @@ public class RenderScript { Element mElement_XY_F32; Element mElement_XYZ_F32; /////////////////////////////////////////////////////////////////////////////////// // Loading @@ -229,6 +231,20 @@ public class RenderScript { } public RSMessage mMessageCallback = null; public enum Priority { LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5 NORMAL (-4); //ANDROID_PRIORITY_DISPLAY int mID; Priority(int id) { mID = id; } } public void contextSetPriority(Priority p) { nContextSetPriority(p.mID); } private static class MessageThread extends Thread { RenderScript mRS; boolean mRun = true; Loading graphics/jni/android_renderscript_RenderScript.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,16 @@ nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jboolean useDept return (jint)rsContextCreate((RsDevice)dev, ver, useDepth); } static void nContextSetPriority(JNIEnv *_env, jobject _this, jint p) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p); rsContextSetPriority(con, p); } static void nContextSetSurface(JNIEnv *_env, jobject _this, jint width, jint height, jobject wnd) { Loading Loading @@ -1333,6 +1343,7 @@ static JNINativeMethod methods[] = { {"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy }, {"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig }, {"nContextCreate", "(IIZ)I", (void*)nContextCreate }, {"nContextSetPriority", "(I)V", (void*)nContextSetPriority }, {"nContextSetSurface", "(IILandroid/view/Surface;)V", (void*)nContextSetSurface }, {"nContextDestroy", "(I)V", (void*)nContextDestroy }, {"nContextPause", "()V", (void*)nContextPause }, Loading libs/rs/rs.spec +1 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ ContextSetSurface { } ContextSetPriority { param uint32_t priority param int32_t priority } AssignName { Loading libs/rs/rsContext.cpp +29 −5 Original line number Diff line number Diff line Loading @@ -20,11 +20,16 @@ #include <ui/FramebufferNativeWindow.h> #include <ui/EGLUtils.h> #include <sys/types.h> #include <sys/resource.h> #include <cutils/properties.h> #include <GLES/gl.h> #include <GLES/glext.h> #include <cutils/sched_policy.h> using namespace android; using namespace android::renderscript; Loading Loading @@ -234,6 +239,9 @@ static bool getProp(const char *str) void * Context::threadProc(void *vrsc) { Context *rsc = static_cast<Context *>(vrsc); rsc->mNativeThreadId = gettid(); setpriority(PRIO_PROCESS, rsc->mNativeThreadId, ANDROID_PRIORITY_DISPLAY); rsc->props.mLogTimes = getProp("debug.rs.profile"); rsc->props.mLogScripts = getProp("debug.rs.script"); Loading Loading @@ -316,6 +324,25 @@ void * Context::threadProc(void *vrsc) return NULL; } void Context::setPriority(int32_t p) { // Note: If we put this in the proper "background" policy // the wallpapers can become completly unresponsive at times. // This is probably not what we want for something the user is actively // looking at. #if 0 SchedPolicy pol = SP_FOREGROUND; if (p > 0) { pol = SP_BACKGROUND; } if (!set_sched_policy(mNativeThreadId, pol)) { // success; reset the priority as well } #else setpriority(PRIO_PROCESS, mNativeThreadId, p); #endif } Context::Context(Device *dev, bool useDepth) { pthread_mutex_lock(&gInitMutex); Loading Loading @@ -351,10 +378,6 @@ Context::Context(Device *dev, bool useDepth) return; } sched_param sparam; sparam.sched_priority = ANDROID_PRIORITY_DISPLAY; pthread_attr_setschedparam(&threadAttr, &sparam); mWndSurface = NULL; objDestroyOOBInit(); Loading Loading @@ -791,8 +814,9 @@ void rsi_ContextSetSurface(Context *rsc, uint32_t w, uint32_t h, void *sur) rsc->setSurface(w, h, (Surface *)sur); } void rsi_ContextSetPriority(Context *rsc, uint32_t p) void rsi_ContextSetPriority(Context *rsc, int32_t p) { rsc->setPriority(p); } } Loading libs/rs/rsContext.h +2 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ public: void pause(); void resume(); void setSurface(uint32_t w, uint32_t h, Surface *sur); void setPriority(int32_t p); void assignName(ObjectBase *obj, const char *name, uint32_t len); void removeName(ObjectBase *obj); Loading Loading @@ -198,6 +199,7 @@ protected: bool mPaused; pthread_t mThreadId; pid_t mNativeThreadId; ObjectBaseRef<Script> mRootScript; ObjectBaseRef<ProgramFragment> mFragment; Loading Loading
graphics/java/android/renderscript/RenderScript.java +16 −0 Original line number Diff line number Diff line Loading @@ -67,6 +67,7 @@ public class RenderScript { native int nContextCreate(int dev, int ver, boolean useDepth); native void nContextDestroy(int con); native void nContextSetSurface(int w, int h, Surface sur); native void nContextSetPriority(int p); native void nContextBindRootScript(int script); native void nContextBindSampler(int sampler, int slot); Loading Loading @@ -218,6 +219,7 @@ public class RenderScript { Element mElement_XY_F32; Element mElement_XYZ_F32; /////////////////////////////////////////////////////////////////////////////////// // Loading @@ -229,6 +231,20 @@ public class RenderScript { } public RSMessage mMessageCallback = null; public enum Priority { LOW (5), //ANDROID_PRIORITY_BACKGROUND + 5 NORMAL (-4); //ANDROID_PRIORITY_DISPLAY int mID; Priority(int id) { mID = id; } } public void contextSetPriority(Priority p) { nContextSetPriority(p.mID); } private static class MessageThread extends Thread { RenderScript mRS; boolean mRun = true; Loading
graphics/jni/android_renderscript_RenderScript.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -157,6 +157,16 @@ nContextCreate(JNIEnv *_env, jobject _this, jint dev, jint ver, jboolean useDept return (jint)rsContextCreate((RsDevice)dev, ver, useDepth); } static void nContextSetPriority(JNIEnv *_env, jobject _this, jint p) { RsContext con = (RsContext)(_env->GetIntField(_this, gContextId)); LOG_API("ContextSetPriority, con(%p), priority(%i)", con, p); rsContextSetPriority(con, p); } static void nContextSetSurface(JNIEnv *_env, jobject _this, jint width, jint height, jobject wnd) { Loading Loading @@ -1333,6 +1343,7 @@ static JNINativeMethod methods[] = { {"nDeviceDestroy", "(I)V", (void*)nDeviceDestroy }, {"nDeviceSetConfig", "(III)V", (void*)nDeviceSetConfig }, {"nContextCreate", "(IIZ)I", (void*)nContextCreate }, {"nContextSetPriority", "(I)V", (void*)nContextSetPriority }, {"nContextSetSurface", "(IILandroid/view/Surface;)V", (void*)nContextSetSurface }, {"nContextDestroy", "(I)V", (void*)nContextDestroy }, {"nContextPause", "()V", (void*)nContextPause }, Loading
libs/rs/rs.spec +1 −1 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ ContextSetSurface { } ContextSetPriority { param uint32_t priority param int32_t priority } AssignName { Loading
libs/rs/rsContext.cpp +29 −5 Original line number Diff line number Diff line Loading @@ -20,11 +20,16 @@ #include <ui/FramebufferNativeWindow.h> #include <ui/EGLUtils.h> #include <sys/types.h> #include <sys/resource.h> #include <cutils/properties.h> #include <GLES/gl.h> #include <GLES/glext.h> #include <cutils/sched_policy.h> using namespace android; using namespace android::renderscript; Loading Loading @@ -234,6 +239,9 @@ static bool getProp(const char *str) void * Context::threadProc(void *vrsc) { Context *rsc = static_cast<Context *>(vrsc); rsc->mNativeThreadId = gettid(); setpriority(PRIO_PROCESS, rsc->mNativeThreadId, ANDROID_PRIORITY_DISPLAY); rsc->props.mLogTimes = getProp("debug.rs.profile"); rsc->props.mLogScripts = getProp("debug.rs.script"); Loading Loading @@ -316,6 +324,25 @@ void * Context::threadProc(void *vrsc) return NULL; } void Context::setPriority(int32_t p) { // Note: If we put this in the proper "background" policy // the wallpapers can become completly unresponsive at times. // This is probably not what we want for something the user is actively // looking at. #if 0 SchedPolicy pol = SP_FOREGROUND; if (p > 0) { pol = SP_BACKGROUND; } if (!set_sched_policy(mNativeThreadId, pol)) { // success; reset the priority as well } #else setpriority(PRIO_PROCESS, mNativeThreadId, p); #endif } Context::Context(Device *dev, bool useDepth) { pthread_mutex_lock(&gInitMutex); Loading Loading @@ -351,10 +378,6 @@ Context::Context(Device *dev, bool useDepth) return; } sched_param sparam; sparam.sched_priority = ANDROID_PRIORITY_DISPLAY; pthread_attr_setschedparam(&threadAttr, &sparam); mWndSurface = NULL; objDestroyOOBInit(); Loading Loading @@ -791,8 +814,9 @@ void rsi_ContextSetSurface(Context *rsc, uint32_t w, uint32_t h, void *sur) rsc->setSurface(w, h, (Surface *)sur); } void rsi_ContextSetPriority(Context *rsc, uint32_t p) void rsi_ContextSetPriority(Context *rsc, int32_t p) { rsc->setPriority(p); } } Loading
libs/rs/rsContext.h +2 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ public: void pause(); void resume(); void setSurface(uint32_t w, uint32_t h, Surface *sur); void setPriority(int32_t p); void assignName(ObjectBase *obj, const char *name, uint32_t len); void removeName(ObjectBase *obj); Loading Loading @@ -198,6 +199,7 @@ protected: bool mPaused; pthread_t mThreadId; pid_t mNativeThreadId; ObjectBaseRef<Script> mRootScript; ObjectBaseRef<ProgramFragment> mFragment; Loading