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

Commit 3a18890e authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "BLASTSyncEngine: Disable overlapping calls to a single container" into rvc-dev

parents 2b004fa8 8ccc4fcf
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -2476,9 +2476,12 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<


    boolean prepareForSync(BLASTSyncEngine.TransactionReadyListener waitingListener,
    boolean prepareForSync(BLASTSyncEngine.TransactionReadyListener waitingListener,
            int waitingId) {
            int waitingId) {
        boolean willSync = false;
        boolean willSync = true;
        if (!isVisible()) {

            return willSync;
        // If we are invisible, no need to sync, likewise if we are already engaged in a sync,
        // we can't support overlapping syncs on a single container yet.
        if (!isVisible() || mWaitingListener != null) {
            return false;
        }
        }
        mUsingBLASTSyncTransaction = true;
        mUsingBLASTSyncTransaction = true;


+32 −0
Original line number Original line Diff line number Diff line
@@ -550,6 +550,9 @@ public class TaskOrganizerTests extends WindowTestsBase {
        final Task task = createTaskInStack(stackController1, 0 /* userId */);
        final Task task = createTaskInStack(stackController1, 0 /* userId */);
        final ITaskOrganizer organizer = registerMockOrganizer();
        final ITaskOrganizer organizer = registerMockOrganizer();


        spyOn(task);
        doReturn(true).when(task).isVisible();

        BLASTSyncEngine bse = new BLASTSyncEngine();
        BLASTSyncEngine bse = new BLASTSyncEngine();


        BLASTSyncEngine.TransactionReadyListener transactionListener =
        BLASTSyncEngine.TransactionReadyListener transactionListener =
@@ -563,6 +566,35 @@ public class TaskOrganizerTests extends WindowTestsBase {
            .transactionReady(anyInt(), any());
            .transactionReady(anyInt(), any());
    }
    }


    @Test
    public void testOverlappingBLASTCallback() throws RemoteException {
        final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent);
        final Task task = createTaskInStack(stackController1, 0 /* userId */);
        final ITaskOrganizer organizer = registerMockOrganizer();

        spyOn(task);
        doReturn(true).when(task).isVisible();
        final WindowState w = createAppWindow(task, TYPE_APPLICATION, "Enlightened Window");
        makeWindowVisible(w);

        BLASTSyncEngine bse = new BLASTSyncEngine();

        BLASTSyncEngine.TransactionReadyListener transactionListener =
            mock(BLASTSyncEngine.TransactionReadyListener.class);

        int id = bse.startSyncSet(transactionListener);
        assertEquals(true, bse.addToSyncSet(id, task));
        bse.setReady(id);

        int id2 = bse.startSyncSet(transactionListener);
        // We should be rejected from the second sync since we are already
        // in one.
        assertEquals(false, bse.addToSyncSet(id2, task));
        w.finishDrawing(null);
        assertEquals(true, bse.addToSyncSet(id2, task));
        bse.setReady(id2);
    }

    @Test
    @Test
    public void testBLASTCallbackWithWindow() {
    public void testBLASTCallbackWithWindow() {
        final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent);
        final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent);