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

Commit 9b6fa775 authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Implement missing safelyRun() on ThreadedRenderer"

parents 3b1da03c fc53ef27
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