Clean up egl_connection_t::shouldUseAngle
If android::GraphicsEnv::getInstance().shouldUseAngle() returns false,
then the ANGLE driver loading can bail out early. The choice should be
made before the app starts loading the driver. If there's a change in
the driver choice during driver loading, then it shouldn't affect the
current loading process, but the next app fresh launch, otherwise crash
will happen for the 3-part driver loading.
Test: build
Bug: b/154237217
Change-Id: I9ea202214bdbc4b70d068137c62d2b1f8ac8ebb5
(cherry picked from commit b22f08618971b0f94ca6ce479ca85e3f5e8833a6)
diff --git a/opengl/libs/EGL/Loader.cpp b/opengl/libs/EGL/Loader.cpp
index 5744182..39bf329 100644
--- a/opengl/libs/EGL/Loader.cpp
+++ b/opengl/libs/EGL/Loader.cpp
@@ -222,13 +222,6 @@
return cnx->dso;
}
- // Check if we should use ANGLE early, so loading each driver doesn't require repeated queries.
- if (android::GraphicsEnv::getInstance().shouldUseAngle()) {
- cnx->shouldUseAngle = true;
- } else {
- cnx->shouldUseAngle = false;
- }
-
// Firstly, try to load ANGLE driver.
driver_t* hnd = attempt_to_load_angle(cnx);
if (!hnd) {
@@ -317,7 +310,6 @@
delete hnd;
cnx->dso = nullptr;
- cnx->shouldUseAngle = false;
cnx->useAngle = false;
if (cnx->vendorEGL) {
@@ -511,14 +503,7 @@
}
static void* load_angle(const char* kind, android_namespace_t* ns, egl_connection_t* cnx) {
- void* so = nullptr;
-
- if ((cnx->shouldUseAngle) || android::GraphicsEnv::getInstance().shouldUseAngle()) {
- so = load_angle_from_namespace(kind, ns);
- cnx->shouldUseAngle = true;
- } else {
- cnx->shouldUseAngle = false;
- }
+ void* so = load_angle_from_namespace(kind, ns);
if (so) {
ALOGV("Loaded ANGLE %s library for '%s' (instead of native)", kind,
@@ -595,6 +580,11 @@
Loader::driver_t* Loader::attempt_to_load_angle(egl_connection_t* cnx) {
ATRACE_CALL();
+
+ if (!android::GraphicsEnv::getInstance().shouldUseAngle()) {
+ return nullptr;
+ }
+
android_namespace_t* ns = android::GraphicsEnv::getInstance().getAngleNamespace();
if (!ns) {
return nullptr;