Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 355cc15c authored by Riddle Hsu's avatar Riddle Hsu
Browse files

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
parent 6cfafc4b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -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.
+6 −1
Original line number Diff line number Diff line
@@ -299,7 +299,12 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe
            }
        }
        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) {
            mSyncEngine.addToSyncSet(mSyncId, wc);
        }
        ChangeInfo info = mChanges.get(wc);
        if (info == null) {
            info = new ChangeInfo(wc);