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

Commit 1fcbf838 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes from topic "angle_rules_fast_path"

* changes:
  Guard ANGLE rules checking with a whitelist
  Revert "Revert "Enable ANGLE-for-Android rule processing again""
parents a75a6ee0 5ebb0db1
Loading
Loading
Loading
Loading
+42 −27
Original line number Diff line number Diff line
@@ -368,26 +368,6 @@ public class GraphicsEnvironment {
        return false;
    }

    /**
     * Attempt to setup ANGLE with a (temporary) default rules file: b/121153494
     * True: Rules file was loaded.
     * False: Rules file was *not* loaded.
     */
    private boolean setupAngleRulesDebug(String packageName, String paths, String devOptIn) {
        // b/121153494
        // Skip APK rules file checking.
        if (!DEBUG) {
            Log.v(TAG, "Skipping loading the rules file.");
            // Fill in some default values for now, so the loader can get an answer when it asks.
            // Most importantly, we need to indicate which app we are init'ing and what the
            // developer options for it are so we can turn on ANGLE if needed.
            setAngleInfo(paths, packageName, devOptIn, null, 0, 0);
            return true;
        }

        return false;
    }

    /**
     * Attempt to setup ANGLE with a rules file loaded from the ANGLE APK.
     * True: APK rules file was loaded.
@@ -424,17 +404,58 @@ public class GraphicsEnvironment {
        return false;
    }

    /**
     * Pull ANGLE whitelist from GlobalSettings and compare against current package
     */
    private boolean checkAngleWhitelist(Bundle bundle, String packageName) {
        List<String> angleWhitelist =
                getGlobalSettingsString(bundle,
                    Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST);

        return angleWhitelist.contains(packageName);
    }

    /**
     * Pass ANGLE details down to trigger enable logic
     */
    public void setupAngle(Context context, Bundle bundle, String packageName) {
        String devOptIn = getDriverForPkg(bundle, packageName);
        if (packageName.isEmpty()) {
            Log.v(TAG, "No package name available yet, skipping ANGLE setup");
            return;
        }

        String devOptIn = getDriverForPkg(bundle, packageName);
        if (DEBUG) {
            Log.v(TAG, "ANGLE Developer option for '" + packageName + "' "
                    + "set to: '" + devOptIn + "'");
        }

        // We only need to check rules if the app is whitelisted or the developer has
        // explicitly chosen something other than default driver.
        //
        // The whitelist will be generated by the ANGLE APK at both boot time and
        // ANGLE update time. It will only include apps mentioned in the rules file.
        //
        // If the user has set the developer option to something other than default,
        // we need to call setupAngleRulesApk() with the package name and the developer
        // option value (native/angle/other). Then later when we are actually trying to
        // load a driver, GraphicsEnv::shouldUseAngle() has seen the package name before
        // and can confidently answer yes/no based on the previously set developer
        // option value.
        boolean whitelisted = checkAngleWhitelist(bundle, packageName);
        boolean defaulted = devOptIn.equals(sDriverMap.get(OpenGlDriverChoice.DEFAULT));
        boolean rulesCheck = (whitelisted || !defaulted);
        if (!rulesCheck) {
            return;
        }

        if (whitelisted) {
            Log.v(TAG, "ANGLE whitelist includes " + packageName);
        }
        if (!defaulted) {
            Log.v(TAG, "ANGLE developer option for " + packageName + ": " + devOptIn);
        }

        String anglePkgName = getAnglePackageName(context);
        if (anglePkgName.isEmpty()) {
            Log.e(TAG, "Failed to find ANGLE package.");
@@ -466,12 +487,6 @@ public class GraphicsEnvironment {
            return;
        }

        // b/121153494
        if (setupAngleRulesDebug(packageName, paths, devOptIn)) {
            // We setup ANGLE with defaults, so we're done here.
            return;
        }

        if (setupAngleRulesApk(anglePkgName, angleInfo, context, packageName, paths, devOptIn)) {
            // We setup ANGLE with rules from the APK, so we're done here.
            return;
+7 −0
Original line number Diff line number Diff line
@@ -12147,6 +12147,13 @@ public final class Settings {
        public static final String GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES =
                "angle_gl_driver_selection_values";
        /**
         * List of package names that should check ANGLE rules
         * @hide
         */
        public static final String GLOBAL_SETTINGS_ANGLE_WHITELIST =
                "angle_whitelist";
        /**
         * Game Update Package global preference for all Apps.
         * 0 = Default
+2 −0
Original line number Diff line number Diff line
@@ -451,6 +451,8 @@ message GlobalSettingsProto {
        optional SettingProto gup_blacklist = 11;
        // List of Apps that are allowed to use Game Driver package.
        optional SettingProto game_driver_whitelist = 12;
        // ANGLE - List of Apps that can check ANGLE rules
        optional SettingProto angle_whitelist = 13;
    }
    optional Gpu gpu = 59;

+1 −0
Original line number Diff line number Diff line
@@ -481,6 +481,7 @@ public class SettingsBackupTest {
                    Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_ALL_ANGLE,
                    Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_PKGS,
                    Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES,
                    Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST,
                    Settings.Global.GUP_DEV_ALL_APPS,
                    Settings.Global.GUP_DEV_OPT_IN_APPS,
                    Settings.Global.GUP_DEV_OPT_OUT_APPS,
+3 −0
Original line number Diff line number Diff line
@@ -697,6 +697,9 @@ class SettingsProtoDumpUtil {
        dumpSetting(s, p,
                Settings.Global.GLOBAL_SETTINGS_ANGLE_GL_DRIVER_SELECTION_VALUES,
                GlobalSettingsProto.Gpu.ANGLE_GL_DRIVER_SELECTION_VALUES);
        dumpSetting(s, p,
                Settings.Global.GLOBAL_SETTINGS_ANGLE_WHITELIST,
                GlobalSettingsProto.Gpu.ANGLE_WHITELIST);
        dumpSetting(s, p,
                Settings.Global.GPU_DEBUG_LAYER_APP,
                GlobalSettingsProto.Gpu.DEBUG_LAYER_APP);
Loading