Loading services/core/java/com/android/server/app/GameManagerService.java +25 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static com.android.internal.R.styleable.GameModeConfig_allowGameFpsOverri import static com.android.internal.R.styleable.GameModeConfig_supportsBatteryGameMode; import static com.android.internal.R.styleable.GameModeConfig_supportsPerformanceGameMode; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.server.wm.CompatScaleProvider.COMPAT_SCALE_MODE_GAME; import android.Manifest; import android.annotation.EnforcePermission; Loading Loading @@ -56,6 +57,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.CompatibilityInfo.CompatScale; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; Loading @@ -76,6 +78,7 @@ import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.provider.DeviceConfig.Properties; Loading @@ -97,6 +100,8 @@ import com.android.server.LocalServices; import com.android.server.ServiceThread; import com.android.server.SystemService; import com.android.server.SystemService.TargetUser; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.CompatScaleProvider; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -927,12 +932,24 @@ public final class GameManagerService extends IGameManagerService.Stub { } } private final class LocalService extends GameManagerInternal { private final class LocalService extends GameManagerInternal implements CompatScaleProvider { @Override public float getResolutionScalingFactor(String packageName, int userId) { final int gameMode = getGameModeFromSettingsUnchecked(packageName, userId); return getResolutionScalingFactorInternal(packageName, gameMode, userId); } @Nullable @Override public CompatScale getCompatScale(@NonNull String packageName, int uid) { UserHandle userHandle = UserHandle.getUserHandleForUid(uid); int userId = userHandle.getIdentifier(); float scalingFactor = getResolutionScalingFactor(packageName, userId); if (scalingFactor > 0) { return new CompatScale(1f / scalingFactor); } return null; } } /** Loading Loading @@ -2080,7 +2097,13 @@ public final class GameManagerService extends IGameManagerService.Stub { } private void publishLocalService() { LocalServices.addService(GameManagerInternal.class, new LocalService()); LocalService localService = new LocalService(); ActivityTaskManagerInternal atmi = LocalServices.getService(ActivityTaskManagerInternal.class); atmi.registerCompatScaleProvider(COMPAT_SCALE_MODE_GAME, localService); LocalServices.addService(GameManagerInternal.class, localService); } private void registerStatsCallbacks() { Loading services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +13 −0 Original line number Diff line number Diff line Loading @@ -796,4 +796,17 @@ public abstract class ActivityTaskManagerInternal { * @param token The activity token. */ public abstract int getDisplayId(IBinder token); /** * Register a {@link CompatScaleProvider}. */ public abstract void registerCompatScaleProvider( @CompatScaleProvider.CompatScaleModeOrderId int id, @NonNull CompatScaleProvider provider); /** * Unregister a {@link CompatScaleProvider}. */ public abstract void unregisterCompatScaleProvider( @CompatScaleProvider.CompatScaleModeOrderId int id); } services/core/java/com/android/server/wm/ActivityTaskManagerService.java +12 −0 Original line number Diff line number Diff line Loading @@ -7277,6 +7277,18 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { public void unregisterTaskStackListener(ITaskStackListener listener) { ActivityTaskManagerService.this.unregisterTaskStackListener(listener); } @Override public void registerCompatScaleProvider(@CompatScaleProvider.CompatScaleModeOrderId int id, @NonNull CompatScaleProvider provider) { ActivityTaskManagerService.this.registerCompatScaleProvider(id, provider); } @Override public void unregisterCompatScaleProvider( @CompatScaleProvider.CompatScaleModeOrderId int id) { ActivityTaskManagerService.this.unregisterCompatScaleProvider(id); } } static boolean isPip2ExperimentEnabled() { Loading services/core/java/com/android/server/wm/CompatModePackages.java +0 −14 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static com.android.server.wm.CompatScaleProvider.COMPAT_SCALE_MODE_SYSTEM import android.annotation.NonNull; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.GameManagerInternal; import android.app.compat.CompatChanges; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; Loading @@ -52,7 +51,6 @@ import android.util.Xml; import com.android.internal.protolog.common.ProtoLog; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; import com.android.server.LocalServices; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -345,7 +343,6 @@ public final class CompatModePackages { } private final ActivityTaskManagerService mService; private GameManagerInternal mGameManager; private final AtomicFile mFile; private final HashMap<String, Integer> mPackages = new HashMap<>(); private final SparseBooleanArray mLegacyScreenCompatPackages = new SparseBooleanArray(); Loading Loading @@ -517,17 +514,6 @@ public final class CompatModePackages { } } final UserHandle userHandle = UserHandle.getUserHandleForUid(uid); if (mGameManager == null) { mGameManager = LocalServices.getService(GameManagerInternal.class); } if (mGameManager != null) { final int userId = userHandle.getIdentifier(); final float scalingFactor = mGameManager.getResolutionScalingFactor(packageName, userId); if (scalingFactor > 0) { return 1f / scalingFactor; } } final boolean isDownscaledEnabled = CompatChanges.isChangeEnabled( DOWNSCALED, packageName, userHandle); Loading services/tests/wmtests/src/com/android/server/wm/CompatModePackagesTests.java +15 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.server.wm.CompatScaleProvider.COMPAT_SCALE_MODE_GAME; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; Loading @@ -27,6 +28,8 @@ import static org.mockito.ArgumentMatchers.anyString; import android.app.GameManagerInternal; import android.content.pm.ApplicationInfo; import android.content.res.CompatibilityInfo.CompatScale; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; Loading Loading @@ -55,6 +58,17 @@ public class CompatModePackagesTests extends SystemServiceTestsBase { public void setUp() { mAtm = mSystemServicesTestRule.getActivityTaskManagerService(); mGm = mock(GameManagerInternal.class); mAtm.registerCompatScaleProvider(COMPAT_SCALE_MODE_GAME, new CompatScaleProvider() { @Override public CompatScale getCompatScale(String packageName, int uid) { int userId = UserHandle.getUserHandleForUid(uid).getIdentifier(); float scalingFactor = mGm.getResolutionScalingFactor(packageName, userId); if (scalingFactor > 0) { return new CompatScale(1f / scalingFactor); } return null; } }); } @After Loading @@ -67,7 +81,7 @@ public class CompatModePackagesTests extends SystemServiceTestsBase { LocalServices.addService(GameManagerInternal.class, mGm); float scale = 0.25f; doReturn(scale).when(mGm).getResolutionScalingFactor(anyString(), anyInt()); assertEquals(mAtm.mCompatModePackages.getCompatScale(TEST_PACKAGE, TEST_USER_ID), 1 / scale, assertEquals(1 / scale, mAtm.mCompatModePackages.getCompatScale(TEST_PACKAGE, TEST_USER_ID), 0.01f); } Loading Loading
services/core/java/com/android/server/app/GameManagerService.java +25 −2 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import static com.android.internal.R.styleable.GameModeConfig_allowGameFpsOverri import static com.android.internal.R.styleable.GameModeConfig_supportsBatteryGameMode; import static com.android.internal.R.styleable.GameModeConfig_supportsPerformanceGameMode; import static com.android.internal.util.ConcurrentUtils.DIRECT_EXECUTOR; import static com.android.server.wm.CompatScaleProvider.COMPAT_SCALE_MODE_GAME; import android.Manifest; import android.annotation.EnforcePermission; Loading Loading @@ -56,6 +57,7 @@ import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.UserInfo; import android.content.res.CompatibilityInfo.CompatScale; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; Loading @@ -76,6 +78,7 @@ import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ShellCallback; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.provider.DeviceConfig; import android.provider.DeviceConfig.Properties; Loading @@ -97,6 +100,8 @@ import com.android.server.LocalServices; import com.android.server.ServiceThread; import com.android.server.SystemService; import com.android.server.SystemService.TargetUser; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.CompatScaleProvider; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -927,12 +932,24 @@ public final class GameManagerService extends IGameManagerService.Stub { } } private final class LocalService extends GameManagerInternal { private final class LocalService extends GameManagerInternal implements CompatScaleProvider { @Override public float getResolutionScalingFactor(String packageName, int userId) { final int gameMode = getGameModeFromSettingsUnchecked(packageName, userId); return getResolutionScalingFactorInternal(packageName, gameMode, userId); } @Nullable @Override public CompatScale getCompatScale(@NonNull String packageName, int uid) { UserHandle userHandle = UserHandle.getUserHandleForUid(uid); int userId = userHandle.getIdentifier(); float scalingFactor = getResolutionScalingFactor(packageName, userId); if (scalingFactor > 0) { return new CompatScale(1f / scalingFactor); } return null; } } /** Loading Loading @@ -2080,7 +2097,13 @@ public final class GameManagerService extends IGameManagerService.Stub { } private void publishLocalService() { LocalServices.addService(GameManagerInternal.class, new LocalService()); LocalService localService = new LocalService(); ActivityTaskManagerInternal atmi = LocalServices.getService(ActivityTaskManagerInternal.class); atmi.registerCompatScaleProvider(COMPAT_SCALE_MODE_GAME, localService); LocalServices.addService(GameManagerInternal.class, localService); } private void registerStatsCallbacks() { Loading
services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +13 −0 Original line number Diff line number Diff line Loading @@ -796,4 +796,17 @@ public abstract class ActivityTaskManagerInternal { * @param token The activity token. */ public abstract int getDisplayId(IBinder token); /** * Register a {@link CompatScaleProvider}. */ public abstract void registerCompatScaleProvider( @CompatScaleProvider.CompatScaleModeOrderId int id, @NonNull CompatScaleProvider provider); /** * Unregister a {@link CompatScaleProvider}. */ public abstract void unregisterCompatScaleProvider( @CompatScaleProvider.CompatScaleModeOrderId int id); }
services/core/java/com/android/server/wm/ActivityTaskManagerService.java +12 −0 Original line number Diff line number Diff line Loading @@ -7277,6 +7277,18 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { public void unregisterTaskStackListener(ITaskStackListener listener) { ActivityTaskManagerService.this.unregisterTaskStackListener(listener); } @Override public void registerCompatScaleProvider(@CompatScaleProvider.CompatScaleModeOrderId int id, @NonNull CompatScaleProvider provider) { ActivityTaskManagerService.this.registerCompatScaleProvider(id, provider); } @Override public void unregisterCompatScaleProvider( @CompatScaleProvider.CompatScaleModeOrderId int id) { ActivityTaskManagerService.this.unregisterCompatScaleProvider(id); } } static boolean isPip2ExperimentEnabled() { Loading
services/core/java/com/android/server/wm/CompatModePackages.java +0 −14 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import static com.android.server.wm.CompatScaleProvider.COMPAT_SCALE_MODE_SYSTEM import android.annotation.NonNull; import android.app.ActivityManager; import android.app.AppGlobals; import android.app.GameManagerInternal; import android.app.compat.CompatChanges; import android.compat.annotation.ChangeId; import android.compat.annotation.Disabled; Loading @@ -52,7 +51,6 @@ import android.util.Xml; import com.android.internal.protolog.common.ProtoLog; import com.android.modules.utils.TypedXmlPullParser; import com.android.modules.utils.TypedXmlSerializer; import com.android.server.LocalServices; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; Loading Loading @@ -345,7 +343,6 @@ public final class CompatModePackages { } private final ActivityTaskManagerService mService; private GameManagerInternal mGameManager; private final AtomicFile mFile; private final HashMap<String, Integer> mPackages = new HashMap<>(); private final SparseBooleanArray mLegacyScreenCompatPackages = new SparseBooleanArray(); Loading Loading @@ -517,17 +514,6 @@ public final class CompatModePackages { } } final UserHandle userHandle = UserHandle.getUserHandleForUid(uid); if (mGameManager == null) { mGameManager = LocalServices.getService(GameManagerInternal.class); } if (mGameManager != null) { final int userId = userHandle.getIdentifier(); final float scalingFactor = mGameManager.getResolutionScalingFactor(packageName, userId); if (scalingFactor > 0) { return 1f / scalingFactor; } } final boolean isDownscaledEnabled = CompatChanges.isChangeEnabled( DOWNSCALED, packageName, userHandle); Loading
services/tests/wmtests/src/com/android/server/wm/CompatModePackagesTests.java +15 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.wm; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock; import static com.android.server.wm.CompatScaleProvider.COMPAT_SCALE_MODE_GAME; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; Loading @@ -27,6 +28,8 @@ import static org.mockito.ArgumentMatchers.anyString; import android.app.GameManagerInternal; import android.content.pm.ApplicationInfo; import android.content.res.CompatibilityInfo.CompatScale; import android.os.UserHandle; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; Loading Loading @@ -55,6 +58,17 @@ public class CompatModePackagesTests extends SystemServiceTestsBase { public void setUp() { mAtm = mSystemServicesTestRule.getActivityTaskManagerService(); mGm = mock(GameManagerInternal.class); mAtm.registerCompatScaleProvider(COMPAT_SCALE_MODE_GAME, new CompatScaleProvider() { @Override public CompatScale getCompatScale(String packageName, int uid) { int userId = UserHandle.getUserHandleForUid(uid).getIdentifier(); float scalingFactor = mGm.getResolutionScalingFactor(packageName, userId); if (scalingFactor > 0) { return new CompatScale(1f / scalingFactor); } return null; } }); } @After Loading @@ -67,7 +81,7 @@ public class CompatModePackagesTests extends SystemServiceTestsBase { LocalServices.addService(GameManagerInternal.class, mGm); float scale = 0.25f; doReturn(scale).when(mGm).getResolutionScalingFactor(anyString(), anyInt()); assertEquals(mAtm.mCompatModePackages.getCompatScale(TEST_PACKAGE, TEST_USER_ID), 1 / scale, assertEquals(1 / scale, mAtm.mCompatModePackages.getCompatScale(TEST_PACKAGE, TEST_USER_ID), 0.01f); } Loading