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

Commit ef7aedfc authored by Tim Van Patten's avatar Tim Van Patten
Browse files

ANGLE: Global.Settings should override GameManagerService

If ANGLE is enabled by the Game Dashboard (GameManagerService), but the
user has specified the native driver should be loaded,
GraphicsEnvironment::shouldUseAngle() will still return 'true' and ANGLE
will be loaded.

This CL updates GraphicsEnvironment::shouldUseAngle() to not return true
if the user has forced the native driver.

This CL also updates GameManagerService to allow config values that only
specify 'useAngle', rather than requiring 'downscaleFactor' also.

Tested with the following adb commands:
1.) Enable ANGLE via DeviceConfig for Angry Birds 2:
    adb shell device_config put game_overlay com.rovio.baba mode=3,downscaleFactor=0.7,useAngle=true
2.) Force the native driver:
    adb shell settings put global angle_gl_driver_selection_pkgs com.rovio.baba
    adb shell settings put global angle_gl_driver_selection_values native

Test: adb commands
Test: atest CtsAngleIntegrationHostTestCases
Bug: b/209519090
Change-Id: Ic1fb867129e0707a38470250d333fcbf486cab76
parent 95172370
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -192,14 +192,15 @@ public class GraphicsEnvironment {

        // We only want to use ANGLE if the developer has explicitly chosen something other than
        // default driver.
        final boolean requested = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE);
        if (requested) {
        final boolean forceAngle = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_ANGLE);
        final boolean forceNative = devOptIn.equals(ANGLE_GL_DRIVER_CHOICE_NATIVE);
        if (forceAngle || forceNative) {
            Log.v(TAG, "ANGLE developer option for " + packageName + ": " + devOptIn);
        }

        final boolean gameModeEnabledAngle = isAngleEnabledByGameMode(context, packageName);

        return requested || gameModeEnabledAngle;
        return !forceNative && (forceAngle || gameModeEnabledAngle);
    }

    private int getVulkanVersion(PackageManager pm) {
+3 −4
Original line number Diff line number Diff line
@@ -385,9 +385,8 @@ public final class GameManagerService extends IGameManagerService.Stub {
            }

            public boolean isValid() {
                return (mGameMode == GameManager.GAME_MODE_PERFORMANCE
                        || mGameMode == GameManager.GAME_MODE_BATTERY)
                        && (!mAllowDownscale || getCompatChangeId() != 0);
                return mGameMode == GameManager.GAME_MODE_PERFORMANCE
                        || mGameMode == GameManager.GAME_MODE_BATTERY;
            }

            /**
@@ -839,7 +838,7 @@ public final class GameManagerService extends IGameManagerService.Stub {
            }
            long scaleId = modeConfig.getCompatChangeId();
            if (scaleId == 0) {
                Slog.w(TAG, "Invalid downscaling change id " + scaleId + " for "
                Slog.i(TAG, "Invalid downscaling change id " + scaleId + " for "
                        + packageName);
                return;
            }