diff options
| author | 2022-11-07 11:06:11 +0000 | |
|---|---|---|
| committer | 2022-11-07 11:06:11 +0000 | |
| commit | 907060a9c84f19c595e00277d00bb2cf4aacf6fb (patch) | |
| tree | dbd2dca787e29596ca43fef9226779e47ae29227 | |
| parent | 9e98be73fe90a14a1134c74ddb9ef73a94f9f475 (diff) | |
| parent | 3f63f47ed982c41015693cc60bee9a6dca36348f (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>
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, |