Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec8178eb authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I9c1bad53 into eclair

* changes:
  Add setPriority to allow wallpapers to run at lower cpu priority than default.
parents 19e420c5 7d787b47
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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);
@@ -218,6 +219,7 @@ public class RenderScript {
    Element mElement_XY_F32;
    Element mElement_XYZ_F32;


    ///////////////////////////////////////////////////////////////////////////////////
    //

@@ -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;
+11 −0
Original line number Diff line number Diff line
@@ -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)
{
@@ -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 },
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ ContextSetSurface {
	}

ContextSetPriority {
	param uint32_t priority
	param int32_t priority
	}

AssignName {
+29 −5
Original line number Diff line number Diff line
@@ -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);
}

}
+2 −0
Original line number Diff line number Diff line
@@ -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;