Do not sync transient hide activities

This eliminates unnecessary redraw request to the targets of
recents animation.

Bug: 275508603
Test: Capture trace when swiping up, there should only one
      trace "finishDrawing" from the recents activity.

Change-Id: I694590ec619c00ef1b95314aeab045b385e4d124
This commit is contained in:
Riddle Hsu
2023-03-24 20:46:09 +08:00
parent ebba175110
commit a83ecae732
3 changed files with 5 additions and 10 deletions

View File

@@ -10522,11 +10522,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
@Override
boolean isSyncFinished() {
if (task != null && mTransitionController.isTransientHide(task)) {
// The activity keeps visibleRequested but may be hidden later, so no need to wait for
// it to be drawn.
return true;
}
if (!super.isSyncFinished()) return false;
if (mDisplayContent != null && mDisplayContent.mUnknownAppVisibilityController
.isVisibilityUnknown(this)) {

View File

@@ -511,8 +511,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
if (mParticipants.contains(wc)) return;
// Wallpaper is like in a static drawn state unless display may have changes, so exclude
// the case to reduce transition latency waiting for the unchanged wallpaper to redraw.
final boolean needSyncDraw = !isWallpaper(wc) || mParticipants.contains(wc.mDisplayContent);
if (needSyncDraw) {
final boolean needSync = (!isWallpaper(wc) || mParticipants.contains(wc.mDisplayContent))
// Transient-hide may be hidden later, so no need to request redraw.
&& !isInTransientHide(wc);
if (needSync) {
mSyncEngine.addToSyncSet(mSyncId, wc);
}
ChangeInfo info = mChanges.get(wc);

View File

@@ -1404,8 +1404,6 @@ public class TransitionTests extends WindowTestsBase {
// We are now going to simulate closing task1 to return back to (open) task2.
final Transition closeTransition = controller.createTransition(TRANSIT_CLOSE);
closeTransition.collectExistenceChange(task1);
closeTransition.collectExistenceChange(activity1);
closeTransition.collectExistenceChange(task2);
closeTransition.collectExistenceChange(activity2);
closeTransition.setTransientLaunch(activity2, task1);
@@ -1416,7 +1414,7 @@ public class TransitionTests extends WindowTestsBase {
assertNotNull(activity1ChangeInfo);
assertTrue(activity1ChangeInfo.hasChanged());
// No need to wait for the activity in transient hide task.
assertTrue(activity1.isSyncFinished());
assertEquals(WindowContainer.SYNC_STATE_NONE, activity1.mSyncState);
activity1.setVisibleRequested(false);
activity2.setVisibleRequested(true);