Lock free app animations (7/n): Cleanup
- Make sure persister pausing is working
- Make sure Surface animation thread is being boosted
- Move all remaining fields from AppWindowAnimator and NUKE it,
also remove getAnimLayerAdjustment and do the z-boosting
directly on the AppWindowToken.
Bug: 64674361
Test: go/wm-smoke
Test: Inspect thread priorities before/during/after animations
Change-Id: Ie64c8231bcebd8536eab476ee9f2c51abf85480c
diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java
deleted file mode 100644
index 4f38f73..0000000
--- a/services/core/java/com/android/server/wm/AppWindowAnimator.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.server.wm;
-
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
-import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
-
-import android.view.SurfaceControl;
-import android.view.animation.Animation;
-import android.view.animation.Transformation;
-
-// TODO: Move all remaining fields to AppWindowToken and remove this class.
-public class AppWindowAnimator {
-
- // Have we been asked to have this token keep the screen frozen?
- // Protect with mAnimator.
- boolean freezingScreen;
-
- /**
- * How long we last kept the screen frozen.
- */
- int lastFreezeDuration;
-
- // Offset to the window of all layers in the token, for use by
- // AppWindowToken animations.
- int animLayerAdjustment;
-
- // Propagated from AppWindowToken.allDrawn, to determine when
- // the state changes.
- boolean allDrawn;
-}
diff --git a/services/core/java/com/android/server/wm/AppWindowContainerController.java b/services/core/java/com/android/server/wm/AppWindowContainerController.java
index 73732dd..ae9f28b 100644
--- a/services/core/java/com/android/server/wm/AppWindowContainerController.java
+++ b/services/core/java/com/android/server/wm/AppWindowContainerController.java
@@ -690,7 +690,7 @@
return;
}
if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Clear freezing of " + mToken + ": hidden="
- + mContainer.isHidden() + " freezing=" + mContainer.mAppAnimator.freezingScreen);
+ + mContainer.isHidden() + " freezing=" + mContainer.isFreezingScreen());
mContainer.stopFreezingScreen(true, force);
}
}
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 0ce37bb..04a1beb 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -62,7 +62,6 @@
import android.os.Debug;
import android.os.IBinder;
import android.os.RemoteException;
-import android.os.SystemClock;
import android.os.Trace;
import android.util.Slog;
import android.util.proto.ProtoOutputStream;
@@ -96,8 +95,6 @@
// Non-null only for application tokens.
final IApplicationToken appToken;
- @NonNull final AppWindowAnimator mAppAnimator;
-
final boolean mVoiceInteraction;
/** @see WindowContainer#fillsParent() */
@@ -125,6 +122,8 @@
private int mNumDrawnWindows;
boolean inPendingTransaction;
boolean allDrawn;
+ private boolean mLastAllDrawn;
+
// Set to true when this app creates a surface while in the middle of an animation. In that
// case do not clear allDrawn until the animation completes.
boolean deferClearAllDrawn;
@@ -211,6 +210,12 @@
private AppWindowThumbnail mThumbnail;
+ /** Have we been asked to have this token keep the screen frozen? */
+ private boolean mFreezingScreen;
+
+ /** Whether this token should be boosted at the top of all app window tokens. */
+ private boolean mNeedsZBoost;
+
AppWindowToken(WindowManagerService service, IApplicationToken token, boolean voiceInteraction,
DisplayContent dc, long inputDispatchingTimeoutNanos, boolean fullscreen,
boolean showForAllUsers, int targetSdk, int orientation, int rotationAnimationHint,
@@ -240,7 +245,6 @@
mVoiceInteraction = voiceInteraction;
mFillsParent = fillsParent;
mInputApplicationHandle = new InputApplicationHandle(this);
- mAppAnimator = new AppWindowAnimator();
}
void onFirstWindowDrawn(WindowState win, WindowStateAnimator winAnimator) {
@@ -1018,13 +1022,12 @@
void startFreezingScreen() {
if (DEBUG_ORIENTATION) logWithStack(TAG, "Set freezing of " + appToken + ": hidden="
- + isHidden() + " freezing=" + mAppAnimator.freezingScreen + " hiddenRequested="
+ + isHidden() + " freezing=" + mFreezingScreen + " hiddenRequested="
+ hiddenRequested);
if (!hiddenRequested) {
- if (!mAppAnimator.freezingScreen) {
- mAppAnimator.freezingScreen = true;
+ if (!mFreezingScreen) {
+ mFreezingScreen = true;
mService.registerAppFreezeListener(this);
- mAppAnimator.lastFreezeDuration = 0;
mService.mAppsFreezingScreen++;
if (mService.mAppsFreezingScreen == 1) {
mService.startFreezingDisplayLocked(false, 0, 0, getDisplayContent());
@@ -1041,7 +1044,7 @@
}
void stopFreezingScreen(boolean unfreezeSurfaceNow, boolean force) {
- if (!mAppAnimator.freezingScreen) {
+ if (!mFreezingScreen) {
return;
}
if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "Clear freezing of " + this + " force=" + force);
@@ -1053,10 +1056,8 @@
}
if (force || unfrozeWindows) {
if (DEBUG_ORIENTATION) Slog.v(TAG_WM, "No longer freezing: " + this);
- mAppAnimator.freezingScreen = false;
+ mFreezingScreen = false;
mService.unregisterAppFreezeListener(this);
- mAppAnimator.lastFreezeDuration =
- (int)(SystemClock.elapsedRealtime() - mService.mDisplayFreezeTime);
mService.mAppsFreezingScreen--;
mService.mLastFinishedFreezeSource = this;
}
@@ -1203,17 +1204,17 @@
@Override
void checkAppWindowsReadyToShow() {
- if (allDrawn == mAppAnimator.allDrawn) {
+ if (allDrawn == mLastAllDrawn) {
return;
}
- mAppAnimator.allDrawn = allDrawn;
+ mLastAllDrawn = allDrawn;
if (!allDrawn) {
return;
}
// The token has now changed state to having all windows shown... what to do, what to do?
- if (mAppAnimator.freezingScreen) {
+ if (mFreezingScreen) {
showAllWindowsLocked();
stopFreezingScreen(false, true);
if (DEBUG_ORIENTATION) Slog.i(TAG,
@@ -1297,10 +1298,10 @@
if (DEBUG_STARTING_WINDOW_VERBOSE && w == startingWindow) {
Slog.d(TAG, "updateWindows: starting " + w + " isOnScreen=" + w.isOnScreen()
- + " allDrawn=" + allDrawn + " freezingScreen=" + mAppAnimator.freezingScreen);
+ + " allDrawn=" + allDrawn + " freezingScreen=" + mFreezingScreen);
}
- if (allDrawn && !mAppAnimator.freezingScreen) {
+ if (allDrawn && !mFreezingScreen) {
return false;
}
@@ -1335,7 +1336,7 @@
if (DEBUG_VISIBILITY || DEBUG_ORIENTATION) Slog.v(TAG, "tokenMayBeDrawn: "
+ this + " w=" + w + " numInteresting=" + mNumInterestingWindows
- + " freezingScreen=" + mAppAnimator.freezingScreen
+ + " freezingScreen=" + mFreezingScreen
+ " mAppFreezing=" + w.mAppFreezing);
isInterestingAndDrawn = true;
@@ -1502,11 +1503,6 @@
true /* topToBottom */);
}
- @Override
- int getAnimLayerAdjustment() {
- return mAppAnimator.animLayerAdjustment;
- }
-
boolean applyAnimationLocked(WindowManager.LayoutParams lp, int transit, boolean enter,
boolean isVoiceInteraction) {
@@ -1531,7 +1527,7 @@
mService.mSurfaceAnimationRunner);
startAnimation(getPendingTransaction(), adapter, !isVisible());
if (a.getZAdjustment() == Animation.ZORDER_TOP) {
- mAppAnimator.animLayerAdjustment = 1;
+ mNeedsZBoost = true;
getDisplayContent().assignWindowLayers(false /* setLayoutNeeded */);
}
mTransit = transit;
@@ -1618,7 +1614,7 @@
mTransit = TRANSIT_UNSET;
mTransitFlags = 0;
- mAppAnimator.animLayerAdjustment = 0;
+ mNeedsZBoost = false;
setAppLayoutChanges(FINISH_LAYOUT_REDO_ANIM | FINISH_LAYOUT_REDO_WALLPAPER,
"AppWindowToken");
@@ -1742,13 +1738,13 @@
pw.print(prefix); pw.print("mAppStopped="); pw.println(mAppStopped);
}
if (mNumInterestingWindows != 0 || mNumDrawnWindows != 0
- || allDrawn || mAppAnimator.allDrawn) {
+ || allDrawn || mLastAllDrawn) {
pw.print(prefix); pw.print("mNumInterestingWindows=");
pw.print(mNumInterestingWindows);
pw.print(" mNumDrawnWindows="); pw.print(mNumDrawnWindows);
pw.print(" inPendingTransaction="); pw.print(inPendingTransaction);
pw.print(" allDrawn="); pw.print(allDrawn);
- pw.print(" (animator="); pw.print(mAppAnimator.allDrawn);
+ pw.print(" lastAllDrawn="); pw.print(mLastAllDrawn);
pw.println(")");
}
if (inPendingTransaction) {
@@ -1809,6 +1805,15 @@
super.prepareSurfaces();
}
+ boolean isFreezingScreen() {
+ return mFreezingScreen;
+ }
+
+ @Override
+ boolean needsZBoost() {
+ return mNeedsZBoost || super.needsZBoost();
+ }
+
@CallSuper
@Override
public void writeToProto(ProtoOutputStream proto, long fieldId, boolean trim) {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 056ece3..a4ef750 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -351,7 +351,6 @@
private boolean mDisplayReady = false;
WallpaperController mWallpaperController;
- int mInputMethodAnimLayerAdjustment;
private final SurfaceSession mSession = new SurfaceSession();
@@ -2048,12 +2047,6 @@
mPinnedStackControllerLocked.setAdjustedForIme(imeVisible, imeHeight);
}
- void setInputMethodAnimLayerAdjustment(int adj) {
- if (DEBUG_LAYERS) Slog.v(TAG_WM, "Setting im layer adj to " + adj);
- mInputMethodAnimLayerAdjustment = adj;
- assignWindowLayers(false /* relayoutNeeded */);
- }
-
/**
* If a window that has an animation specifying a colored background and the current wallpaper
* is visible, then the color goes *below* the wallpaper so we don't cause the wallpaper to
@@ -2233,11 +2226,6 @@
pw.println();
mPinnedStackControllerLocked.dump(prefix, pw);
- if (mInputMethodAnimLayerAdjustment != 0) {
- pw.println(subPrefix
- + "mInputMethodAnimLayerAdjustment=" + mInputMethodAnimLayerAdjustment);
- }
-
pw.println();
mDisplayFrames.dump(prefix, pw);
}
@@ -2397,7 +2385,7 @@
if (updateImeTarget) {
if (DEBUG_INPUT_METHOD) Slog.w(TAG_WM, "Moving IM target from "
+ mService.mInputMethodTarget + " to null since mInputMethodWindow is null");
- setInputMethodTarget(null, mService.mInputMethodTargetWaitingAnim, 0);
+ setInputMethodTarget(null, mService.mInputMethodTargetWaitingAnim);
}
return null;
}
@@ -2446,7 +2434,7 @@
if (DEBUG_INPUT_METHOD) Slog.w(TAG_WM, "Moving IM target from " + curTarget
+ " to null." + (SHOW_STACK_CRAWLS ? " Callers="
+ Debug.getCallers(4) : ""));
- setInputMethodTarget(null, mService.mInputMethodTargetWaitingAnim, 0);
+ setInputMethodTarget(null, mService.mInputMethodTargetWaitingAnim);
}
return null;
@@ -2474,14 +2462,14 @@
if (appTransition.isTransitionSet()) {
// If we are currently setting up for an animation, hold everything until we
// can find out what will happen.
- setInputMethodTarget(highestTarget, true, mInputMethodAnimLayerAdjustment);
+ setInputMethodTarget(highestTarget, true);
return highestTarget;
} else if (highestTarget.mWinAnimator.isAnimationSet() &&
highestTarget.mWinAnimator.mAnimLayer > target.mWinAnimator.mAnimLayer) {
// If the window we are currently targeting is involved with an animation,
// and it is on top of the next target we will be over, then hold off on
// moving until that is done.
- setInputMethodTarget(highestTarget, true, mInputMethodAnimLayerAdjustment);
+ setInputMethodTarget(highestTarget, true);
return highestTarget;
}
}
@@ -2489,23 +2477,20 @@
if (DEBUG_INPUT_METHOD) Slog.w(TAG_WM, "Moving IM target from " + curTarget + " to "
+ target + (SHOW_STACK_CRAWLS ? " Callers=" + Debug.getCallers(4) : ""));
- setInputMethodTarget(target, false, target.mAppToken != null
- ? target.mAppToken.getAnimLayerAdjustment() : 0);
+ setInputMethodTarget(target, false);
}
return target;
}
- private void setInputMethodTarget(WindowState target, boolean targetWaitingAnim, int layerAdj) {
+ private void setInputMethodTarget(WindowState target, boolean targetWaitingAnim) {
if (target == mService.mInputMethodTarget
- && mService.mInputMethodTargetWaitingAnim == targetWaitingAnim
- && mInputMethodAnimLayerAdjustment == layerAdj) {
+ && mService.mInputMethodTargetWaitingAnim == targetWaitingAnim) {
return;
}
mService.mInputMethodTarget = target;
mService.mInputMethodTargetWaitingAnim = targetWaitingAnim;
- setInputMethodAnimLayerAdjustment(layerAdj);
assignWindowLayers(false /* setLayoutNeeded */);
}
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index 8a53a2b..ac0919d 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -64,8 +64,6 @@
// to another, and this is the previous wallpaper target.
private WindowState mPrevWallpaperTarget = null;
- private int mWallpaperAnimLayerAdjustment;
-
private float mLastWallpaperX = -1;
private float mLastWallpaperY = -1;
private float mLastWallpaperXStep = -1;
@@ -442,10 +440,6 @@
}
}
- int getAnimLayerAdjustment() {
- return mWallpaperAnimLayerAdjustment;
- }
-
private void findWallpaperTarget(DisplayContent dc) {
mFindResults.reset();
if (dc.isStackVisible(WINDOWING_MODE_FREEFORM)) {
@@ -547,7 +541,7 @@
private void updateWallpaperTokens(boolean visible) {
for (int curTokenNdx = mWallpaperTokens.size() - 1; curTokenNdx >= 0; curTokenNdx--) {
final WallpaperWindowToken token = mWallpaperTokens.get(curTokenNdx);
- token.updateWallpaperWindows(visible, mWallpaperAnimLayerAdjustment);
+ token.updateWallpaperWindows(visible);
token.getDisplayContent().assignWindowLayers(false);
}
}
@@ -566,12 +560,6 @@
if (DEBUG_WALLPAPER) Slog.v(TAG, "Wallpaper visibility: " + visible);
if (visible) {
- // If the wallpaper target is animating, we may need to copy its layer adjustment.
- // Only do this if we are not transferring between two wallpaper targets.
- mWallpaperAnimLayerAdjustment =
- (mPrevWallpaperTarget == null && mWallpaperTarget.mAppToken != null)
- ? mWallpaperTarget.mAppToken.getAnimLayerAdjustment() : 0;
-
if (mWallpaperTarget.mWallpaperX >= 0) {
mLastWallpaperX = mWallpaperTarget.mWallpaperX;
mLastWallpaperXStep = mWallpaperTarget.mWallpaperXStep;
@@ -682,10 +670,6 @@
pw.print("mLastWallpaperDisplayOffsetX="); pw.print(mLastWallpaperDisplayOffsetX);
pw.print(" mLastWallpaperDisplayOffsetY="); pw.println(mLastWallpaperDisplayOffsetY);
}
-
- if (mWallpaperAnimLayerAdjustment != 0) {
- pw.println(prefix + "mWallpaperAnimLayerAdjustment=" + mWallpaperAnimLayerAdjustment);
- }
}
/** Helper class for storing the results of a wallpaper target find operation. */
diff --git a/services/core/java/com/android/server/wm/WallpaperWindowToken.java b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
index c6b3bd3..2ae5c7b 100644
--- a/services/core/java/com/android/server/wm/WallpaperWindowToken.java
+++ b/services/core/java/com/android/server/wm/WallpaperWindowToken.java
@@ -117,7 +117,7 @@
}
}
- void updateWallpaperWindows(boolean visible, int animLayerAdj) {
+ void updateWallpaperWindows(boolean visible) {
if (isHidden() == visible) {
if (DEBUG_WALLPAPER_LIGHT) Slog.d(TAG,
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index 7f2f8c5..8bceb64 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -50,7 +50,7 @@
/** Is any window animating? */
private boolean mAnimating;
- private boolean mLastAnimating;
+ private boolean mLastRootAnimating;
final Choreographer.FrameCallback mAnimationFrameCallback;
@@ -237,7 +237,8 @@
mWindowPlacerLocked.requestTraversal();
}
- if (mAnimating && !mLastAnimating) {
+ final boolean rootAnimating = mService.mRoot.isSelfOrChildAnimating();
+ if (rootAnimating && !mLastRootAnimating) {
// Usually app transitions but quite a load onto the system already (with all the
// things happening in app), so pause task snapshot persisting to not increase the
@@ -245,13 +246,13 @@
mService.mTaskSnapshotController.setPersisterPaused(true);
Trace.asyncTraceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "animating", 0);
}
- if (!mAnimating && mLastAnimating) {
+ if (!rootAnimating && mLastRootAnimating) {
mWindowPlacerLocked.requestTraversal();
mService.mTaskSnapshotController.setPersisterPaused(false);
Trace.asyncTraceEnd(Trace.TRACE_TAG_WINDOW_MANAGER, "animating", 0);
}
- mLastAnimating = mAnimating;
+ mLastRootAnimating = rootAnimating;
if (mRemoveReplacedWindows) {
mService.mRoot.removeReplacedWindows();
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 2056a9c..ca13984 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2627,7 +2627,7 @@
synchronized (mWindowMap) {
for (final WindowState win : mWindowMap.values()) {
final AppWindowToken appToken = win.mAppToken;
- if (appToken != null && appToken.mAppAnimator != null) {
+ if (appToken != null) {
appToken.endDelayingAnimationStart();
}
}
diff --git a/services/core/java/com/android/server/wm/WindowManagerThreadPriorityBooster.java b/services/core/java/com/android/server/wm/WindowManagerThreadPriorityBooster.java
index 1b2eb46..dd89b3b 100644
--- a/services/core/java/com/android/server/wm/WindowManagerThreadPriorityBooster.java
+++ b/services/core/java/com/android/server/wm/WindowManagerThreadPriorityBooster.java
@@ -36,6 +36,7 @@
private final Object mLock = new Object();
private final int mAnimationThreadId;
+ private final int mSurfaceAnimationThreadId;
@GuardedBy("mLock")
private boolean mAppTransitionRunning;
@@ -45,14 +46,16 @@
WindowManagerThreadPriorityBooster() {
super(THREAD_PRIORITY_DISPLAY, INDEX_WINDOW);
mAnimationThreadId = AnimationThread.get().getThreadId();
+ mSurfaceAnimationThreadId = SurfaceAnimationThread.get().getThreadId();
}
@Override
public void boost() {
- // Do not boost the animation thread. As the animation thread is changing priorities,
+ // Do not boost the animation threads. As the animation threads are changing priorities,
// boosting it might mess up the priority because we reset it the the previous priority.
- if (myTid() == mAnimationThreadId) {
+ final int myTid = myTid();
+ if (myTid == mAnimationThreadId || myTid == mSurfaceAnimationThreadId) {
return;
}
super.boost();
@@ -62,7 +65,8 @@
public void reset() {
// See comment in boost().
- if (myTid() == mAnimationThreadId) {
+ final int myTid = myTid();
+ if (myTid == mAnimationThreadId || myTid == mSurfaceAnimationThreadId) {
return;
}
super.reset();
@@ -92,5 +96,6 @@
? TOP_APP_PRIORITY_BOOST : THREAD_PRIORITY_DISPLAY;
setBoostToPriority(priority);
setThreadPriority(mAnimationThreadId, priority);
+ setThreadPriority(mSurfaceAnimationThreadId, priority);
}
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index b635f43..f39a9ec 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -1501,7 +1501,7 @@
*/
boolean isInteresting() {
return mAppToken != null && !mAppDied
- && (!mAppToken.mAppAnimator.freezingScreen || !mAppFreezing);
+ && (!mAppToken.isFreezingScreen() || !mAppFreezing);
}
/**
@@ -2003,28 +2003,6 @@
mHasSurface = hasSurface;
}
- int getAnimLayerAdjustment() {
- if (mIsImWindow && mService.mInputMethodTarget != null) {
- final AppWindowToken appToken = mService.mInputMethodTarget.mAppToken;
- if (appToken != null) {
- return appToken.getAnimLayerAdjustment();
- }
- }
-
- return mToken.getAnimLayerAdjustment();
- }
-
- int getSpecialWindowAnimLayerAdjustment() {
- int specialAdjustment = 0;
- if (mIsImWindow) {
- specialAdjustment = getDisplayContent().mInputMethodAnimLayerAdjustment;
- } else if (mIsWallpaper) {
- specialAdjustment = getDisplayContent().mWallpaperController.getAnimLayerAdjustment();
- }
-
- return mLayer + specialAdjustment;
- }
-
boolean canBeImeTarget() {
if (mIsImWindow) {
// IME windows can't be IME targets. IME targets are required to be below the IME
@@ -3154,7 +3132,6 @@
pw.print(prefix); pw.print("mBaseLayer="); pw.print(mBaseLayer);
pw.print(" mSubLayer="); pw.print(mSubLayer);
pw.print(" mAnimLayer="); pw.print(mLayer); pw.print("+");
- pw.print(getAnimLayerAdjustment());
pw.print("="); pw.print(mWinAnimator.mAnimLayer);
pw.print(" mLastLayer="); pw.println(mWinAnimator.mLastLayer);
}
@@ -4400,7 +4377,13 @@
@Override
boolean needsZBoost() {
- return getAnimLayerAdjustment() > 0 || mWillReplaceWindow;
+ if (mIsImWindow && mService.mInputMethodTarget != null) {
+ final AppWindowToken appToken = mService.mInputMethodTarget.mAppToken;
+ if (appToken != null) {
+ return appToken.needsZBoost();
+ }
+ }
+ return mWillReplaceWindow;
}
private void applyDims(Dimmer dimmer) {
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 022b6f3..ce93b95 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -102,7 +102,6 @@
final WindowState mWin;
private final WindowStateAnimator mParentWinAnimator;
final WindowAnimator mAnimator;
- AppWindowAnimator mAppAnimator;
final Session mSession;
final WindowManagerPolicy mPolicy;
final Context mContext;
@@ -227,7 +226,6 @@
mWin = win;
mParentWinAnimator = !win.isChildWindow() ? null : win.getParentWindow().mWinAnimator;
- mAppAnimator = win.mAppToken == null ? null : win.mAppToken.mAppAnimator;
mSession = win.mSession;
mAttrType = win.mAttrs.type;
mIsWallpaper = win.mIsWallpaper;
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index cfe8672..bdab9c7 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -397,7 +397,6 @@
final int appsCount = mService.mOpeningApps.size();
for (int i = 0; i < appsCount; i++) {
AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
- final AppWindowAnimator appAnimator = wtoken.mAppAnimator;
if (DEBUG_APP_TRANSITIONS) Slog.v(TAG, "Now opening app" + wtoken);
if (!wtoken.setVisibility(animLp, true, transit, false, voiceInteraction)){
diff --git a/services/core/java/com/android/server/wm/WindowToken.java b/services/core/java/com/android/server/wm/WindowToken.java
index 924aa62..bad9bf5 100644
--- a/services/core/java/com/android/server/wm/WindowToken.java
+++ b/services/core/java/com/android/server/wm/WindowToken.java
@@ -199,11 +199,6 @@
return mChildren.isEmpty();
}
- // Used by AppWindowToken.
- int getAnimLayerAdjustment() {
- return 0;
- }
-
WindowState getReplacingWindow() {
for (int i = mChildren.size() - 1; i >= 0; i--) {
final WindowState win = mChildren.get(i);
diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
index 5f58744..012fc23 100644
--- a/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
+++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestUtils.java
@@ -160,7 +160,6 @@
/* Used so we can gain access to some protected members of the {@link WindowToken} class */
public static class TestWindowToken extends WindowToken {
- int adj = 0;
TestWindowToken(int type, DisplayContent dc) {
this(type, dc, false /* persistOnEmpty */);
@@ -178,11 +177,6 @@
boolean hasWindow(WindowState w) {
return mChildren.contains(w);
}
-
- @Override
- int getAnimLayerAdjustment() {
- return adj;
- }
}
/* Used so we can gain access to some protected members of the {@link Task} class */