Merge "Wait for relaunching activity to finish sync" into udc-dev am: 94b48e8c6c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23288036

Change-Id: I60e75b9c2f4fa2949c035aa7632a961656ddf9d9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Riddle Hsu
2023-05-18 07:23:01 +00:00
committed by Automerger Merge Worker
2 changed files with 18 additions and 0 deletions

View File

@@ -10608,6 +10608,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return false;
}
if (!isVisibleRequested()) return true;
if (mPendingRelaunchCount > 0) return false;
// Wait for attach. That is the earliest time where we know if there will be an associated
// display rotation. If we don't wait, the starting-window can finishDrawing first and
// cause the display rotation to end-up in a following transition.

View File

@@ -18,6 +18,7 @@ package com.android.server.wm;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.times;
@@ -119,6 +120,22 @@ public class SyncEngineTests extends WindowTestsBase {
assertTrue(mockWC.onSyncFinishedDrawing());
bse.onSurfacePlacement();
verify(listener, times(1)).onTransactionReady(eq(id), notNull());
// The sync is not finished for a relaunching activity.
id = startSyncSet(bse, listener);
final ActivityRecord r = new ActivityBuilder(mAtm).setCreateTask(true).build();
final WindowState w = mock(WindowState.class);
doReturn(true).when(w).isVisibleRequested();
doReturn(true).when(w).fillsParent();
doReturn(true).when(w).isSyncFinished(any());
r.mChildren.add(w);
bse.addToSyncSet(id, r);
r.onSyncFinishedDrawing();
assertTrue(r.isSyncFinished(r.getSyncGroup()));
r.startRelaunching();
assertFalse(r.isSyncFinished(r.getSyncGroup()));
r.finishRelaunching();
assertTrue(r.isSyncFinished(r.getSyncGroup()));
}
@Test