diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/DisplayContent.java | 13 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowStateAnimator.java | 20 |
2 files changed, 23 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 2941e93d12dc..22ac65df4337 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -400,6 +400,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private MagnificationSpec mMagnificationSpec; + /** Caches the value whether told display manager that we have content. */ + private boolean mLastHasContent; + private final Consumer<WindowState> mUpdateWindowsForAnimator = w -> { WindowStateAnimator winAnimator = w.mWinAnimator; final AppWindowToken atoken = w.mAppToken; @@ -2916,8 +2919,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo forAllWindows(mApplySurfaceChangesTransaction, true /* traverseTopToBottom */); prepareSurfaces(); + mLastHasContent = mTmpApplySurfaceChangesTransactionState.displayHasContent; mService.mDisplayManagerInternal.setDisplayProperties(mDisplayId, - mTmpApplySurfaceChangesTransactionState.displayHasContent, + mLastHasContent, mTmpApplySurfaceChangesTransactionState.preferredRefreshRate, mTmpApplySurfaceChangesTransactionState.preferredModeId, true /* inTraversal, must call performTraversalInTrans... below */); @@ -4052,4 +4056,11 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo private boolean canUpdateImeTarget() { return mDeferUpdateImeTargetCount == 0; } + + /** + * @return Cached value whether we told display manager that we have content. + */ + boolean getLastHasContent() { + return mLastHasContent; + } } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 08b8150fbc6f..c56c3035e127 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1185,15 +1185,17 @@ class WindowStateAnimator { if (mIsWallpaper) { w.dispatchWallpaperVisibility(true); } - // This draw means the difference between unique content and mirroring. - // Run another pass through performLayout to set mHasContent in the - // LogicalDisplay. - mAnimator.setPendingLayoutChanges(w.getDisplayId(), - FINISH_LAYOUT_REDO_ANIM); - if (DEBUG_LAYOUT_REPEATS) { - mService.mWindowPlacerLocked.debugLayoutRepeats( - "showSurfaceRobustlyLocked " + w, - mAnimator.getPendingLayoutChanges(w.getDisplayId())); + if (!w.getDisplayContent().getLastHasContent()) { + // This draw means the difference between unique content and mirroring. + // Run another pass through performLayout to set mHasContent in the + // LogicalDisplay. + mAnimator.setPendingLayoutChanges(w.getDisplayId(), + FINISH_LAYOUT_REDO_ANIM); + if (DEBUG_LAYOUT_REPEATS) { + mService.mWindowPlacerLocked.debugLayoutRepeats( + "showSurfaceRobustlyLocked " + w, + mAnimator.getPendingLayoutChanges(w.getDisplayId())); + } } } else { w.setOrientationChanging(false); |