Loading services/core/java/com/android/server/wm/AppWindowAnimator.java +23 −17 Original line number Diff line number Diff line Loading @@ -16,10 +16,10 @@ package com.android.server.wm; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; import static com.android.server.wm.AppTransition.TRANSIT_UNSET; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading Loading @@ -78,11 +78,8 @@ public class AppWindowAnimator { // requires that the duration of the two animations are the same. SurfaceControl thumbnail; int thumbnailTransactionSeq; // TODO(b/62029108): combine both members into a private one. Create a member function to set // the thumbnail layer to +1 to the highest layer position and replace all setter instances // with this function. Remove all unnecessary calls to both variables in other classes. int thumbnailLayer; int thumbnailForceAboveLayer; private int mThumbnailLayer; Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); // This flag indicates that the destruction of the thumbnail surface is synchronized with Loading Loading @@ -256,7 +253,7 @@ public class AppWindowAnimator { private void updateLayers() { mAppToken.getDisplayContent().assignWindowLayers(false /* relayoutNeeded */); thumbnailLayer = mAppToken.getHighestAnimLayer(); updateThumbnailLayer(); } private void stepThumbnailAnimation(long currentTime) { Loading @@ -280,25 +277,34 @@ public class AppWindowAnimator { thumbnail.setPosition(tmpFloats[Matrix.MTRANS_X], tmpFloats[Matrix.MTRANS_Y]); if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(thumbnail, "thumbnail", "alpha=" + thumbnailTransformation.getAlpha() + " layer=" + thumbnailLayer + " layer=" + mThumbnailLayer + " matrix=[" + tmpFloats[Matrix.MSCALE_X] + "," + tmpFloats[Matrix.MSKEW_Y] + "][" + tmpFloats[Matrix.MSKEW_X] + "," + tmpFloats[Matrix.MSCALE_Y] + "]"); thumbnail.setAlpha(thumbnailTransformation.getAlpha()); if (thumbnailForceAboveLayer > 0) { thumbnail.setLayer(thumbnailForceAboveLayer + 1); } else { // The thumbnail is layered below the window immediately above this // token's anim layer. thumbnail.setLayer(thumbnailLayer + WindowManagerService.WINDOW_LAYER_MULTIPLIER - WindowManagerService.LAYER_OFFSET_THUMBNAIL); } updateThumbnailLayer(); thumbnail.setMatrix(tmpFloats[Matrix.MSCALE_X], tmpFloats[Matrix.MSKEW_Y], tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]); thumbnail.setWindowCrop(thumbnailTransformation.getClipRect()); } /** * Updates the thumbnail layer z order to just above the highest animation layer if changed */ void updateThumbnailLayer() { if (thumbnail != null) { final int layer = mAppToken.getHighestAnimLayer(); if (layer != mThumbnailLayer) { if (DEBUG_LAYERS) Slog.v(TAG, "Setting thumbnail layer " + mAppToken + ": layer=" + layer); thumbnail.setLayer(layer + WindowManagerService.WINDOW_LAYER_MULTIPLIER - WindowManagerService.LAYER_OFFSET_THUMBNAIL); mThumbnailLayer = layer; } } } /** * Sometimes we need to synchronize the first frame of animation with some external event, e.g. * Recents hiding some of its content. To achieve this, we prolong the start of the animaiton Loading Loading @@ -473,7 +479,7 @@ public class AppWindowAnimator { } if (thumbnail != null) { pw.print(prefix); pw.print("thumbnail="); pw.print(thumbnail); pw.print(" layer="); pw.println(thumbnailLayer); pw.print(" layer="); pw.println(mThumbnailLayer); pw.print(prefix); pw.print("thumbnailAnimation="); pw.println(thumbnailAnimation); pw.print(prefix); pw.print("thumbnailTransformation="); pw.println(thumbnailTransformation.toShortString()); Loading services/core/java/com/android/server/wm/AppWindowToken.java +0 −1 Original line number Diff line number Diff line Loading @@ -1170,7 +1170,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree wAppAnimator.thumbnail.destroy(); } wAppAnimator.thumbnail = tAppAnimator.thumbnail; wAppAnimator.thumbnailLayer = tAppAnimator.thumbnailLayer; wAppAnimator.thumbnailAnimation = tAppAnimator.thumbnailAnimation; tAppAnimator.thumbnail = null; } Loading services/core/java/com/android/server/wm/DisplayContent.java +0 −4 Original line number Diff line number Diff line Loading @@ -392,10 +392,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo != mTmpWindowAnimator.mAnimTransactionSequence) { appAnimator.thumbnailTransactionSeq = mTmpWindowAnimator.mAnimTransactionSequence; appAnimator.thumbnailLayer = 0; } if (appAnimator.thumbnailLayer < winAnimator.mAnimLayer) { appAnimator.thumbnailLayer = winAnimator.mAnimLayer; } } }; Loading services/core/java/com/android/server/wm/WindowLayersController.java +2 −14 Original line number Diff line number Diff line Loading @@ -266,20 +266,8 @@ class WindowLayersController { w.mLayer = layer; w.mWinAnimator.mAnimLayer = w.getAnimLayerAdjustment() + w.getSpecialWindowAnimLayerAdjustment(); if (w.mAppToken != null && w.mAppToken.mAppAnimator.thumbnailForceAboveLayer > 0) { if (w.mWinAnimator.mAnimLayer > w.mAppToken.mAppAnimator.thumbnailForceAboveLayer) { w.mAppToken.mAppAnimator.thumbnailForceAboveLayer = w.mWinAnimator.mAnimLayer; } // TODO(b/62029108): the entire contents of the if statement should call the refactored // function to set the thumbnail layer for w.AppToken int highestLayer = w.mAppToken.getHighestAnimLayer(); if (highestLayer > 0) { if (w.mAppToken.mAppAnimator.thumbnail != null && w.mAppToken.mAppAnimator.thumbnailForceAboveLayer != highestLayer) { w.mAppToken.mAppAnimator.thumbnailForceAboveLayer = highestLayer; w.mAppToken.mAppAnimator.thumbnail.setLayer(highestLayer + 1); } } if (w.mAppToken != null) { w.mAppToken.mAppAnimator.updateThumbnailLayer(); } } } services/core/java/com/android/server/wm/WindowSurfacePlacer.java +7 −12 Original line number Diff line number Diff line Loading @@ -342,10 +342,7 @@ class WindowSurfacePlacer { mTmpLayerAndToken.token = null; handleClosingApps(transit, animLp, voiceInteraction, mTmpLayerAndToken); final AppWindowToken topClosingApp = mTmpLayerAndToken.token; final int topClosingLayer = mTmpLayerAndToken.layer; final AppWindowToken topOpeningApp = handleOpeningApps(transit, animLp, voiceInteraction, topClosingLayer); final AppWindowToken topOpeningApp = handleOpeningApps(transit, animLp, voiceInteraction); mService.mAppTransition.setLastAppTransition(transit, topOpeningApp, topClosingApp); Loading Loading @@ -387,8 +384,9 @@ class WindowSurfacePlacer { } private AppWindowToken handleOpeningApps(int transit, LayoutParams animLp, boolean voiceInteraction, int topClosingLayer) { boolean voiceInteraction) { AppWindowToken topOpeningApp = null; int topOpeningLayer = Integer.MIN_VALUE; final int appsCount = mService.mOpeningApps.size(); for (int i = 0; i < appsCount; i++) { AppWindowToken wtoken = mService.mOpeningApps.valueAt(i); Loading Loading @@ -422,7 +420,6 @@ class WindowSurfacePlacer { } mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating(); int topOpeningLayer = 0; if (animLp != null) { final int layer = wtoken.getHighestAnimLayer(); if (topOpeningApp == null || layer > topOpeningLayer) { Loading @@ -431,7 +428,7 @@ class WindowSurfacePlacer { } } if (mService.mAppTransition.isNextAppTransitionThumbnailUp()) { createThumbnailAppAnimator(transit, wtoken, topOpeningLayer, topClosingLayer); createThumbnailAppAnimator(transit, wtoken); } } return topOpeningApp; Loading Loading @@ -473,7 +470,7 @@ class WindowSurfacePlacer { } } if (mService.mAppTransition.isNextAppTransitionThumbnailDown()) { createThumbnailAppAnimator(transit, wtoken, 0, layerAndToken.layer); createThumbnailAppAnimator(transit, wtoken); } } } Loading Loading @@ -666,8 +663,7 @@ class WindowSurfacePlacer { } } private void createThumbnailAppAnimator(int transit, AppWindowToken appToken, int openingLayer, int closingLayer) { private void createThumbnailAppAnimator(int transit, AppWindowToken appToken) { AppWindowAnimator openingAppAnimator = (appToken == null) ? null : appToken.mAppAnimator; if (openingAppAnimator == null || openingAppAnimator.animation == null) { return; Loading Loading @@ -724,7 +720,6 @@ class WindowSurfacePlacer { anim = mService.mAppTransition.createThumbnailAspectScaleAnimationLocked(appRect, insets, thumbnailHeader, taskId, displayConfig.uiMode, displayConfig.orientation); openingAppAnimator.thumbnailForceAboveLayer = Math.max(openingLayer, closingLayer); openingAppAnimator.deferThumbnailDestruction = !mService.mAppTransition.isNextThumbnailTransitionScaleUp(); } else { Loading @@ -734,8 +729,8 @@ class WindowSurfacePlacer { anim.restrictDuration(MAX_ANIMATION_DURATION); anim.scaleCurrentDuration(mService.getTransitionAnimationScaleLocked()); openingAppAnimator.updateThumbnailLayer(); openingAppAnimator.thumbnail = surfaceControl; openingAppAnimator.thumbnailLayer = openingLayer; openingAppAnimator.thumbnailAnimation = anim; mService.mAppTransition.getNextAppTransitionStartRect(taskId, mTmpStartRect); } catch (Surface.OutOfResourcesException e) { Loading Loading
services/core/java/com/android/server/wm/AppWindowAnimator.java +23 −17 Original line number Diff line number Diff line Loading @@ -16,10 +16,10 @@ package com.android.server.wm; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM; import static com.android.server.wm.AppTransition.TRANSIT_UNSET; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_LAYERS; import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY; import static com.android.server.wm.WindowManagerDebugConfig.SHOW_TRANSACTIONS; import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME; Loading Loading @@ -78,11 +78,8 @@ public class AppWindowAnimator { // requires that the duration of the two animations are the same. SurfaceControl thumbnail; int thumbnailTransactionSeq; // TODO(b/62029108): combine both members into a private one. Create a member function to set // the thumbnail layer to +1 to the highest layer position and replace all setter instances // with this function. Remove all unnecessary calls to both variables in other classes. int thumbnailLayer; int thumbnailForceAboveLayer; private int mThumbnailLayer; Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); // This flag indicates that the destruction of the thumbnail surface is synchronized with Loading Loading @@ -256,7 +253,7 @@ public class AppWindowAnimator { private void updateLayers() { mAppToken.getDisplayContent().assignWindowLayers(false /* relayoutNeeded */); thumbnailLayer = mAppToken.getHighestAnimLayer(); updateThumbnailLayer(); } private void stepThumbnailAnimation(long currentTime) { Loading @@ -280,25 +277,34 @@ public class AppWindowAnimator { thumbnail.setPosition(tmpFloats[Matrix.MTRANS_X], tmpFloats[Matrix.MTRANS_Y]); if (SHOW_TRANSACTIONS) WindowManagerService.logSurface(thumbnail, "thumbnail", "alpha=" + thumbnailTransformation.getAlpha() + " layer=" + thumbnailLayer + " layer=" + mThumbnailLayer + " matrix=[" + tmpFloats[Matrix.MSCALE_X] + "," + tmpFloats[Matrix.MSKEW_Y] + "][" + tmpFloats[Matrix.MSKEW_X] + "," + tmpFloats[Matrix.MSCALE_Y] + "]"); thumbnail.setAlpha(thumbnailTransformation.getAlpha()); if (thumbnailForceAboveLayer > 0) { thumbnail.setLayer(thumbnailForceAboveLayer + 1); } else { // The thumbnail is layered below the window immediately above this // token's anim layer. thumbnail.setLayer(thumbnailLayer + WindowManagerService.WINDOW_LAYER_MULTIPLIER - WindowManagerService.LAYER_OFFSET_THUMBNAIL); } updateThumbnailLayer(); thumbnail.setMatrix(tmpFloats[Matrix.MSCALE_X], tmpFloats[Matrix.MSKEW_Y], tmpFloats[Matrix.MSKEW_X], tmpFloats[Matrix.MSCALE_Y]); thumbnail.setWindowCrop(thumbnailTransformation.getClipRect()); } /** * Updates the thumbnail layer z order to just above the highest animation layer if changed */ void updateThumbnailLayer() { if (thumbnail != null) { final int layer = mAppToken.getHighestAnimLayer(); if (layer != mThumbnailLayer) { if (DEBUG_LAYERS) Slog.v(TAG, "Setting thumbnail layer " + mAppToken + ": layer=" + layer); thumbnail.setLayer(layer + WindowManagerService.WINDOW_LAYER_MULTIPLIER - WindowManagerService.LAYER_OFFSET_THUMBNAIL); mThumbnailLayer = layer; } } } /** * Sometimes we need to synchronize the first frame of animation with some external event, e.g. * Recents hiding some of its content. To achieve this, we prolong the start of the animaiton Loading Loading @@ -473,7 +479,7 @@ public class AppWindowAnimator { } if (thumbnail != null) { pw.print(prefix); pw.print("thumbnail="); pw.print(thumbnail); pw.print(" layer="); pw.println(thumbnailLayer); pw.print(" layer="); pw.println(mThumbnailLayer); pw.print(prefix); pw.print("thumbnailAnimation="); pw.println(thumbnailAnimation); pw.print(prefix); pw.print("thumbnailTransformation="); pw.println(thumbnailTransformation.toShortString()); Loading
services/core/java/com/android/server/wm/AppWindowToken.java +0 −1 Original line number Diff line number Diff line Loading @@ -1170,7 +1170,6 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree wAppAnimator.thumbnail.destroy(); } wAppAnimator.thumbnail = tAppAnimator.thumbnail; wAppAnimator.thumbnailLayer = tAppAnimator.thumbnailLayer; wAppAnimator.thumbnailAnimation = tAppAnimator.thumbnailAnimation; tAppAnimator.thumbnail = null; } Loading
services/core/java/com/android/server/wm/DisplayContent.java +0 −4 Original line number Diff line number Diff line Loading @@ -392,10 +392,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo != mTmpWindowAnimator.mAnimTransactionSequence) { appAnimator.thumbnailTransactionSeq = mTmpWindowAnimator.mAnimTransactionSequence; appAnimator.thumbnailLayer = 0; } if (appAnimator.thumbnailLayer < winAnimator.mAnimLayer) { appAnimator.thumbnailLayer = winAnimator.mAnimLayer; } } }; Loading
services/core/java/com/android/server/wm/WindowLayersController.java +2 −14 Original line number Diff line number Diff line Loading @@ -266,20 +266,8 @@ class WindowLayersController { w.mLayer = layer; w.mWinAnimator.mAnimLayer = w.getAnimLayerAdjustment() + w.getSpecialWindowAnimLayerAdjustment(); if (w.mAppToken != null && w.mAppToken.mAppAnimator.thumbnailForceAboveLayer > 0) { if (w.mWinAnimator.mAnimLayer > w.mAppToken.mAppAnimator.thumbnailForceAboveLayer) { w.mAppToken.mAppAnimator.thumbnailForceAboveLayer = w.mWinAnimator.mAnimLayer; } // TODO(b/62029108): the entire contents of the if statement should call the refactored // function to set the thumbnail layer for w.AppToken int highestLayer = w.mAppToken.getHighestAnimLayer(); if (highestLayer > 0) { if (w.mAppToken.mAppAnimator.thumbnail != null && w.mAppToken.mAppAnimator.thumbnailForceAboveLayer != highestLayer) { w.mAppToken.mAppAnimator.thumbnailForceAboveLayer = highestLayer; w.mAppToken.mAppAnimator.thumbnail.setLayer(highestLayer + 1); } } if (w.mAppToken != null) { w.mAppToken.mAppAnimator.updateThumbnailLayer(); } } }
services/core/java/com/android/server/wm/WindowSurfacePlacer.java +7 −12 Original line number Diff line number Diff line Loading @@ -342,10 +342,7 @@ class WindowSurfacePlacer { mTmpLayerAndToken.token = null; handleClosingApps(transit, animLp, voiceInteraction, mTmpLayerAndToken); final AppWindowToken topClosingApp = mTmpLayerAndToken.token; final int topClosingLayer = mTmpLayerAndToken.layer; final AppWindowToken topOpeningApp = handleOpeningApps(transit, animLp, voiceInteraction, topClosingLayer); final AppWindowToken topOpeningApp = handleOpeningApps(transit, animLp, voiceInteraction); mService.mAppTransition.setLastAppTransition(transit, topOpeningApp, topClosingApp); Loading Loading @@ -387,8 +384,9 @@ class WindowSurfacePlacer { } private AppWindowToken handleOpeningApps(int transit, LayoutParams animLp, boolean voiceInteraction, int topClosingLayer) { boolean voiceInteraction) { AppWindowToken topOpeningApp = null; int topOpeningLayer = Integer.MIN_VALUE; final int appsCount = mService.mOpeningApps.size(); for (int i = 0; i < appsCount; i++) { AppWindowToken wtoken = mService.mOpeningApps.valueAt(i); Loading Loading @@ -422,7 +420,6 @@ class WindowSurfacePlacer { } mService.mAnimator.mAppWindowAnimating |= appAnimator.isAnimating(); int topOpeningLayer = 0; if (animLp != null) { final int layer = wtoken.getHighestAnimLayer(); if (topOpeningApp == null || layer > topOpeningLayer) { Loading @@ -431,7 +428,7 @@ class WindowSurfacePlacer { } } if (mService.mAppTransition.isNextAppTransitionThumbnailUp()) { createThumbnailAppAnimator(transit, wtoken, topOpeningLayer, topClosingLayer); createThumbnailAppAnimator(transit, wtoken); } } return topOpeningApp; Loading Loading @@ -473,7 +470,7 @@ class WindowSurfacePlacer { } } if (mService.mAppTransition.isNextAppTransitionThumbnailDown()) { createThumbnailAppAnimator(transit, wtoken, 0, layerAndToken.layer); createThumbnailAppAnimator(transit, wtoken); } } } Loading Loading @@ -666,8 +663,7 @@ class WindowSurfacePlacer { } } private void createThumbnailAppAnimator(int transit, AppWindowToken appToken, int openingLayer, int closingLayer) { private void createThumbnailAppAnimator(int transit, AppWindowToken appToken) { AppWindowAnimator openingAppAnimator = (appToken == null) ? null : appToken.mAppAnimator; if (openingAppAnimator == null || openingAppAnimator.animation == null) { return; Loading Loading @@ -724,7 +720,6 @@ class WindowSurfacePlacer { anim = mService.mAppTransition.createThumbnailAspectScaleAnimationLocked(appRect, insets, thumbnailHeader, taskId, displayConfig.uiMode, displayConfig.orientation); openingAppAnimator.thumbnailForceAboveLayer = Math.max(openingLayer, closingLayer); openingAppAnimator.deferThumbnailDestruction = !mService.mAppTransition.isNextThumbnailTransitionScaleUp(); } else { Loading @@ -734,8 +729,8 @@ class WindowSurfacePlacer { anim.restrictDuration(MAX_ANIMATION_DURATION); anim.scaleCurrentDuration(mService.getTransitionAnimationScaleLocked()); openingAppAnimator.updateThumbnailLayer(); openingAppAnimator.thumbnail = surfaceControl; openingAppAnimator.thumbnailLayer = openingLayer; openingAppAnimator.thumbnailAnimation = anim; mService.mAppTransition.getNextAppTransitionStartRect(taskId, mTmpStartRect); } catch (Surface.OutOfResourcesException e) { Loading