Merge changes If537a25e,Iee14d6ee,Iac718a6a,I0aae9bb4 into tm-qpr-dev am: 36a9b7e455

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20228877

Change-Id: I9537c8f6cfae558e43004cf2f51a84cc3a711c6f
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Xiang Wang
2022-10-27 17:56:44 +00:00
committed by Automerger Merge Worker
3 changed files with 110 additions and 13 deletions

View File

@@ -1324,7 +1324,7 @@ public final class GameManagerService extends IGameManagerService.Stub {
try { try {
final float fps = 0.0f; final float fps = 0.0f;
final int uid = mPackageManager.getPackageUidAsUser(packageName, userId); final int uid = mPackageManager.getPackageUidAsUser(packageName, userId);
nativeSetOverrideFrameRate(uid, fps); setOverrideFrameRate(uid, fps);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
return; return;
} }
@@ -1410,7 +1410,7 @@ public final class GameManagerService extends IGameManagerService.Stub {
try { try {
final float fps = modeConfig.getFps(); final float fps = modeConfig.getFps();
final int uid = mPackageManager.getPackageUidAsUser(packageName, userId); final int uid = mPackageManager.getPackageUidAsUser(packageName, userId);
nativeSetOverrideFrameRate(uid, fps); setOverrideFrameRate(uid, fps);
} catch (PackageManager.NameNotFoundException e) { } catch (PackageManager.NameNotFoundException e) {
return; return;
} }
@@ -1419,20 +1419,16 @@ public final class GameManagerService extends IGameManagerService.Stub {
private void updateInterventions(String packageName, private void updateInterventions(String packageName,
@GameMode int gameMode, @UserIdInt int userId) { @GameMode int gameMode, @UserIdInt int userId) {
final GamePackageConfiguration packageConfig = getConfig(packageName);
if (gameMode == GameManager.GAME_MODE_STANDARD if (gameMode == GameManager.GAME_MODE_STANDARD
|| gameMode == GameManager.GAME_MODE_UNSUPPORTED) { || gameMode == GameManager.GAME_MODE_UNSUPPORTED || packageConfig == null
|| packageConfig.willGamePerformOptimizations(gameMode)) {
disableCompatScale(packageName); disableCompatScale(packageName);
resetFps(packageName, userId); resetFps(packageName, userId);
return; if (packageConfig == null) {
} Slog.v(TAG, "Package configuration not found for " + packageName);
final GamePackageConfiguration packageConfig = getConfig(packageName); return;
if (packageConfig == null) { }
disableCompatScale(packageName);
Slog.v(TAG, "Package configuration not found for " + packageName);
return;
}
if (packageConfig.willGamePerformOptimizations(gameMode)) {
return;
} }
updateCompatModeDownscale(packageConfig, packageName, gameMode); updateCompatModeDownscale(packageConfig, packageName, gameMode);
updateFps(packageConfig, packageName, gameMode, userId); updateFps(packageConfig, packageName, gameMode, userId);
@@ -1876,6 +1872,11 @@ public final class GameManagerService extends IGameManagerService.Stub {
return handlerThread; return handlerThread;
} }
@VisibleForTesting
void setOverrideFrameRate(int uid, float frameRate) {
nativeSetOverrideFrameRate(uid, frameRate);
}
/** /**
* load dynamic library for frame rate overriding JNI calls * load dynamic library for frame rate overriding JNI calls
*/ */

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<game-mode-config
xmlns:android="http://schemas.android.com/apk/res/android"
android:supportsPerformanceGameMode="true"
android:supportsBatteryGameMode="true"
android:allowGameAngleDriver="true"
android:allowGameDownscaling="true"
android:allowGameFpsOverride="true"
/>

View File

@@ -68,7 +68,9 @@ import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.ArgumentMatchers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoSession; import org.mockito.MockitoSession;
import org.mockito.quality.Strictness; import org.mockito.quality.Strictness;
@@ -88,6 +90,7 @@ public class GameManagerServiceTests {
private static final String PACKAGE_NAME_INVALID = "com.android.app"; private static final String PACKAGE_NAME_INVALID = "com.android.app";
private static final int USER_ID_1 = 1001; private static final int USER_ID_1 = 1001;
private static final int USER_ID_2 = 1002; private static final int USER_ID_2 = 1002;
private static final int DEFAULT_PACKAGE_UID = 12345;
private MockitoSession mMockingSession; private MockitoSession mMockingSession;
private String mPackageName; private String mPackageName;
@@ -195,6 +198,8 @@ public class GameManagerServiceTests {
.thenReturn(packages); .thenReturn(packages);
when(mMockPackageManager.getApplicationInfoAsUser(anyString(), anyInt(), anyInt())) when(mMockPackageManager.getApplicationInfoAsUser(anyString(), anyInt(), anyInt()))
.thenReturn(applicationInfo); .thenReturn(applicationInfo);
when(mMockPackageManager.getPackageUidAsUser(mPackageName, USER_ID_1)).thenReturn(
DEFAULT_PACKAGE_UID);
LocalServices.addService(PowerManagerInternal.class, mMockPowerManager); LocalServices.addService(PowerManagerInternal.class, mMockPowerManager);
} }
@@ -375,6 +380,12 @@ public class GameManagerServiceTests {
"res/xml/game_manager_service_metadata_config_interventions_enabled_no_opt_in.xml"); "res/xml/game_manager_service_metadata_config_interventions_enabled_no_opt_in.xml");
} }
private void mockInterventionsEnabledAllOptInFromXml() throws Exception {
seedGameManagerServiceMetaDataFromFile(mPackageName, 123,
"res/xml/game_manager_service_metadata_config_interventions_enabled_all_opt_in"
+ ".xml");
}
private void mockInterventionsDisabledNoOptInFromXml() throws Exception { private void mockInterventionsDisabledNoOptInFromXml() throws Exception {
seedGameManagerServiceMetaDataFromFile(mPackageName, 123, seedGameManagerServiceMetaDataFromFile(mPackageName, 123,
"res/xml/game_manager_service_metadata_config_interventions_disabled_no_opt_in" "res/xml/game_manager_service_metadata_config_interventions_disabled_no_opt_in"
@@ -1477,4 +1488,80 @@ public class GameManagerServiceTests {
assertEquals(splitLine[6], "angle=0,scaling=0.7,fps=30"); assertEquals(splitLine[6], "angle=0,scaling=0.7,fps=30");
} }
@Test
public void testResetInterventions_onDeviceConfigReset() throws Exception {
mockModifyGameModeGranted();
String configStringBefore =
"mode=2,downscaleFactor=1.0,fps=90";
when(DeviceConfig.getProperty(anyString(), anyString()))
.thenReturn(configStringBefore);
mockInterventionsEnabledNoOptInFromXml();
GameManagerService gameManagerService = Mockito.spy(new GameManagerService(mMockContext,
mTestLooper.getLooper()));
startUser(gameManagerService, USER_ID_1);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
Mockito.verify(gameManagerService).setOverrideFrameRate(
ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
ArgumentMatchers.eq(90.0f));
checkFps(gameManagerService, GameManager.GAME_MODE_PERFORMANCE, 90);
String configStringAfter = "";
when(DeviceConfig.getProperty(anyString(), anyString()))
.thenReturn(configStringAfter);
gameManagerService.updateConfigsForUser(USER_ID_1, false, mPackageName);
Mockito.verify(gameManagerService).setOverrideFrameRate(
ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
ArgumentMatchers.eq(0.0f));
}
@Test
public void testResetInterventions_onInterventionsDisabled() throws Exception {
mockModifyGameModeGranted();
String configStringBefore =
"mode=2,downscaleFactor=1.0,fps=90";
when(DeviceConfig.getProperty(anyString(), anyString()))
.thenReturn(configStringBefore);
mockInterventionsEnabledNoOptInFromXml();
GameManagerService gameManagerService = Mockito.spy(new GameManagerService(mMockContext,
mTestLooper.getLooper()));
startUser(gameManagerService, USER_ID_1);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
Mockito.verify(gameManagerService).setOverrideFrameRate(
ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
ArgumentMatchers.eq(90.0f));
checkFps(gameManagerService, GameManager.GAME_MODE_PERFORMANCE, 90);
mockInterventionsDisabledNoOptInFromXml();
gameManagerService.updateConfigsForUser(USER_ID_1, false, mPackageName);
Mockito.verify(gameManagerService).setOverrideFrameRate(
ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
ArgumentMatchers.eq(0.0f));
checkFps(gameManagerService, GameManager.GAME_MODE_PERFORMANCE, 0);
}
@Test
public void testResetInterventions_onGameModeOptedIn() throws Exception {
mockModifyGameModeGranted();
String configStringBefore =
"mode=2,downscaleFactor=1.0,fps=90";
when(DeviceConfig.getProperty(anyString(), anyString()))
.thenReturn(configStringBefore);
mockInterventionsEnabledNoOptInFromXml();
GameManagerService gameManagerService = Mockito.spy(new GameManagerService(mMockContext,
mTestLooper.getLooper()));
startUser(gameManagerService, USER_ID_1);
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
Mockito.verify(gameManagerService).setOverrideFrameRate(
ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
ArgumentMatchers.eq(90.0f));
checkFps(gameManagerService, GameManager.GAME_MODE_PERFORMANCE, 90);
mockInterventionsEnabledAllOptInFromXml();
gameManagerService.updateConfigsForUser(USER_ID_1, false, mPackageName);
Mockito.verify(gameManagerService).setOverrideFrameRate(
ArgumentMatchers.eq(DEFAULT_PACKAGE_UID),
ArgumentMatchers.eq(0.0f));
}
} }