Loading services/core/java/com/android/server/wm/WindowContainer.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java +32 −0 Original line number Original line Diff line number Diff line Loading @@ -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 = Loading @@ -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); Loading Loading
services/core/java/com/android/server/wm/WindowContainer.java +6 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading
services/tests/wmtests/src/com/android/server/wm/TaskOrganizerTests.java +32 −0 Original line number Original line Diff line number Diff line Loading @@ -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 = Loading @@ -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); Loading