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

Commit fc53ef27 authored by John Reck's avatar John Reck
Browse files

Implement missing safelyRun() on ThreadedRenderer

Change-Id: I14b75f37a13fabaa759a51369190dbdc84087c4b
parent f6eebb21
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -113,8 +113,8 @@ public class ThreadedRenderer extends HardwareRenderer {

    @Override
    boolean safelyRun(Runnable action) {
        // TODO:
        return false;
        nRunWithGlContext(mNativeProxy, action);
        return true;
    }

    @Override
@@ -256,6 +256,7 @@ public class ThreadedRenderer extends HardwareRenderer {
    private static native void nSetup(long nativeProxy, int width, int height);
    private static native void nDrawDisplayList(long nativeProxy, long displayList,
            int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom);
    private static native void nRunWithGlContext(long nativeProxy, Runnable runnable);
    private static native void nDestroyCanvas(long nativeProxy);

    private static native void nAttachFunctor(long nativeProxy, long functor);
+8 −0
Original line number Diff line number Diff line
@@ -131,6 +131,13 @@ static void android_view_ThreadedRenderer_detachFunctor(JNIEnv* env, jobject cla
    proxy->detachFunctor(functor);
}

static void android_view_ThreadedRenderer_runWithGlContext(JNIEnv* env, jobject clazz,
        jlong proxyPtr, jobject jrunnable) {
    RenderProxy* proxy = reinterpret_cast<RenderProxy*>( proxyPtr);
    RenderTask* task = new JavaTask(env, jrunnable);
    proxy->runWithGlContext(task);
}

#endif

// ----------------------------------------------------------------------------
@@ -151,6 +158,7 @@ static JNINativeMethod gMethods[] = {
    { "nDestroyCanvas", "(J)V", (void*) android_view_ThreadedRenderer_destroyCanvas},
    { "nAttachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_attachFunctor},
    { "nDetachFunctor", "(JJ)V", (void*) android_view_ThreadedRenderer_detachFunctor},
    { "nRunWithGlContext", "(JLjava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_runWithGlContext },
#endif
};

+10 −0
Original line number Diff line number Diff line
@@ -462,6 +462,16 @@ void CanvasContext::queueFunctorsTask(int delayMs) {
    mRenderThread.queueDelayed(&mInvokeFunctorsTask, delayMs);
}

void CanvasContext::runWithGlContext(RenderTask* task) {
    if (mEglSurface != EGL_NO_SURFACE) {
        mGlobalContext->makeCurrent(mEglSurface);
    } else {
        mGlobalContext->usePBufferSurface();
    }

    task->run();
}

} /* namespace renderthread */
} /* namespace uirenderer */
} /* namespace android */
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ public:
    void attachFunctor(Functor* functor);
    void detachFunctor(Functor* functor);

    void runWithGlContext(RenderTask* task);

private:
    void setSurface(EGLNativeWindowType window);
    void swapBuffers();
+12 −0
Original line number Diff line number Diff line
@@ -170,6 +170,18 @@ void RenderProxy::detachFunctor(Functor* functor) {
    post(task);
}

CREATE_BRIDGE2(runWithGlContext, CanvasContext* context, RenderTask* task) {
    args->context->runWithGlContext(args->task);
    return NULL;
}

void RenderProxy::runWithGlContext(RenderTask* gltask) {
    SETUP_TASK(runWithGlContext);
    args->context = mContext;
    args->task = gltask;
    postAndWait(task);
}

MethodInvokeRenderTask* RenderProxy::createTask(RunnableMethod method) {
    // TODO: Consider having a small pool of these to avoid alloc churn
    return new MethodInvokeRenderTask(method);
Loading