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

Commit eff00e8c authored by Yasin Kilicdere's avatar Yasin Kilicdere Committed by Android (Google) Code Review
Browse files

Merge changes from topic "use_all_cpus_during_user_switch" into main

* changes:
  Allow using big CPU cores during a user switch.
  Add a flag to allow using all CPU cores during a user switch.
parents 5a1c921f f3e0ee9f
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -35,3 +35,10 @@ flag {
    description: "Further framework support for communal profile, beyond the basics, for later releases."
    bug: "285426179"
}

flag {
    name: "use_all_cpus_during_user_switch"
    namespace: "multiuser"
    description: "Allow using all cpu cores during a user switch."
    bug: "308105403"
}
+31 −3
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import com.android.systemui.biometrics.AuthController;
import com.android.systemui.colorextraction.SysuiColorExtractor;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.dump.DumpsysTableLogger;
import com.android.systemui.keyguard.KeyguardViewMediator;
@@ -59,6 +60,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener;
import com.android.systemui.res.R;
import com.android.systemui.scene.ui.view.WindowRootViewComponent;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.StatusBarState;
@@ -150,6 +152,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
            ConfigurationController configurationController,
            KeyguardViewMediator keyguardViewMediator,
            KeyguardBypassController keyguardBypassController,
            @Main Executor mainExecutor,
            @Background Executor backgroundExecutor,
            SysuiColorExtractor colorExtractor,
            DumpManager dumpManager,
