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
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
index a101d46..7750a31 100644
--- a/libs/hwui/renderthread/RenderThread.cpp
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -199,7 +199,10 @@
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();