diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/WindowState.java | 3 | ||||
| -rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java | 23 |
2 files changed, 26 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 45e3690e1d11..36175705b848 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -5696,6 +5696,9 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP @Override boolean prepareForSync(BLASTSyncEngine.TransactionReadyListener waitingListener, int waitingId) { + if (!isVisible()) { + return false; + } mWaitingListener = waitingListener; mWaitingSyncId = waitingId; mUsingBLASTSyncTransaction = true; diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java index 5007e3afd94f..bc81d5e7c807 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java @@ -551,6 +551,7 @@ public class TaskOrganizerTests extends WindowTestsBase { final Task task = createTaskInStack(stackController1, 0 /* userId */); final ITaskOrganizer organizer = registerMockOrganizer(); final WindowState w = createAppWindow(task, TYPE_APPLICATION, "Enlightened Window"); + makeWindowVisible(w); BLASTSyncEngine bse = new BLASTSyncEngine(); @@ -569,6 +570,28 @@ public class TaskOrganizerTests extends WindowTestsBase { } @Test + public void testBLASTCallbackWithInvisibleWindow() { + final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent); + final Task task = createTaskInStack(stackController1, 0 /* userId */); + final ITaskOrganizer organizer = registerMockOrganizer(); + final WindowState w = createAppWindow(task, TYPE_APPLICATION, "Enlightened Window"); + + BLASTSyncEngine bse = new BLASTSyncEngine(); + + BLASTSyncEngine.TransactionReadyListener transactionListener = + mock(BLASTSyncEngine.TransactionReadyListener.class); + + int id = bse.startSyncSet(transactionListener); + bse.addToSyncSet(id, task); + bse.setReady(id); + + // Since the window was invisible, the Task had no visible leaves and the sync should + // complete as soon as we call setReady. + verify(transactionListener) + .transactionReady(anyInt(), any()); + } + + @Test public void testBLASTCallbackWithChildWindow() { final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent); final Task task = createTaskInStack(stackController1, 0 /* userId */); |