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

Commit 7d787b47 authored by Jason Sams's avatar Jason Sams
Browse files

Add setPriority to allow wallpapers to run at lower cpu priority than default.

parent 04c585e3
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;