[Cherry-pick] Load native GLES driver when specified.

Since ANGLE and native GLES drivers can coexist, when native is
specified, the loader must load the native GLES drivers specified in
ro.hardware.egl. This patch adds the support to load native GLES drivers
when specified.

Bug: b/283858001
Test: atest CtsAngleDeveloperOptionHostTest -c with ANGLE being default
Test: atest CtsAngleDeveloperOptionHostTest -c with native being default
Change-Id: I85840811d9586bd9f2765b47f3cd1a94c9a8580a
Merged-In: I85840811d9586bd9f2765b47f3cd1a94c9a8580a
diff --git a/libs/graphicsenv/GraphicsEnv.cpp b/libs/graphicsenv/GraphicsEnv.cpp
index 5bdffe0..1adf1af 100644
--- a/libs/graphicsenv/GraphicsEnv.cpp
+++ b/libs/graphicsenv/GraphicsEnv.cpp
@@ -420,7 +420,11 @@
     return mShouldUseAngle;
 }
 
-void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseSystemAngle,
+// Set ANGLE information.
+// If path is "system", it means system ANGLE must be used for the process.
+// If shouldUseNativeDriver is true, it means native GLES drivers must be used for the process.
+// If path is set to nonempty and shouldUseNativeDriver is true, ANGLE will be used regardless.
+void GraphicsEnv::setAngleInfo(const std::string& path, const bool shouldUseNativeDriver,
                                const std::string& packageName,
                                const std::vector<std::string> eglFeatures) {
     if (mShouldUseAngle) {
@@ -437,8 +441,13 @@
     mAnglePath = std::move(path);
     ALOGV("setting app package name to '%s'", packageName.c_str());
     mPackageName = std::move(packageName);
-    mShouldUseAngle = true;
-    mShouldUseSystemAngle = shouldUseSystemAngle;
+    if (path == "system") {
+        mShouldUseSystemAngle = true;
+    }
+    if (!path.empty()) {
+        mShouldUseAngle = true;
+    }
+    mShouldUseNativeDriver = shouldUseNativeDriver;
 }
 
 void GraphicsEnv::setLayerPaths(NativeLoaderNamespace* appNamespace,
@@ -564,7 +573,7 @@
         return nullptr;
     }
 
-    mDriverNamespace = android_create_namespace("gfx driver",
+    mDriverNamespace = android_create_namespace("updatable gfx driver",
                                                 mDriverPath.c_str(), // ld_library_path
                                                 mDriverPath.c_str(), // default_library_path
                                                 ANDROID_NAMESPACE_TYPE_ISOLATED,
@@ -648,4 +657,8 @@
     return mShouldUseSystemAngle;
 }
 
+bool GraphicsEnv::shouldUseNativeDriver() {
+    return mShouldUseNativeDriver;
+}
+
 } // namespace android