From ab9bd401a9f91e11c7357e74fe9d673b67769f92 Mon Sep 17 00:00:00 2001 From: Hongwei Wang Date: Wed, 16 Feb 2022 15:51:41 -0800 Subject: [PATCH] Allow onTaskInfoChanged dispatch immediately When TaskOrganizerController#onTaskInfoChanged receives the request to change aspect ratio of an existing PiP window, such request would be queued in mPendingTaskEvents and get dispatched on the next - RootWindowContainer#performSurfacePlacementNotrace OR - WindowAnimator#animate In case there is no event queued in PendingTaskEvent, we change to dispatch the event immediately. Otherwise, the next drawn should dispatch all pending events. Bug: 218456378 Test: atest PinnedStackTests#testChangeAspectRationWhenInPipMode \ WmTests:WindowOrganizerTests Change-Id: I09b43c362013b694d13566ece42a6f5be2225108 --- .../com/android/server/wm/TaskOrganizerController.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java index 037d582edc307..331f1242da1d0 100644 --- a/services/core/java/com/android/server/wm/TaskOrganizerController.java +++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java @@ -729,6 +729,16 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub { // Skip if task still not appeared. return; } + if (force && mPendingTaskEvents.isEmpty()) { + // There are task-info changed events do not result in + // - RootWindowContainer#performSurfacePlacementNoTrace OR + // - WindowAnimator#animate + // For instance, when an app requesting aspect ratio change when in PiP mode. + // To solve this, we directly dispatch the pending event if there are no events queued ( + // otherwise, all pending events should be dispatched on next drawn). + dispatchTaskInfoChanged(task, true /* force */); + return; + } // Defer task info reporting while layout is deferred. This is because layout defer // blocks tend to do lots of re-ordering which can mess up animations in receivers.