summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/ActivityStackSupervisor.java29
-rw-r--r--services/core/java/com/android/server/wm/AppWindowToken.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java2
3 files changed, 11 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 5c49dfd7052b..d3aee8b2c69a 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -2295,17 +2295,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
mResizingTasksDuringAnimation.clear();
}
- private class MoveTaskToFullscreenArgs {
- public int fromStackId;
- public boolean onTop;
- };
- // Used only to closure over the arguments to moveTasksToFullscreenStack without
- // allocation
- private MoveTaskToFullscreenArgs mMoveToFullscreenArgs = new MoveTaskToFullscreenArgs();
-
- private void moveTasksToFullscreenStackInnerLocked() {
- int fromStackId = mMoveToFullscreenArgs.fromStackId;
- boolean onTop = mMoveToFullscreenArgs.onTop;
+ private void moveTasksToFullscreenStackInSurfaceTransaction(int fromStackId,
+ boolean onTop) {
final ActivityStack stack = getStack(fromStackId);
if (stack == null) {
@@ -2379,10 +2370,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
}
void moveTasksToFullscreenStackLocked(int fromStackId, boolean onTop) {
- mMoveToFullscreenArgs.fromStackId = fromStackId;
- mMoveToFullscreenArgs.onTop = onTop;
-
- mWindowManager.inSurfaceTransaction(this::moveTasksToFullscreenStackInnerLocked);
+ mWindowManager.inSurfaceTransaction(
+ () -> moveTasksToFullscreenStackInSurfaceTransaction(fromStackId, onTop));
}
void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
@@ -2498,11 +2487,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
}
- // Used only to closure over the argument to removeStack without allocation.
- private int mRemoveStackStackId;
- void removeStackInnerLocked() {
- int stackId = mRemoveStackStackId;
-
+ void removeStackInSurfaceTransaction(int stackId) {
final ActivityStack stack = getStack(stackId);
if (stack == null) {
return;
@@ -2546,8 +2531,8 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
* instead moved back onto the fullscreen stack.
*/
void removeStackLocked(int stackId) {
- mRemoveStackStackId = stackId;
- mWindowManager.inSurfaceTransaction(this::removeStackInnerLocked);
+ mWindowManager.inSurfaceTransaction(
+ () -> removeStackInSurfaceTransaction(stackId));
}
/**
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 32cd7d8be429..5e19a459bf17 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -368,6 +368,10 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree
mEnteringAnimation = true;
mService.mActivityManagerAppTransitionNotifier.onAppTransitionFinishedLocked(token);
}
+ // If we are hidden but there is no delay needed we immediately
+ // apply the Surface transaction so that the ActivityManager
+ // can have some guarantee on the Surface state
+ // following setting the visibility.
if (hidden && !delayed) {
SurfaceControl.openTransaction();
for (int i = mChildren.size() - 1; i >= 0; i--) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index dd2689bffa47..0c04b3e2a458 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -7316,7 +7316,6 @@ public class WindowManagerService extends IWindowManager.Stub
* WARNING: This method contains locks known to the State of California
* to cause Deadlocks and other conditions.
*
- *
* Begins a surface transaction with which the AM can batch operations.
* All Surface updates performed by the WindowManager following this
* will not appear on screen until after the call to
@@ -7329,7 +7328,6 @@ public class WindowManagerService extends IWindowManager.Stub
* from the new parent are inherited, otherwise it could be revealed
* mistakenly.
*
- *
* TODO(b/36393204): We can investigate totally replacing #deferSurfaceLayout
* with something like this but it seems that some existing cases of
* deferSurfaceLayout may be a little too broad, in particular the total