Zygote: preload Vulkan driver if hwui renders with Vulkan

In Android 12, vkEnumerateInstanceVersion is made to trigger driver
loading and the api itself neither has extra overhead nor talk to the
driver. So this change uses vkEnumerateInstanceVersion to preload
Vulkan driver in Zygote.

Bug: 135536511
Test: atest CtsUiRenderingTestCases all pass on GL backend
Test: atest CtsUiRenderingTestCases no regression on VK backend
Change-Id: I5017b922843aadc2c4a4237711b8011857703129
This commit is contained in:
Yiwei Zhang
2020-07-31 14:13:02 -07:00
parent 43f44ad7e3
commit 6a7dc402d5

View File

@@ -16,14 +16,14 @@
#include "android/graphics/jni_runtime.h"
#include <android/log.h>
#include <nativehelper/JNIHelp.h>
#include <sys/cdefs.h>
#include <EGL/egl.h>
#include <GraphicsJNI.h>
#include <Properties.h>
#include <SkGraphics.h>
#include <android/log.h>
#include <nativehelper/JNIHelp.h>
#include <sys/cdefs.h>
#include <vulkan/vulkan.h>
#undef LOG_TAG
#define LOG_TAG "AndroidGraphicsJNI"
@@ -172,6 +172,11 @@ using android::uirenderer::RenderPipelineType;
void zygote_preload_graphics() {
if (Properties::peekRenderPipelineType() == RenderPipelineType::SkiaGL) {
// Preload GL driver if HWUI renders with GL backend.
eglGetDisplay(EGL_DEFAULT_DISPLAY);
} else {
// Preload Vulkan driver if HWUI renders with Vulkan backend.
uint32_t apiVersion;
vkEnumerateInstanceVersion(&apiVersion);
}
}
}