diff options
| author | 2018-01-12 01:18:08 +0000 | |
|---|---|---|
| committer | 2018-01-12 01:18:08 +0000 | |
| commit | 6db6679a1a365fab545e9be5964645fafeb9a25d (patch) | |
| tree | 29c2328ee68db057019c7110d37d92b2a824c8bf | |
| parent | 716fe76e816cd48e99de130964f3f36ec8382de9 (diff) | |
| parent | 042059d0ca5cd0138748e70f5b7753ae2c5710bb (diff) | |
Merge changes from topic "fixTurnOnScreen"
* changes:
Remove TURN_ON_SCREEN from bulkUpdate and set mTurnOnScreen.
Revert "Revert "Call prepareSurfaces in applySurfacesChangesTransaction""
Revert "Revert "Revert "Revert "Avoid setting size/position on Transaction if not needed""""
8 files changed, 23 insertions, 47 deletions
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index df468acce74c..4c5520fac2cb 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -342,9 +342,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo new TaskForResizePointSearchResult(); private final ApplySurfaceChangesTransactionState mTmpApplySurfaceChangesTransactionState = new ApplySurfaceChangesTransactionState(); - private final ScreenshotApplicationState mScreenshotApplicationState = - new ScreenshotApplicationState(); - private final Transaction mTmpTransaction = new Transaction(); // True if this display is in the process of being removed. Used to determine if the removal of // the display's direct children should be allowed. @@ -661,10 +658,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mWallpaperController.updateWallpaperVisibility(); } - // Use mTmpTransaction instead of mPendingTransaction because we don't want to commit - // other changes in mPendingTransaction at this point. - w.handleWindowMovedIfNeeded(mTmpTransaction); - SurfaceControl.mergeToGlobalTransaction(mTmpTransaction); + w.handleWindowMovedIfNeeded(mPendingTransaction); final WindowStateAnimator winAnimator = w.mWinAnimator; @@ -699,33 +693,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } } - final TaskStack stack = w.getStack(); - if (!winAnimator.isWaitingForOpening() - || (stack != null && stack.isAnimatingBounds())) { - // Updates the shown frame before we set up the surface. This is needed - // because the resizing could change the top-left position (in addition to - // size) of the window. setSurfaceBoundariesLocked uses mShownPosition to - // position the surface. - // - // If an animation is being started, we can't call this method because the - // animation hasn't processed its initial transformation yet, but in general - // we do want to update the position if the window is animating. We make an exception - // for the bounds animating state, where an application may have been waiting - // for an exit animation to start, but instead enters PiP. We need to ensure - // we always recompute the top-left in this case. - winAnimator.computeShownFrameLocked(); - } - winAnimator.setSurfaceBoundariesLocked(mTmpRecoveringMemory /* recoveringMemory */); - - // Since setSurfaceBoundariesLocked applies the clipping, we need to apply the position - // to the surface of the window container and also the position of the stack window - // container as well. Use mTmpTransaction instead of mPendingTransaction to avoid - // committing any existing changes in there. - w.updateSurfacePosition(mTmpTransaction); - if (stack != null) { - stack.updateSurfaceBounds(mTmpTransaction); - } - SurfaceControl.mergeToGlobalTransaction(mTmpTransaction); } final AppWindowToken atoken = w.mAppToken; @@ -2845,6 +2812,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo mTmpRecoveringMemory = recoveringMemory; forAllWindows(mApplySurfaceChangesTransaction, true /* traverseTopToBottom */); + prepareSurfaces(); mService.mDisplayManagerInternal.setDisplayProperties(mDisplayId, mTmpApplySurfaceChangesTransactionState.displayHasContent, diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java index 2a77c92b5c87..2cc96c9ee7b6 100644 --- a/services/core/java/com/android/server/wm/RootWindowContainer.java +++ b/services/core/java/com/android/server/wm/RootWindowContainer.java @@ -86,7 +86,6 @@ import static com.android.server.wm.WindowManagerService.H.WINDOW_FREEZE_TIMEOUT import static com.android.server.wm.WindowManagerService.logSurface; import static com.android.server.wm.WindowSurfacePlacer.SET_FORCE_HIDING_CHANGED; import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE; -import static com.android.server.wm.WindowSurfacePlacer.SET_TURN_ON_SCREEN; import static com.android.server.wm.WindowSurfacePlacer.SET_UPDATE_ROTATION; import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_ACTION_PENDING; import static com.android.server.wm.WindowSurfacePlacer.SET_WALLPAPER_MAY_CHANGE; @@ -968,9 +967,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent> { doRequest = true; } } - if ((bulkUpdateParams & SET_TURN_ON_SCREEN) != 0) { - mService.mTurnOnScreen = true; - } + if ((bulkUpdateParams & SET_WALLPAPER_ACTION_PENDING) != 0) { mWallpaperActionPending = true; } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 7024fb1e5aed..8a36226aeaa3 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -49,6 +49,7 @@ import static com.android.server.wm.proto.StackProto.WINDOW_CONTAINER; import android.annotation.CallSuper; import android.content.res.Configuration; +import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.os.RemoteException; @@ -150,6 +151,7 @@ public class TaskStack extends WindowContainer<Task> implements * For {@link #prepareSurfaces}. */ final Rect mTmpDimBoundsRect = new Rect(); + private final Point mLastSurfaceSize = new Point(); TaskStack(WindowManagerService service, int stackId, StackWindowController controller) { super(service); @@ -749,7 +751,13 @@ public class TaskStack extends WindowContainer<Task> implements } final Rect stackBounds = getBounds(); - transaction.setSize(mSurfaceControl, stackBounds.width(), stackBounds.height()); + final int width = stackBounds.width(); + final int height = stackBounds.height(); + if (width == mLastSurfaceSize.x && height == mLastSurfaceSize.y) { + return; + } + transaction.setSize(mSurfaceControl, width, height); + mLastSurfaceSize.set(width, height); } @Override diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index 3efd6ac0afef..cec13abd823d 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -292,9 +292,6 @@ public class WindowAnimator { if ((bulkUpdateParams & WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE) != 0) { builder.append(" ORIENTATION_CHANGE_COMPLETE"); } - if ((bulkUpdateParams & WindowSurfacePlacer.SET_TURN_ON_SCREEN) != 0) { - builder.append(" TURN_ON_SCREEN"); - } return builder.toString(); } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index c267c70c9e5f..42c6ec25a7a8 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -95,6 +95,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< protected final WindowManagerService mService; private final Point mTmpPos = new Point(); + protected final Point mLastSurfacePosition = new Point(); /** Total number of elements in this subtree, including our own hierarchy element. */ private int mTreeWeight = 1; @@ -1179,7 +1180,12 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } getRelativePosition(mTmpPos); + if (mTmpPos.equals(mLastSurfacePosition)) { + return; + } + transaction.setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y); + mLastSurfacePosition.set(mTmpPos.x, mTmpPos.y); for (int i = mChildren.size() - 1; i >= 0; i--) { mChildren.get(i).updateSurfacePosition(transaction); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 138a16d4f062..97070bd91451 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -4488,6 +4488,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP // Leash is now responsible for position, so set our position to 0. t.setPosition(mSurfaceControl, 0, 0); + mLastSurfacePosition.set(0, 0); } @Override @@ -4503,8 +4504,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP } transformFrameToSurfacePosition(mFrame.left, mFrame.top, mSurfacePosition); - if (!mSurfaceAnimator.hasLeash()) { + if (!mSurfaceAnimator.hasLeash() && !mLastSurfacePosition.equals(mSurfacePosition)) { t.setPosition(mSurfaceControl, mSurfacePosition.x, mSurfacePosition.y); + mLastSurfacePosition.set(mSurfacePosition.x, mSurfacePosition.y); } } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 96b0bd5f7b2f..ba5156bfd43b 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -41,7 +41,6 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; import static com.android.server.wm.WindowManagerService.TYPE_LAYER_MULTIPLIER; import static com.android.server.wm.WindowManagerService.logWithStack; import static com.android.server.wm.WindowSurfacePlacer.SET_ORIENTATION_CHANGE_COMPLETE; -import static com.android.server.wm.WindowSurfacePlacer.SET_TURN_ON_SCREEN; import static com.android.server.wm.proto.WindowStateAnimatorProto.DRAW_STATE; import static com.android.server.wm.proto.WindowStateAnimatorProto.LAST_CLIP_RECT; import static com.android.server.wm.proto.WindowStateAnimatorProto.SURFACE; @@ -1165,7 +1164,7 @@ class WindowStateAnimator { // potentially occurring while turning off the screen. This would lead to the // screen incorrectly turning back on. if (!mService.mPowerManager.isInteractive()) { - mAnimator.mBulkUpdateParams |= SET_TURN_ON_SCREEN; + mService.mTurnOnScreen = true; } } } diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java index a512fdf828b3..017b3251696e 100644 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -86,8 +86,7 @@ class WindowSurfacePlacer { static final int SET_WALLPAPER_MAY_CHANGE = 1 << 1; static final int SET_FORCE_HIDING_CHANGED = 1 << 2; static final int SET_ORIENTATION_CHANGE_COMPLETE = 1 << 3; - static final int SET_TURN_ON_SCREEN = 1 << 4; - static final int SET_WALLPAPER_ACTION_PENDING = 1 << 5; + static final int SET_WALLPAPER_ACTION_PENDING = 1 << 4; private boolean mTraversalScheduled; private int mDeferDepth = 0; |