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

Change-Id: Ia627bb5bb2bc35531833afafddb18412408200e8
This commit is contained in:
TreeHugger Robot
2020-03-18 18:12:55 +00:00
committed by Automerger Merge Worker
2 changed files with 38 additions and 3 deletions

View File

@@ -2476,9 +2476,12 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
boolean prepareForSync(BLASTSyncEngine.TransactionReadyListener waitingListener,
int waitingId) {
boolean willSync = false;
if (!isVisible()) {
return willSync;
boolean willSync = true;
// 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;

View File

@@ -550,6 +550,9 @@ public class TaskOrganizerTests extends WindowTestsBase {
final Task task = createTaskInStack(stackController1, 0 /* userId */);
final ITaskOrganizer organizer = registerMockOrganizer();
spyOn(task);
doReturn(true).when(task).isVisible();
BLASTSyncEngine bse = new BLASTSyncEngine();
BLASTSyncEngine.TransactionReadyListener transactionListener =
@@ -563,6 +566,35 @@ public class TaskOrganizerTests extends WindowTestsBase {
.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
public void testBLASTCallbackWithWindow() {
final ActivityStack stackController1 = createTaskStackOnDisplay(mDisplayContent);