From cbbcc0f79582b0157c03325074166da53e617c73 Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Tue, 17 May 2016 20:46:58 -0700 Subject: [PATCH] Request a traversal when a saved surface gets redrawn When a saved surface gets redrawn, we need to return true in finishDrawingLocked, so that a traversal is requested. This is needed to update allDrawn/allDrawnExcludingSaved. Some delayed window removal may be waiting for these flags. bug: 28797800 Change-Id: I0b58b356e9c580422eb3ff81e8afb2a164cf6e43 --- services/core/java/com/android/server/wm/WindowState.java | 4 +++- .../java/com/android/server/wm/WindowStateAnimator.java | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index c3f2367b53b7c..25709548254f5 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -2115,14 +2115,16 @@ final class WindowState implements WindowManagerPolicy.WindowState { mWasVisibleBeforeClientHidden = false; } - void clearAnimatingWithSavedSurface() { + boolean clearAnimatingWithSavedSurface() { if (mAnimatingWithSavedSurface) { // App has drawn something to its windows, we're no longer animating with // the saved surfaces. if (DEBUG_ANIM) Slog.d(TAG, "clearAnimatingWithSavedSurface(): win=" + this); mAnimatingWithSavedSurface = false; + return true; } + return false; } @Override diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 52273dced231c..aa55f2751f4ac 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -585,7 +585,7 @@ class WindowStateAnimator { + drawStateToString()); } - mWin.clearAnimatingWithSavedSurface(); + boolean layoutNeeded = mWin.clearAnimatingWithSavedSurface(); if (mDrawState == DRAW_PENDING) { if (DEBUG_SURFACE_TRACE || DEBUG_ANIM || SHOW_TRANSACTIONS || DEBUG_ORIENTATION) @@ -595,10 +595,10 @@ class WindowStateAnimator { Slog.v(TAG, "Draw state now committed in " + mWin); } mDrawState = COMMIT_DRAW_PENDING; - return true; + layoutNeeded = true; } - return false; + return layoutNeeded; } // This must be called while inside a transaction.