diff options
author | Jason Sams <rjsams@android.com> | 2009-11-15 12:14:26 -0800 |
---|---|---|
committer | Jason Sams <rjsams@android.com> | 2009-11-15 12:14:26 -0800 |
commit | 7d787b4722eaeb79cab42c36060336e092b77b5f (patch) | |
tree | 4473dfb24df1040538d3ea222649a5ec5d4fd1d0 /libs/rs | |
parent | 04c585e3bcb75c85ceeacf2fd94ea4194f332404 (diff) | |
download | frameworks_base-7d787b4722eaeb79cab42c36060336e092b77b5f.zip frameworks_base-7d787b4722eaeb79cab42c36060336e092b77b5f.tar.gz frameworks_base-7d787b4722eaeb79cab42c36060336e092b77b5f.tar.bz2 |
Add setPriority to allow wallpapers to run at lower cpu priority than default.
Diffstat (limited to 'libs/rs')
-rw-r--r-- | libs/rs/rs.spec | 2 | ||||
-rw-r--r-- | libs/rs/rsContext.cpp | 34 | ||||
-rw-r--r-- | libs/rs/rsContext.h | 2 |
3 files changed, 32 insertions, 6 deletions
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec index da25a27..be988e7 100644 --- a/libs/rs/rs.spec +++ b/libs/rs/rs.spec @@ -43,7 +43,7 @@ ContextSetSurface { } ContextSetPriority { - param uint32_t priority + param int32_t priority } AssignName { diff --git a/libs/rs/rsContext.cpp b/libs/rs/rsContext.cpp index c835dda..deb9592 100644 --- a/libs/rs/rsContext.cpp +++ b/libs/rs/rsContext.cpp @@ -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; @@ -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"); @@ -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); @@ -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(); @@ -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); } } diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h index f3803a5..fb878eb 100644 --- a/libs/rs/rsContext.h +++ b/libs/rs/rsContext.h @@ -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); @@ -198,6 +199,7 @@ protected: bool mPaused; pthread_t mThreadId; + pid_t mNativeThreadId; ObjectBaseRef<Script> mRootScript; ObjectBaseRef<ProgramFragment> mFragment; |