diff options
Diffstat (limited to 'libs/hwui/renderthread/RenderProxy.cpp')
-rw-r--r-- | libs/hwui/renderthread/RenderProxy.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp index fb79272e18af..11614fa144e3 100644 --- a/libs/hwui/renderthread/RenderProxy.cpp +++ b/libs/hwui/renderthread/RenderProxy.cpp @@ -667,11 +667,17 @@ CREATE_BRIDGE3(copyGraphicBufferInto, RenderThread* thread, GraphicBuffer* buffe } int RenderProxy::copyGraphicBufferInto(GraphicBuffer* buffer, SkBitmap* bitmap) { - SETUP_TASK(copyGraphicBufferInto); - args->thread = &RenderThread::getInstance(); - args->bitmap = bitmap; - args->buffer = buffer; - return static_cast<int>(reinterpret_cast<intptr_t>(staticPostAndWait(task))); + 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 = &thread; + args->bitmap = bitmap; + args->buffer = buffer; + return static_cast<int>(reinterpret_cast<intptr_t>(staticPostAndWait(task))); + } } void RenderProxy::post(RenderTask* 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); |