summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Galia Peycheva <galinap@google.com> 2022-11-07 11:06:11 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-11-07 11:06:11 +0000
commit907060a9c84f19c595e00277d00bb2cf4aacf6fb (patch)
treedbd2dca787e29596ca43fef9226779e47ae29227
parent9e98be73fe90a14a1134c74ddb9ef73a94f9f475 (diff)
parent3f63f47ed982c41015693cc60bee9a6dca36348f (diff)
Merge "Revert "Fix pip update transaction out of order"" into tm-qpr-dev am: 2899ff81c2 am: 3f63f47ed9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20391545 Change-Id: Ib063e8b913098ac2111428e1a321f7a076e7e254 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java40
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java12
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java12
4 files changed, 5 insertions, 65 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java
index f70736304f31..000624499f79 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipMenuController.java
@@ -23,7 +23,6 @@ import static android.view.WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
-import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.RemoteAction;
@@ -74,11 +73,6 @@ public interface PipMenuController {
void setAppActions(List<RemoteAction> appActions, RemoteAction closeAction);
/**
- * Wait until the next frame to run the given Runnable.
- */
- void runWithNextFrame(@NonNull Runnable runnable);
-
- /**
* Resize the PiP menu with the given bounds. The PiP SurfaceControl is given if there is a
* need to synchronize the movements on the same frame as PiP.
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
index 2d7c5ce6feb5..f170e774739f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java
@@ -179,10 +179,8 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
// This is necessary in case there was a resize animation ongoing when exit PIP
// started, in which case the first resize will be skipped to let the exit
// operation handle the final resize out of PIP mode. See b/185306679.
- finishResizeDelayedIfNeeded(() -> {
- finishResize(tx, destinationBounds, direction, animationType);
- sendOnPipTransitionFinished(direction);
- });
+ finishResize(tx, destinationBounds, direction, animationType);
+ sendOnPipTransitionFinished(direction);
}
}
@@ -198,34 +196,6 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
}
};
- /**
- * Finishes resizing the PiP, delaying the operation if it has to be synced with the PiP menu.
- *
- * This is done to avoid a race condition between the last transaction applied in
- * onAnimationUpdate and the finishResize in onAnimationEnd. finishResize creates a
- * WindowContainerTransaction, which is to be applied by WmCore later. It may happen that it
- * gets applied before the transaction created by the last onAnimationUpdate. As a result of
- * this, the PiP surface may get scaled after the new bounds are applied by WmCore, which
- * makes the PiP surface have unexpected bounds. To avoid this, we delay the finishResize
- * operation until the next frame. This aligns the last onAnimationUpdate transaction with the
- * WCT application.
- *
- * The race only happens when the PiP surface transaction has to be synced with the PiP menu
- * due to the necessity for a delay when syncing the PiP surface, the PiP menu surface and
- * the PiP menu contents.
- */
- private void finishResizeDelayedIfNeeded(Runnable finishResizeRunnable) {
- if (!shouldSyncPipTransactionWithMenu()) {
- finishResizeRunnable.run();
- return;
- }
- mPipMenuController.runWithNextFrame(finishResizeRunnable);
- }
-
- private boolean shouldSyncPipTransactionWithMenu() {
- return mPipMenuController.isMenuVisible();
- }
-
@VisibleForTesting
final PipTransitionController.PipTransitionCallback mPipTransitionCallback =
new PipTransitionController.PipTransitionCallback() {
@@ -251,7 +221,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
@Override
public boolean handlePipTransaction(SurfaceControl leash,
SurfaceControl.Transaction tx, Rect destinationBounds) {
- if (shouldSyncPipTransactionWithMenu()) {
+ if (mPipMenuController.isMenuVisible()) {
mPipMenuController.movePipMenu(leash, tx, destinationBounds);
return true;
}
@@ -1253,7 +1223,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
mSurfaceTransactionHelper
.crop(tx, mLeash, toBounds)
.round(tx, mLeash, mPipTransitionState.isInPip());
- if (shouldSyncPipTransactionWithMenu()) {
+ if (mPipMenuController.isMenuVisible()) {
mPipMenuController.resizePipMenu(mLeash, tx, toBounds);
} else {
tx.apply();
@@ -1295,7 +1265,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
mSurfaceTransactionHelper
.scale(tx, mLeash, startBounds, toBounds, degrees)
.round(tx, mLeash, startBounds, toBounds);
- if (shouldSyncPipTransactionWithMenu()) {
+ if (mPipMenuController.isMenuVisible()) {
mPipMenuController.movePipMenu(mLeash, tx, toBounds);
} else {
tx.apply();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
index 531b9de1f913..a0a8f9fb2cde 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/phone/PhonePipMenuController.java
@@ -305,18 +305,6 @@ public class PhonePipMenuController implements PipMenuController {
showResizeHandle);
}
- @Override
- public void runWithNextFrame(Runnable runnable) {
- if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) {
- runnable.run();
- }
-
- mPipMenuView.getViewRootImpl().registerRtFrameCallback(frame -> {
- mMainHandler.post(runnable);
- });
- mPipMenuView.invalidate();
- }
-
/**
* Move the PiP menu, which does a translation and possibly a scale transformation.
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
index c39400ab61e3..ab7edbfaa4ca 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java
@@ -421,18 +421,6 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis
}
@Override
- public void runWithNextFrame(Runnable runnable) {
- if (mPipMenuView == null || mPipMenuView.getViewRootImpl() == null) {
- runnable.run();
- }
-
- mPipMenuView.getViewRootImpl().registerRtFrameCallback(frame -> {
- mMainHandler.post(runnable);
- });
- mPipMenuView.invalidate();
- }
-
- @Override
public void movePipMenu(SurfaceControl pipLeash, SurfaceControl.Transaction transaction,
Rect pipDestBounds) {
ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE,