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

Commit 4f76add4 authored by Andy Yu's avatar Andy Yu Committed by Android (Google) Code Review
Browse files

Merge "Add debug system property to guard Game Default Frame Rate" into main

parents 356a1b24 f4d3f123
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -142,8 +142,8 @@ public final class GameManagerService extends IGameManagerService.Stub {
    static final int WRITE_GAME_MODE_INTERVENTION_LIST_FILE = 6;
    static final int WRITE_DELAY_MILLIS = 10 * 1000;  // 10 seconds
    static final int LOADING_BOOST_MAX_DURATION = 5 * 1000;  // 5 seconds
    static final String PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED =
            "persist.graphics.game_default_frame_rate.enabled";
    static final String PROPERTY_DEBUG_GFX_GAME_DEFAULT_FRAME_RATE_DISABLED =
            "debug.graphics.game_default_frame_rate.disabled";
    static final String PROPERTY_RO_SURFACEFLINGER_GAME_DEFAULT_FRAME_RATE =
            "ro.surface_flinger.game_default_frame_rate_override";

@@ -2211,17 +2211,10 @@ public final class GameManagerService extends IGameManagerService.Stub {
        nativeSetGameDefaultFrameRateOverride(uid, frameRate);
    }

    private float getGameDefaultFrameRate() {
        final boolean isGameDefaultFrameRateEnabled;
    private float getGameDefaultFrameRate(boolean isEnabled) {
        float gameDefaultFrameRate = 0.0f;
        synchronized (mLock) {
            isGameDefaultFrameRateEnabled =
                    mSysProps.getBoolean(
                            PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED, true);
        }
        if (gameDefaultFrameRate()) {
            gameDefaultFrameRate = isGameDefaultFrameRateEnabled
                    ? mGameDefaultFrameRateValue : 0.0f;
            gameDefaultFrameRate = isEnabled ? mGameDefaultFrameRateValue : 0.0f;
        }
        return gameDefaultFrameRate;
    }
@@ -2237,24 +2230,23 @@ public final class GameManagerService extends IGameManagerService.Stub {
    }

    private void toggleGameDefaultFrameRateUnchecked(boolean isEnabled) {
        // Update system properties.
        // Here we only need to immediately update games that are in the foreground.
        // We will update game default frame rate when a game comes into foreground in
        // MyUidObserver.
        synchronized (mLock) {
            if (isEnabled) {
                mSysProps.set(
                        PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED, "true");
                        PROPERTY_DEBUG_GFX_GAME_DEFAULT_FRAME_RATE_DISABLED, "false");
            } else {
                mSysProps.set(
                        PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED, "false");
                        PROPERTY_DEBUG_GFX_GAME_DEFAULT_FRAME_RATE_DISABLED, "true");
            }
        }

        // Update all foreground games' frame rate.
        synchronized (mUidObserverLock) {
            for (int uid : mForegroundGameUids) {
                setGameDefaultFrameRateOverride(uid, getGameDefaultFrameRate());
                setGameDefaultFrameRateOverride(uid, getGameDefaultFrameRate(isEnabled));
            }
        }
    }
@@ -2296,7 +2288,11 @@ public final class GameManagerService extends IGameManagerService.Stub {
                    Slog.v(TAG, "Game power mode ON (process state was changed to foreground)");
                    mPowerManagerInternal.setPowerMode(Mode.GAME, true);
                }
                setGameDefaultFrameRateOverride(uid, getGameDefaultFrameRate());
                final boolean isGameDefaultFrameRateDisabled =
                        mSysProps.getBoolean(
                                PROPERTY_DEBUG_GFX_GAME_DEFAULT_FRAME_RATE_DISABLED, false);
                setGameDefaultFrameRateOverride(uid,
                        getGameDefaultFrameRate(!isGameDefaultFrameRateDisabled));
                mForegroundGameUids.add(uid);
            }
        }
