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

Commit 3238f730 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix deadlock in render thread when Bitmap.prepareToDraw is invoked"

parents 9fa0a5c4 6983bc40
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -667,12 +667,18 @@ CREATE_BRIDGE3(copyGraphicBufferInto, RenderThread* thread, GraphicBuffer* buffe
}

int RenderProxy::copyGraphicBufferInto(GraphicBuffer* buffer, SkBitmap* bitmap) {
    RenderThread& thread = RenderThread::getInstance();
    if (Properties::isSkiaEnabled() && gettid() == thread.getTid()) {
        //TODO: fix everything that hits this. We should never be triggering a readback ourselves.
        return (int) thread.readback().copyGraphicBufferInto(buffer, bitmap);
    } else {
        SETUP_TASK(copyGraphicBufferInto);
    args->thread = &RenderThread::getInstance();
        args->thread = &thread;
        args->bitmap = bitmap;
        args->buffer = buffer;
        return static_cast<int>(reinterpret_cast<intptr_t>(staticPostAndWait(task)));
    }
}

void RenderProxy::post(RenderTask* task) {
    mRenderThread.queue(task);
@@ -690,6 +696,7 @@ void* RenderProxy::postAndWait(MethodInvokeRenderTask* task) {

void* RenderProxy::staticPostAndWait(MethodInvokeRenderTask* task) {
    RenderThread& thread = RenderThread::getInstance();
    LOG_ALWAYS_FATAL_IF(gettid() == thread.getTid());
    void* retval;
    task->setReturnPtr(&retval);
    thread.queueAndWait(task);