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

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

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

Reason for revert: Revert to reland the patch. Original patch
was reverted due to PcmaPhotoEditingV3 regression, see b/293486861.

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
Test: atest CtsAngleDeveloperOptionHostTest -c with ANGLE being default
Test: atest CtsAngleDeveloperOptionHostTest -c with native being default
Change-Id: I70b197f7b39afa52cb63cea48db274177123980d
Merged-In: I70b197f7b39afa52cb63cea48db274177123980d
parent 66be198b
Loading
Loading
Loading
Loading
+33 −25
Original line number Original line Diff line number Diff line
@@ -115,6 +115,7 @@ public class GraphicsEnvironment {
    private static final String ANGLE_GL_DRIVER_CHOICE_DEFAULT = "default";
    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_ANGLE = "angle";
    private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";
    private static final String ANGLE_GL_DRIVER_CHOICE_NATIVE = "native";
    private static final String SYSTEM_ANGLE_STRING = "system";


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


@@ -124,7 +125,6 @@ public class GraphicsEnvironment {
    private GameManager mGameManager;
    private GameManager mGameManager;


    private int mAngleOptInIndex = -1;
    private int mAngleOptInIndex = -1;
    private boolean mEnabledByGameMode = false;
    private boolean mShouldUseAngle = false;
    private boolean mShouldUseAngle = false;


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


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


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


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


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


        // Get the per-application settings lists
        // Get the per-application settings lists
@@ -455,17 +457,19 @@ public class GraphicsEnvironment {
        Log.v(TAG, "  angle_gl_driver_selection_pkgs=" + optInPackages);
        Log.v(TAG, "  angle_gl_driver_selection_pkgs=" + optInPackages);
        Log.v(TAG, "  angle_gl_driver_selection_values=" + optInValues);
        Log.v(TAG, "  angle_gl_driver_selection_values=" + optInValues);


        mEnabledByGameMode = isAngleEnabledByGameMode(context, packageName);
        final String gameModeChoice = isAngleEnabledByGameMode(context, packageName)
                                      ? ANGLE_GL_DRIVER_CHOICE_ANGLE
                                      : ANGLE_GL_DRIVER_CHOICE_DEFAULT;


        // Make sure we have good settings to use
        // Make sure we have good settings to use
        if (optInPackages.size() != optInValues.size()) {
        if (optInPackages.size() == 0 || optInPackages.size() != optInValues.size()) {
            Log.v(TAG,
            Log.v(TAG,
                    "Global.Settings values are invalid: "
                    "Global.Settings values are invalid: "
                        + "number of packages: "
                        + "number of packages: "
                            + optInPackages.size() + ", "
                            + optInPackages.size() + ", "
                        + "number of values: "
                        + "number of values: "
                            + optInValues.size());
                            + optInValues.size());
            return mEnabledByGameMode;
            return gameModeChoice;
        }
        }


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


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


@@ -484,13 +488,13 @@ public class GraphicsEnvironment {
                "ANGLE Developer option for '" + packageName + "' "
                "ANGLE Developer option for '" + packageName + "' "
                        + "set to: '" + optInValue + "'");
                        + "set to: '" + optInValue + "'");
        if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
        if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE)) {
            return true;
            return ANGLE_GL_DRIVER_CHOICE_ANGLE;
        } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
        } else if (optInValue.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
            return false;
            return ANGLE_GL_DRIVER_CHOICE_NATIVE;
        } else {
        } else {
            // The user either chose default or an invalid value; go with the default driver or what
            // The user either chose default or an invalid value; go with the default driver or what
            // the game mode indicates
            // the game mode indicates
            return mEnabledByGameMode;
            return gameModeChoice;
        }
        }
    }
    }


@@ -557,8 +561,12 @@ public class GraphicsEnvironment {
     */
     */
    private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager,
    private boolean setupAngle(Context context, Bundle bundle, PackageManager packageManager,
            String packageName) {
            String packageName) {

        final String angleChoice = queryAngleChoice(context, bundle, packageName);
        if (!shouldUseAngle(context, bundle, packageName)) {
        if (angleChoice.equals(ANGLE_GL_DRIVER_CHOICE_DEFAULT)) {
            return false;
        }
        if (angleChoice.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE)) {
            nativeSetAngleInfo("", true, packageName, null);
            return false;
            return false;
        }
        }


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


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


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


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


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


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


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


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


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