Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cba6a726 authored by Rob Carr's avatar Rob Carr
Browse files

BLASTSyncEngine: Skip invisible windows

They will never report drawing so they could stall
our sync until the timeout happens. We have this logic
in the WindowContainer implementation bug forgot it in
the WindowState.

Bug: 148871522
Bug: 139371701
Test: TaskOrganizerTests#testBLASTCallbackWithInvisibleWindow
Change-Id: Ibf6f720f91f1d832ea049bea8b47041e038eae5e
parent 25376514
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -5693,6 +5693,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;
+23 −0
Original line number Diff line number Diff line
@@ -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();

@@ -568,6 +569,28 @@ public class TaskOrganizerTests extends WindowTestsBase {
            .transactionReady(anyInt(), any());
    }

    @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);