From ab7ad3898c91dfc2afe6e776917f96dc8a096a44 Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Wed, 26 Oct 2016 18:22:04 -0700 Subject: [PATCH] The big keyguard transition refactor (5/n) Also save surface for the home task, so unlocking to the homescreen is as fast as before. Note that originally it was not possible to save surface for home task because of artifacts when clicking the home button. However, we added logic since then to disallow save surface if it's a different intent, which is the case when pressing the home button. Also consolidate some relayout for less overhead. Bug: 32057734 Change-Id: I53ede527cb1ff438001d4023ee3740283ee302ee --- .../android/server/am/KeyguardController.java | 27 +++++++++++-------- .../com/android/server/wm/WindowState.java | 8 +----- 2 files changed, 17 insertions(+), 18 deletions(-) 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.