Reduce unnecessary redraw of wallpaper with shell transition

Wallpaper only needs to draw once in most of cases. It usually
only changes visibility, so the redraw doesn't make any effect
but the latency.

This may reduce ~20ms latency while swiping up to recents with
shell transition.

Also limit adjustWallpaperWindows for shell rotation in
ensureActivitiesVisible, because only shell rotation needs to
capture a closing state of wallpaper.

Bug: 231435331
Test: adb shell setprop persist.wm.debug.shell_transit 1; reboot
      adb shell wm logging enable-text WM_DEBUG_DRAW
      Swipe to recents and check there is no log "finishDrawing"
      of wallpaper.
Change-Id: Iee1bed1ebee986c096f930759571eb147abad56d
This commit is contained in:
Riddle Hsu
2022-05-16 20:34:16 +08:00
parent 6cfafc4b2b
commit 355cc15c17
2 changed files with 8 additions and 2 deletions

View File

@@ -6080,7 +6080,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
rootTask.ensureActivitiesVisible(starting, configChanges, preserveWindows,
notifyClients);
});
if (mTransitionController.isCollecting()
if (mTransitionController.useShellTransitionsRotation()
&& mTransitionController.isCollecting()
&& mWallpaperController.getWallpaperTarget() != null) {
// Also update wallpapers so that their requestedVisibility immediately reflects
// the changes to activity visibility.

View File

@@ -299,7 +299,12 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
}
}
if (mParticipants.contains(wc)) return;
mSyncEngine.addToSyncSet(mSyncId, wc);
// 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) {
mSyncEngine.addToSyncSet(mSyncId, wc);
}
ChangeInfo info = mChanges.get(wc);
if (info == null) {
info = new ChangeInfo(wc);