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

Commit b3e07d83 authored by Andy Yu's avatar Andy Yu
Browse files

Remove FrameRate Enum to allow all possible frame rate values

Previously we restricted the frame rate override of game intervention to
a certain set of values, which is now not scalable and not compatible to
all devices.

In addition, SurfaceFlinger is able to choose the proper
frame rate to run at, there is no longer a need to impose such
restriction to available frame rates.

Bug: 296988493
Bug: 253178812

Tested on Pixel 7 Pro userdebug
Test: atest GameManagerServiceTests
Test: atest GameManagerTests
Test: atest CtsFrameRateOverrideTestCases

Change-Id: I2e2e18a9ec0d1a2fd505464a1297e9b7f9874d1c
parent 08bb355a
Loading
Loading
Loading
Loading
+0 −10
Original line number Original line Diff line number Diff line
@@ -86,16 +86,6 @@ public final class GameManagerTests {
        GameModeInfo gameModeInfo = mGameManager.getGameModeInfo(mPackageName);
        GameModeInfo gameModeInfo = mGameManager.getGameModeInfo(mPackageName);
        assertNotNull(gameModeInfo);
        assertNotNull(gameModeInfo);
        assertNull(gameModeInfo.getGameModeConfiguration(GameManager.GAME_MODE_CUSTOM));
        assertNull(gameModeInfo.getGameModeConfiguration(GameManager.GAME_MODE_CUSTOM));
        GameModeConfiguration unsupportedFpsConfig =
                new GameModeConfiguration.Builder().setFpsOverride(
                        70).setScalingFactor(0.5f).build();
        mGameManager.updateCustomGameModeConfiguration(mPackageName, unsupportedFpsConfig);
        gameModeInfo = mGameManager.getGameModeInfo(mPackageName);
        assertNotNull(gameModeInfo);
        // TODO(b/243448953): update to non-zero FPS when matching is implemented
        assertEquals(new GameModeConfiguration.Builder().setFpsOverride(
                        GameModeConfiguration.FPS_OVERRIDE_NONE).setScalingFactor(0.5f).build(),
                gameModeInfo.getGameModeConfiguration(GameManager.GAME_MODE_CUSTOM));


        GameModeConfiguration supportedFpsConfig =
        GameModeConfiguration supportedFpsConfig =
                new GameModeConfiguration.Builder().setFpsOverride(
                new GameModeConfiguration.Builder().setFpsOverride(
+12 −55
Original line number Original line Diff line number Diff line
@@ -417,59 +417,6 @@ public final class GameManagerService extends IGameManagerService.Stub {
        }
        }
    }
    }


    public enum FrameRate {
        FPS_DEFAULT(0),
        FPS_30(30),
        FPS_36(36),
        FPS_40(40),
        FPS_45(45),
        FPS_48(48),
        FPS_60(60),
        FPS_72(72),
        FPS_90(90),
        FPS_120(120),
        FPS_144(144),
        FPS_INVALID(-1);

        public final int fps;

        FrameRate(int fps) {
            this.fps = fps;
        }
    }

    // Turn the raw string to the corresponding fps int.
    // Return 0 when disabling, -1 for invalid fps.
    static int getFpsInt(String raw) {
        // TODO(b/243448953): make sure this translates to proper values based on current display
        switch (raw) {
            case "30":
                return FrameRate.FPS_30.fps;
            case "36":
                return FrameRate.FPS_36.fps;
            case "40":
                return FrameRate.FPS_40.fps;
            case "45":
                return FrameRate.FPS_45.fps;
            case "48":
                return FrameRate.FPS_48.fps;
            case "60":
                return FrameRate.FPS_60.fps;
            case "72":
                return FrameRate.FPS_72.fps;
            case "90":
                return FrameRate.FPS_90.fps;
            case "120":
                return FrameRate.FPS_120.fps;
            case "144":
                return FrameRate.FPS_144.fps;
            case "disable":
            case "":
                return FrameRate.FPS_DEFAULT.fps;
        }
        return FrameRate.FPS_INVALID.fps;
    }

    /**
    /**
     * Called by games to communicate the current state to the platform.
     * Called by games to communicate the current state to the platform.
     *
     *
@@ -717,7 +664,12 @@ public final class GameManagerService extends IGameManagerService.Stub {
            }
            }


            public synchronized int getFps() {
            public synchronized int getFps() {
                return GameManagerService.getFpsInt(mFps);
                try {
                    final int fpsInt = Integer.parseInt(mFps);
                    return fpsInt;
                } catch (NumberFormatException e) {
                    return 0;
                }
            }
            }


            synchronized String getFpsStr() {
            synchronized String getFpsStr() {
@@ -757,7 +709,12 @@ public final class GameManagerService extends IGameManagerService.Stub {
            }
            }


            android.app.GameModeConfiguration toPublicGameModeConfig() {
            android.app.GameModeConfiguration toPublicGameModeConfig() {
                int fpsOverride = getFpsInt(mFps);
                int fpsOverride;
                try {
                    fpsOverride = Integer.parseInt(mFps);
                } catch (NumberFormatException e) {
                    fpsOverride = 0;
                }
                // TODO(b/243448953): match to proper value in case of display change?
                // TODO(b/243448953): match to proper value in case of display change?
                fpsOverride = fpsOverride > 0 ? fpsOverride
                fpsOverride = fpsOverride > 0 ? fpsOverride
                        : android.app.GameModeConfiguration.FPS_OVERRIDE_NONE;
                        : android.app.GameModeConfiguration.FPS_OVERRIDE_NONE;
+6 −4
Original line number Original line Diff line number Diff line
@@ -241,8 +241,10 @@ public class GameManagerShellCommand extends ShellCommand {
                case "--fps":
                case "--fps":
                    if (fpsStr == null) {
                    if (fpsStr == null) {
                        fpsStr = getNextArgRequired();
                        fpsStr = getNextArgRequired();
                        if (fpsStr != null && GameManagerService.getFpsInt(fpsStr) == -1) {
                        try {
                            pw.println("Invalid frame rate '" + fpsStr + "'");
                            Integer.parseInt(fpsStr);
                        } catch (NumberFormatException e) {
                            pw.println("Invalid frame rate: '" + fpsStr + "'");
                            return -1;
                            return -1;
                        }
                        }
                    } else {
                    } else {
@@ -375,8 +377,8 @@ public class GameManagerShellCommand extends ShellCommand {
        pw.println("      --downscale [0.3|0.35|0.4|0.45|0.5|0.55|0.6|0.65");
        pw.println("      --downscale [0.3|0.35|0.4|0.45|0.5|0.55|0.6|0.65");
        pw.println("                  |0.7|0.75|0.8|0.85|0.9|disable]: Set app to run at the");
        pw.println("                  |0.7|0.75|0.8|0.85|0.9|disable]: Set app to run at the");
        pw.println("                                                   specified scaling ratio.");
        pw.println("                                                   specified scaling ratio.");
        pw.println("      --fps [30|45|60|90|120|disable]: Set app to run at the specified fps,");
        pw.println("      --fps: Integer value to set app to run at the specified fps,");
        pw.println("                                       if supported.");
        pw.println("             if supported. 0 to disable.");
        pw.println("  reset [--mode [2|3|performance|battery] --user <USER_ID>] <PACKAGE_NAME>");
        pw.println("  reset [--mode [2|3|performance|battery] --user <USER_ID>] <PACKAGE_NAME>");
        pw.println("      Resets the game mode of the app to device configuration.");
        pw.println("      Resets the game mode of the app to device configuration.");
        pw.println("      This should only be used to reset any override to non custom game mode");
        pw.println("      This should only be used to reset any override to non custom game mode");