From 7e7c3d72bcd903542b1556efb05dd7512606ba4f Mon Sep 17 00:00:00 2001 From: Alec Mouri Date: Wed, 6 Jan 2021 17:46:22 -0800 Subject: [PATCH] Check if mGrContext exists when requiring a vk context. Vulkan context is shared with HardwareBitmapUploader and the RenderThread, meaning if the upload thread runs prior to the render thread then some configuration is skipped such as recording the max texture size and cache setup, which affects benchmark tools. So we need to check whether the GrContext exists in addition to checking if the shared VkManager has been properly intialized. Bug: 175913056 Test: hwuimacro works for benchmarks that upload HW bitmaps prior to benchmark execution. For example: tvapp_norcEglImage Change-Id: I149c294b39f1e88226fc5d8d72c30bc4fb3d8404 --- libs/hwui/renderthread/RenderThread.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index a101d46f6da08..7750a31b817f9 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -199,7 +199,10 @@ void RenderThread::requireGlContext() { void RenderThread::requireVkContext() { // the getter creates the context in the event it had been destroyed by destroyRenderingContext - if (vulkanManager().hasVkContext()) { + // Also check if we have a GrContext before returning fast. VulkanManager may be shared with + // the HardwareBitmapUploader which initializes the Vk context without persisting the GrContext + // in the rendering thread. + if (vulkanManager().hasVkContext() && mGrContext) { return; } mVkManager->initialize();