Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e059399b authored by Peiyong Lin's avatar Peiyong Lin
Browse files

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

This reverts commit a19c130b.

Reason for revert: culprit of boot memory regression

Original commit message:
"""
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 passes this information down to the native
graphics environment so that the EGL loader can properly check.

Bug: b/283858001
Test: atest CtsAngleDeveloperOptionHostTest -c with ANGLE being default
Test: atest CtsAngleDeveloperOptionHostTest -c with native being default
"""

Bug: b/283858001
Bug: b/289956225
Test: forrest test
Change-Id: Idb66f290801de1ef777c909be7b582703fe7e144
Merged-In: Idb66f290801de1ef777c909be7b582703fe7e144
parent 40e068e6
Loading
Loading
Loading
Loading
+26 −42
Original line number Diff line number Diff line
@@ -112,17 +112,9 @@ public class GraphicsEnvironment {
    private static final int ANGLE_GL_DRIVER_ALL_ANGLE_OFF = 0;

    // Values for ANGLE_GL_DRIVER_SELECTION_VALUES
    private enum AngleDriverChoice {
        DEFAULT("default"),
        ANGLE("angle"),
        NATIVE("native");

        public final String choice;

        AngleDriverChoice(String choice) {
            this.choice = choice;
        }
    }
    private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default";
    private static final String ANGLE_GL_DRIVER_CHOICE_ANGLE = "angle";
    private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";

    private static final String PROPERTY_RO_ANGLE_SUPPORTED = "ro.gfx.angle.supported";

@@ -203,16 +195,15 @@ public class GraphicsEnvironment {
    }

    /**
     * Query to determine the ANGLE driver choice.
     * Query to determine if ANGLE should be used
     */
    private AngleDriverChoice queryAngleChoice(Context context, Bundle coreSettings,
                                               String packageName) {
    private boolean shouldUseAngle(Context context, Bundle coreSettings, String packageName) {
        if (TextUtils.isEmpty(packageName)) {
            Log.v(TAG, "No package name specified; use the system driver");
            return AngleDriverChoice.DEFAULT;
            return false;
        }

        return queryAngleChoiceInternal(context, coreSettings, packageName);
        return shouldUseAngleInternal(context, coreSettings, packageName);
    }

    private int getVulkanVersion(PackageManager pm) {
@@ -433,11 +424,10 @@ public class GraphicsEnvironment {
     *    forces a choice;
     * 3) Use ANGLE if isAngleEnabledByGameMode() returns true;
     */
    private AngleDriverChoice queryAngleChoiceInternal(Context context, Bundle bundle,
                                                       String packageName) {
    private boolean shouldUseAngleInternal(Context context, Bundle bundle, String packageName) {
        // Make sure we have a good package name
        if (TextUtils.isEmpty(packageName)) {
            return AngleDriverChoice.DEFAULT;
            return false;
        }

        // Check the semi-global switch (i.e. once system has booted enough) for whether ANGLE
@@ -452,7 +442,7 @@ public class GraphicsEnvironment {
        }
        if (allUseAngle == ANGLE_GL_DRIVER_ALL_ANGLE_ON) {
            Log.v(TAG, "Turn on ANGLE for all applications.");
            return AngleDriverChoice.ANGLE;
            return true;
        }

        // Get the per-application settings lists
@@ -475,7 +465,7 @@ public class GraphicsEnvironment {
                            + optInPackages.size() + ", "
                        + "number of values: "
                            + optInValues.size());
            return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT;
            return mEnabledByGameMode;
        }

        // See if this application is listed in the per-application settings list
@@ -483,7 +473,7 @@ public class GraphicsEnvironment {

        if (pkgIndex < 0) {
            Log.v(TAG, packageName + " is not listed in per-application setting");
            return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT;
            return mEnabledByGameMode;
        }
        mAngleOptInIndex = pkgIndex;

@@ -493,14 +483,14 @@ public class GraphicsEnvironment {
        Log.v(TAG,
                "ANGLE Developer option for '" + packageName + "' "
                        + "set to: '" + optInValue + "'");
        if (optInValue.equals(AngleDriverChoice.ANGLE.choice)) {
            return AngleDriverChoice.ANGLE;
        } else if (optInValue.equals(AngleDriverChoice.NATIVE.choice)) {
            return AngleDriverChoice.NATIVE;
        if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
            return true;
        } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
            return false;
        } else {
            // The user either chose default or an invalid value; go with the default driver or what
            // the game mode indicates
            return mEnabledByGameMode ? AngleDriverChoice.ANGLE : AngleDriverChoice.DEFAULT;
            return mEnabledByGameMode;
        }
    }

@@ -568,13 +558,7 @@ public class GraphicsEnvironment {
    private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager,
            String packageName) {

        final AngleDriverChoice angleDriverChoice = queryAngleChoice(context, bundle, packageName);
        if (angleDriverChoice == AngleDriverChoice.DEFAULT) {
            return false;
        }

        if (queryAngleChoice(context, bundle, packageName) == AngleDriverChoice.NATIVE) {
            nativeSetAngleInfo("", true, packageName, null);
        if (!shouldUseAngle(context, bundle, packageName)) {
            return false;
        }

@@ -643,10 +627,10 @@ public class GraphicsEnvironment {
            Log.d(TAG, "ANGLE package libs: " + paths);
        }

        // If we make it to here, ANGLE apk will be used.  Call nativeSetAngleInfo() with the
        // application package name and ANGLE features to use.
        // If we make it to here, ANGLE will be used.  Call setAngleInfo() with the package name,
        // and features to use.
        final String[] features = getAngleEglFeatures(context, bundle);
        nativeSetAngleInfo(paths, false, packageName, features);
        setAngleInfo(paths, false, packageName, features);

        return true;
    }
@@ -668,10 +652,10 @@ public class GraphicsEnvironment {
            return false;
        }

        // If we make it to here, system ANGLE will be used.  Call nativeSetAngleInfo() with
        // the application package name and ANGLE features to use.
        // If we make it to here, ANGLE will be used.  Call setAngleInfo() with the package name,
        // and features to use.
        final String[] features = getAngleEglFeatures(context, bundle);
        nativeSetAngleInfo("system", false, packageName, features);
        setAngleInfo("", true, packageName, features);
        return true;
    }

@@ -952,8 +936,8 @@ public class GraphicsEnvironment {
    private static native void setDriverPathAndSphalLibraries(String path, String sphalLibraries);
    private static native void setGpuStats(String driverPackageName, String driverVersionName,
            long driverVersionCode, long driverBuildTime, String appPackageName, int vulkanVersion);
    private static native void nativeSetAngleInfo(String path, boolean useNativeDriver,
            String packageName, String[] features);
    private static native void setAngleInfo(String path, boolean useSystemAngle, String packageName,
            String[] features);
    private static native boolean setInjectLayersPrSetDumpable();
    private static native void nativeToggleAngleAsSystemDriver(boolean enabled);

+3 −3
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ void setGpuStats_native(JNIEnv* env, jobject clazz, jstring driverPackageName,
                                                    appPackageNameChars.c_str(), vulkanVersion);
}

void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useNativeDriver,
void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useSystemAngle,
                         jstring packageName, jobjectArray featuresObj) {
    ScopedUtfChars pathChars(env, path);
    ScopedUtfChars packageNameChars(env, packageName);
@@ -73,7 +73,7 @@ void setAngleInfo_native(JNIEnv* env, jobject clazz, jstring path, jboolean useN
        }
    }

    android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), useNativeDriver,
    android::GraphicsEnv::getInstance().setAngleInfo(pathChars.c_str(), useSystemAngle,
                                                     packageNameChars.c_str(), features);
}

@@ -118,7 +118,7 @@ const JNINativeMethod g_methods[] = {
         reinterpret_cast<void*>(setGpuStats_native)},
        {"setInjectLayersPrSetDumpable", "()Z",
         reinterpret_cast<void*>(setInjectLayersPrSetDumpable_native)},
        {"nativeSetAngleInfo", "(Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V",
        {"setAngleInfo", "(Ljava/lang/String;ZLjava/lang/String;[Ljava/lang/String;)V",
         reinterpret_cast<void*>(setAngleInfo_native)},
        {"setLayerPaths", "(Ljava/lang/ClassLoader;Ljava/lang/String;)V",
         reinterpret_cast<void*>(setLayerPaths_native)},