@@ -158,7 +161,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
            AuthController authController,
            Lazy<ShadeInteractor> shadeInteractorLazy,
            ShadeWindowLogger logger,
            Lazy<SelectedUserInteractor> userInteractor) {
            Lazy<SelectedUserInteractor> userInteractor,
            UserTracker userTracker) {
        mContext = context;
        mWindowRootViewComponentFactory = windowRootViewComponentFactory;
        mWindowManager = windowManager;
@@ -184,7 +188,9 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
                .addCallback(mStateListener,
                        SysuiStatusBarStateController.RANK_STATUS_BAR_WINDOW_CONTROLLER);
        configurationController.addCallback(this);

        if (android.multiuser.Flags.useAllCpusDuringUserSwitch()) {
            userTracker.addCallback(mUserTrackerCallback, mainExecutor);
        }
        float desiredPreferredRefreshRate = context.getResources()
                .getInteger(R.integer.config_keyguardRefreshRate);
        float actualPreferredRefreshRate = -1;
@@ -572,6 +578,7 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
                state.qsExpanded,
                state.headsUpNotificationShowing,
                state.lightRevealScrimOpaque,
                state.isSwitchingUsers,
                state.forceWindowCollapsed,
                state.forceDozeBrightness,
                state.forceUserActivity,
@@ -624,7 +631,8 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
    }

    private void applyHasTopUi(NotificationShadeWindowState state) {
        mHasTopUiChanged = !state.componentsForcingTopUi.isEmpty() || isExpanded(state);
        mHasTopUiChanged = !state.componentsForcingTopUi.isEmpty() || isExpanded(state)
                || state.isSwitchingUsers;
    }

    private void applyNotTouchable(NotificationShadeWindowState state) {
@@ -954,4 +962,24 @@ public class NotificationShadeWindowControllerImpl implements NotificationShadeW
            setDreaming(isDreaming);
        }
    };

    private final UserTracker.Callback mUserTrackerCallback = new UserTracker.Callback() {
        @Override
        public void onBeforeUserSwitching(int newUser) {
            setIsSwitchingUsers(true);
        }

        @Override
        public void onUserChanged(int newUser, Context userContext) {
            setIsSwitchingUsers(false);
        }

        private void setIsSwitchingUsers(boolean isSwitchingUsers) {
            if (mCurrentState.isSwitchingUsers == isSwitchingUsers) {
                return;
            }
            mCurrentState.isSwitchingUsers = isSwitchingUsers;
            apply(mCurrentState);
        }
    };
}
+5 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ class NotificationShadeWindowState(
    @JvmField var qsExpanded: Boolean = false,
    @JvmField var headsUpNotificationShowing: Boolean = false,
    @JvmField var lightRevealScrimOpaque: Boolean = false,
    @JvmField var isSwitchingUsers: Boolean = false,
    @JvmField var forceWindowCollapsed: Boolean = false,
    @JvmField var forceDozeBrightness: Boolean = false,
    // TODO: forceUserActivity seems to be unused, delete?
@@ -78,6 +79,7 @@ class NotificationShadeWindowState(
            qsExpanded.toString(),
            headsUpNotificationShowing.toString(),
            lightRevealScrimOpaque.toString(),
            isSwitchingUsers.toString(),
            forceWindowCollapsed.toString(),
            forceDozeBrightness.toString(),
            forceUserActivity.toString(),
@@ -117,6 +119,7 @@ class NotificationShadeWindowState(
            qsExpanded: Boolean,
            headsUpShowing: Boolean,
            lightRevealScrimOpaque: Boolean,
            isSwitchingUsers: Boolean,
            forceCollapsed: Boolean,
            forceDozeBrightness: Boolean,
            forceUserActivity: Boolean,
@@ -145,6 +148,7 @@ class NotificationShadeWindowState(
                this.qsExpanded = qsExpanded
                this.headsUpNotificationShowing = headsUpShowing
                this.lightRevealScrimOpaque = lightRevealScrimOpaque
                this.isSwitchingUsers = isSwitchingUsers
                this.forceWindowCollapsed = forceCollapsed
                this.forceDozeBrightness = forceDozeBrightness
                this.forceUserActivity = forceUserActivity
@@ -191,6 +195,7 @@ class NotificationShadeWindowState(
                "qsExpanded",
                "headsUpShowing",
                "lightRevealScrimOpaque",
                "isSwitchingUsers",
                "forceCollapsed",
                "forceDozeBrightness",
                "forceUserActivity",
+4 −1
Original line number Diff line number Diff line
@@ -194,6 +194,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
    private @Captor ArgumentCaptor<KeyguardUpdateMonitorCallback>
            mKeyguardUpdateMonitorCallbackCaptor;
    private DeviceConfigProxy mDeviceConfig = new DeviceConfigProxyFake();
    private FakeExecutor mUiMainExecutor = new FakeExecutor(new FakeSystemClock());
    private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());

    private FalsingCollectorFake mFalsingCollector;
@@ -247,6 +248,7 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
                mConfigurationController,
                mViewMediator,
                mKeyguardBypassController,
                mUiMainExecutor,
                mUiBgExecutor,
                mColorExtractor,
                mDumpManager,
@@ -255,7 +257,8 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
                mAuthController,
                () -> mShadeInteractor,
                mShadeWindowLogger,
                () -> mSelectedUserInteractor);
                () -> mSelectedUserInteractor,
                mUserTracker);
        mFeatureFlags = new FakeFeatureFlags();
        mFeatureFlags.set(Flags.KEYGUARD_WM_STATE_REFACTOR, false);
        mFeatureFlags.set(Flags.REFACTOR_GETCURRENTUSER, true);
+6 −1
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@ import com.android.systemui.scene.data.repository.SceneContainerRepository;
import com.android.systemui.scene.domain.interactor.SceneInteractor;
import com.android.systemui.scene.shared.flag.FakeSceneContainerFlags;
import com.android.systemui.scene.shared.logger.SceneLogger;
import com.android.systemui.settings.UserTracker;
import com.android.systemui.shade.data.repository.FakeShadeRepository;
import com.android.systemui.shade.domain.interactor.ShadeInteractor;
import com.android.systemui.shared.system.ActivityManagerWrapper;
@@ -136,8 +137,10 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
    @Mock private ShadeExpansionStateManager mShadeExpansionStateManager;
    @Mock private ShadeWindowLogger mShadeWindowLogger;
    @Mock private SelectedUserInteractor mSelectedUserInteractor;
    @Mock private UserTracker mUserTracker;
    @Captor private ArgumentCaptor<WindowManager.LayoutParams> mLayoutParameters;
    @Captor private ArgumentCaptor<StatusBarStateController.StateListener> mStateListener;
    private final Executor mMainExecutor = MoreExecutors.directExecutor();
    private final Executor mBackgroundExecutor = MoreExecutors.directExecutor();
    private SceneTestUtils mUtils = new SceneTestUtils(this);
    private TestScope mTestScope = mUtils.getTestScope();
@@ -261,6 +264,7 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
                mConfigurationController,
                mKeyguardViewMediator,
                mKeyguardBypassController,
                mMainExecutor,
                mBackgroundExecutor,
                mColorExtractor,
                mDumpManager,
@@ -269,7 +273,8 @@ public class NotificationShadeWindowControllerImplTest extends SysuiTestCase {
                mAuthController,
                () -> mShadeInteractor,
                mShadeWindowLogger,
                () -> mSelectedUserInteractor) {
                () -> mSelectedUserInteractor,
                mUserTracker) {
                    @Override
                    protected boolean isDebuggable() {
                        return false;
Loading