diff --git a/services/core/java/com/android/server/am/KeyguardController.java b/services/core/java/com/android/server/am/KeyguardController.java index ddf936467e572..2c8a8aaa439ff 100644 --- a/services/core/java/com/android/server/am/KeyguardController.java +++ b/services/core/java/com/android/server/am/KeyguardController.java @@ -101,18 +101,23 @@ class KeyguardController { */ void keyguardGoingAway(int flags) { if (mKeyguardShowing) { - mKeyguardGoingAway = true; - mWindowManager.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, - false /* alwaysKeepCurrent */, convertTransitFlags(flags), - false /* forceOverride */); - mWindowManager.keyguardGoingAway(flags); - mService.updateSleepIfNeededLocked(); + mWindowManager.deferSurfaceLayout(); + try { + mKeyguardGoingAway = true; + mWindowManager.prepareAppTransition(TRANSIT_KEYGUARD_GOING_AWAY, + false /* alwaysKeepCurrent */, convertTransitFlags(flags), + false /* forceOverride */); + mWindowManager.keyguardGoingAway(flags); + mService.updateSleepIfNeededLocked(); - // Some stack visibility might change (e.g. docked stack) - mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); - mWindowManager.executeAppTransition(); - mService.applyVrModeIfNeededLocked(mStackSupervisor.getResumedActivityLocked(), - true /* enable */); + // Some stack visibility might change (e.g. docked stack) + mStackSupervisor.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); + mWindowManager.executeAppTransition(); + mService.applyVrModeIfNeededLocked(mStackSupervisor.getResumedActivityLocked(), + true /* enable */); + } finally { + mWindowManager.continueSurfaceLayout(); + } } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index d0ecf0929c3a0..534a3d2885ce1 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2713,13 +2713,7 @@ class WindowState extends WindowContainer implements WindowManagerP return false; } - Task task = getTask(); - if (task == null || task.inHomeStack()) { - // Don't save surfaces for home stack apps. These usually resume and draw - // first frame very fast. Saving surfaces are mostly a waste of memory. - return false; - } - + final Task task = getTask(); final AppWindowToken taskTop = task.getTopVisibleAppToken(); if (taskTop != null && taskTop != mAppToken) { // Don't save if the window is not the topmost window.