summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/UserController.java23
1 files changed, 22 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index 55ac4cf37283..34ba7f0debb0 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -97,6 +97,7 @@ import android.os.IProgressListener;
import android.os.IRemoteCallback;
import android.os.IUserManager;
import android.os.Message;
+import android.os.PowerManagerInternal;
import android.os.PowerWhitelistManager;
import android.os.Process;
import android.os.RemoteCallbackList;
@@ -1934,9 +1935,12 @@ class UserController implements Handler.Callback {
}
/**
- * Start user, if its not already running, and bring it to foreground.
+ * Start user, if it's not already running, and bring it to foreground.
*/
void startUserInForeground(@UserIdInt int targetUserId) {
+ if (android.multiuser.Flags.setPowerModeDuringUserSwitch()) {
+ mInjector.setPerformancePowerMode(true);
+ }
boolean success = startUser(targetUserId, USER_START_MODE_FOREGROUND);
if (!success) {
mInjector.getWindowManager().setSwitchingUser(false);
@@ -2146,6 +2150,9 @@ class UserController implements Handler.Callback {
}
private void endUserSwitch() {
+ if (android.multiuser.Flags.setPowerModeDuringUserSwitch()) {
+ mInjector.setPerformancePowerMode(false);
+ }
final int nextUserId;
synchronized (mLock) {
nextUserId = ObjectUtils.getOrElse(mPendingTargetUserIds.poll(), UserHandle.USER_NULL);
@@ -3535,6 +3542,7 @@ class UserController implements Handler.Callback {
private final ActivityManagerService mService;
private UserManagerService mUserManager;
private UserManagerInternal mUserManagerInternal;
+ private PowerManagerInternal mPowerManagerInternal;
private Handler mHandler;
private final Object mUserSwitchingDialogLock = new Object();
@GuardedBy("mUserSwitchingDialogLock")
@@ -3636,6 +3644,13 @@ class UserController implements Handler.Callback {
return mUserManagerInternal;
}
+ PowerManagerInternal getPowerManagerInternal() {
+ if (mPowerManagerInternal == null) {
+ mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
+ }
+ return mPowerManagerInternal;
+ }
+
KeyguardManager getKeyguardManager() {
return mService.mContext.getSystemService(KeyguardManager.class);
}
@@ -3829,6 +3844,12 @@ class UserController implements Handler.Callback {
getSystemServiceManager().onUserStarting(TimingsTraceAndSlog.newAsyncLog(), userId);
}
+ void setPerformancePowerMode(boolean enabled) {
+ Slogf.i(TAG, "Setting power mode MODE_FIXED_PERFORMANCE to " + enabled);
+ getPowerManagerInternal().setPowerMode(
+ PowerManagerInternal.MODE_FIXED_PERFORMANCE, enabled);
+ }
+
void onSystemUserVisibilityChanged(boolean visible) {
getUserManagerInternal().onSystemUserVisibilityChanged(visible);
}