Don't recompute display mode during a mode switch
When an app requests a display mode change, it's plausible that the next thing to happen is going to be a configuration change. During the configuration change, multiple windows that contributed to the selection of the display mode will no longer be displayed. This can lead to a device bouncing between two display modes for a while. We need to wait for windows to redraw and for the screen to unfreeze again before we next call DisplayManagerService.setDisplayProperties. Test: atest android.display.cts.DisplayTest Bug: 158316271 Change-Id: I58e4626e74a911a14cbcd426d1f09ef68303dafa
This commit is contained in:
@@ -4185,12 +4185,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
mInsetsStateController.getImeSourceProvider().checkShowImePostLayout();
|
||||
|
||||
mLastHasContent = mTmpApplySurfaceChangesTransactionState.displayHasContent;
|
||||
mWmService.mDisplayManagerInternal.setDisplayProperties(mDisplayId,
|
||||
mLastHasContent,
|
||||
mTmpApplySurfaceChangesTransactionState.preferredRefreshRate,
|
||||
mTmpApplySurfaceChangesTransactionState.preferredModeId,
|
||||
mTmpApplySurfaceChangesTransactionState.preferMinimalPostProcessing,
|
||||
true /* inTraversal, must call performTraversalInTrans... below */);
|
||||
if (!mWmService.mDisplayFrozen) {
|
||||
mWmService.mDisplayManagerInternal.setDisplayProperties(mDisplayId,
|
||||
mLastHasContent,
|
||||
mTmpApplySurfaceChangesTransactionState.preferredRefreshRate,
|
||||
mTmpApplySurfaceChangesTransactionState.preferredModeId,
|
||||
mTmpApplySurfaceChangesTransactionState.preferMinimalPostProcessing,
|
||||
true /* inTraversal, must call performTraversalInTrans... below */);
|
||||
}
|
||||
|
||||
final boolean wallpaperVisible = mWallpaperController.isWallpaperVisible();
|
||||
if (wallpaperVisible != mLastWallpaperVisible) {
|
||||
|
||||
Reference in New Issue
Block a user