+7 −32
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSess
import static com.android.server.app.GameManagerService.CANCEL_GAME_LOADING_MODE;
import static com.android.server.app.GameManagerService.Injector;
import static com.android.server.app.GameManagerService.LOADING_BOOST_MAX_DURATION;
import static com.android.server.app.GameManagerService.PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED;
import static com.android.server.app.GameManagerService.PROPERTY_DEBUG_GFX_GAME_DEFAULT_FRAME_RATE_DISABLED;
import static com.android.server.app.GameManagerService.PROPERTY_RO_SURFACEFLINGER_GAME_DEFAULT_FRAME_RATE;
import static com.android.server.app.GameManagerService.SET_GAME_STATE;
import static com.android.server.app.GameManagerService.WRITE_DELAY_MILLIS;
@@ -2427,8 +2427,8 @@ public class GameManagerServiceTests {
                ArgumentMatchers.eq(PROPERTY_RO_SURFACEFLINGER_GAME_DEFAULT_FRAME_RATE),
                anyInt())).thenReturn(60);
        when(mSysPropsMock.getBoolean(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                ArgumentMatchers.eq(true))).thenReturn(true);
                ArgumentMatchers.eq(PROPERTY_DEBUG_GFX_GAME_DEFAULT_FRAME_RATE_DISABLED),
                ArgumentMatchers.eq(false))).thenReturn(false);
        gameManagerService.onBootCompleted();

        // Set up a game in the foreground.
@@ -2441,11 +2441,7 @@ public class GameManagerServiceTests {
        gameManagerService.toggleGameDefaultFrameRate(true);

        // Verify that:
        // 1) The system property is set correctly
        // 2) setDefaultFrameRateOverride is called with correct arguments
        Mockito.verify(mSysPropsMock).set(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                ArgumentMatchers.eq("true"));
        // setDefaultFrameRateOverride is called with correct arguments
        Mockito.verify(gameManagerService, times(1))
                .setGameDefaultFrameRateOverride(ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
                                                 ArgumentMatchers.eq(60.0f));
@@ -2461,17 +2457,10 @@ public class GameManagerServiceTests {
                somePackageId, ActivityManager.PROCESS_STATE_TOP, 0, 0);

        // Toggle game default frame rate off.
        when(mSysPropsMock.getBoolean(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                ArgumentMatchers.eq(true))).thenReturn(false);
        gameManagerService.toggleGameDefaultFrameRate(false);

        // Verify that:
        // 1) The system property is set correctly
        // 2) setDefaultFrameRateOverride is called with correct arguments
        Mockito.verify(mSysPropsMock).set(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                ArgumentMatchers.eq("false"));
        // setDefaultFrameRateOverride is called with correct arguments
        Mockito.verify(gameManagerService).setGameDefaultFrameRateOverride(
                ArgumentMatchers.eq(DEFAULT_PACKAGE_UID), ArgumentMatchers.eq(0.0f));
        Mockito.verify(gameManagerService).setGameDefaultFrameRateOverride(
@@ -2504,18 +2493,11 @@ public class GameManagerServiceTests {
        when(mSysPropsMock.getInt(
                ArgumentMatchers.eq(PROPERTY_RO_SURFACEFLINGER_GAME_DEFAULT_FRAME_RATE),
                anyInt())).thenReturn(60);
        when(mSysPropsMock.getBoolean(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                ArgumentMatchers.eq(true))).thenReturn(true);

        gameManagerService.toggleGameDefaultFrameRate(true);

        // Verify that:
        // 1) System property is never set
        // 2) setGameDefaultFrameRateOverride() should never be called if the flag is disabled.
        Mockito.verify(mSysPropsMock, never()).set(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                anyString());
        // setGameDefaultFrameRateOverride() should never be called if the flag is disabled.
        Mockito.verify(gameManagerService, never())
                .setGameDefaultFrameRateOverride(anyInt(), anyFloat());

@@ -2529,17 +2511,10 @@ public class GameManagerServiceTests {
                somePackageId, ActivityManager.PROCESS_STATE_TOP, 0, 0);
        gameManagerService.mUidObserver.onUidStateChanged(
                somePackageId, ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 0, 0);
        when(mSysPropsMock.getBoolean(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                ArgumentMatchers.eq(true))).thenReturn(false);

        gameManagerService.toggleGameDefaultFrameRate(false);
        // Verify that:
        // 1) System property is never set
        // 2) setGameDefaultFrameRateOverride() should never be called if the flag is disabled.
        Mockito.verify(mSysPropsMock, never()).set(
                ArgumentMatchers.eq(PROPERTY_PERSISTENT_GFX_GAME_DEFAULT_FRAME_RATE_ENABLED),
                anyString());
        // setGameDefaultFrameRateOverride() should never be called if the flag is disabled.
        Mockito.verify(gameManagerService, never())
                .setGameDefaultFrameRateOverride(anyInt(), anyFloat());
    }