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:
@@ -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)) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user