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

Commit 541be125 authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

Merge "Reduce unnecessary wallpaper target searches" into main

parents 52d7a6a2 3fb7a48b
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -5586,12 +5586,8 @@ final class ActivityRecord extends WindowToken {

    /** Updates draw state and shows drawn windows. */
    void commitFinishDrawing(SurfaceControl.Transaction t) {
        boolean committed = false;
        for (int i = mChildren.size() - 1; i >= 0; i--) {
            committed |= mChildren.get(i).commitFinishDrawing(t);
        }
        if (committed) {
            requestUpdateWallpaperIfNeeded();
            mChildren.get(i).commitFinishDrawing(t);
        }
    }

+8 −27
Original line number Diff line number Diff line
@@ -128,7 +128,6 @@ import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_KEEP_SCREE
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_ORIENTATION;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_SCREEN_ON;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_SLEEP_TOKEN;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WALLPAPER;
import static com.android.internal.protolog.WmProtoLogGroups.WM_SHOW_TRANSACTIONS;
import static com.android.internal.util.LatencyTracker.ACTION_ROTATE_SCREEN;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_ANIM;
@@ -591,8 +590,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp

    WallpaperController mWallpaperController;

    boolean mWallpaperMayChange = false;

    /**
     * A perf hint session which will boost the refresh rate for the display and change sf duration
     * to handle larger workloads.
@@ -1021,25 +1018,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                    mImeLayeringTarget);

    private final Consumer<WindowState> mApplySurfaceChangesTransaction = w -> {
        final WindowSurfacePlacer surfacePlacer = mWmService.mWindowPlacerLocked;
        final RootWindowContainer root = mWmService.mRoot;

        if (w.mHasSurface) {
            // Take care of the window being ready to display.
            final boolean committed = w.mWinAnimator.commitFinishDrawingLocked();
            if (isDefaultDisplay && committed) {
                if (w.hasWallpaper()) {
                    ProtoLog.v(WM_DEBUG_WALLPAPER,
                            "First draw done in potential wallpaper target %s", w);
                    mWallpaperMayChange = true;
                    pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
                    if (DEBUG_LAYOUT_REPEATS) {
                        surfacePlacer.debugLayoutRepeats(
                                "wallpaper and commitFinishDrawingLocked true",
                                pendingLayoutChanges);
                    }
                }
            }
            w.mWinAnimator.commitFinishDrawingLocked();
        }

        // Update effect.
@@ -1055,7 +1036,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                mTmpApplySurfaceChangesTransactionState.obscured = true;
            }

            final boolean displayHasContent = root.handleNotObscuredLocked(w,
            final boolean displayHasContent = mRootWindowContainer.handleNotObscuredLocked(w,
                    mTmpApplySurfaceChangesTransactionState.obscured,
                    mTmpApplySurfaceChangesTransactionState.syswin);

@@ -1093,16 +1074,16 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                mTmpApplySurfaceChangesTransactionState.disableHdrConversion
                        |= !(w.mAttrs.isHdrConversionEnabled());

                final int preferredModeId = getDisplayPolicy().getRefreshRatePolicy()
                        .getPreferredModeId(w);
                final var refreshRatePolicy = getDisplayPolicy().getRefreshRatePolicy();
                final int preferredModeId = refreshRatePolicy.getPreferredModeId(w);

                if (w.getWindowingMode() != WINDOWING_MODE_PINNED
                if (preferredModeId != 0
                        && mTmpApplySurfaceChangesTransactionState.preferredModeId == 0
                        && preferredModeId != 0) {
                        && !w.inPinnedWindowingMode()) {
                    mTmpApplySurfaceChangesTransactionState.preferredModeId = preferredModeId;
                }

                final float preferredMinRefreshRate = getDisplayPolicy().getRefreshRatePolicy()
                final float preferredMinRefreshRate = refreshRatePolicy
                        .getPreferredMinRefreshRate(w);
                if (mTmpApplySurfaceChangesTransactionState.preferredMinRefreshRate == 0
                        && preferredMinRefreshRate != 0) {
@@ -1110,7 +1091,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                            preferredMinRefreshRate;
                }

                final float preferredMaxRefreshRate = getDisplayPolicy().getRefreshRatePolicy()
                final float preferredMaxRefreshRate = refreshRatePolicy
                        .getPreferredMaxRefreshRate(w);
                if (mTmpApplySurfaceChangesTransactionState.preferredMaxRefreshRate == 0
                        && preferredMaxRefreshRate != 0) {
+0 −13
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_KEEP_SCREE
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_ORIENTATION;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_STATES;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_TASKS;
import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WALLPAPER;
import static com.android.internal.protolog.WmProtoLogGroups.WM_SHOW_SURFACE_ALLOC;
import static com.android.server.policy.PhoneWindowManager.SYSTEM_DIALOG_REASON_ASSIST;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_LAYOUT;
@@ -796,18 +795,6 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
        mWmService.mAtmService.mBackNavigationController
                .checkAnimationReady(defaultDisplay.mWallpaperController);

        for (int displayNdx = 0; displayNdx < mChildren.size(); ++displayNdx) {
            final DisplayContent displayContent = mChildren.get(displayNdx);
            if (displayContent.mWallpaperMayChange) {
                ProtoLog.v(WM_DEBUG_WALLPAPER, "Wallpaper may change!  Adjusting");
                displayContent.pendingLayoutChanges |= FINISH_LAYOUT_REDO_WALLPAPER;
                if (DEBUG_LAYOUT_REPEATS) {
                    surfacePlacer.debugLayoutRepeats("WallpaperMayChange",
                            displayContent.pendingLayoutChanges);
                }
            }
        }

        if (mWmService.mFocusMayChange) {
            mWmService.mFocusMayChange = false;
            mWmService.updateFocusedWindowLocked(UPDATE_FOCUS_PLACING_SURFACES,
+0 −27
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;

import static com.android.internal.protolog.WmProtoLogGroups.WM_DEBUG_WALLPAPER;
import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_SCREENSHOT;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_WALLPAPER;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
@@ -41,7 +40,6 @@ import android.os.Debug;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.SystemClock;
import android.util.ArraySet;
import android.util.MathUtils;
import android.util.Slog;
import android.util.SparseArray;
@@ -820,8 +818,6 @@ class WallpaperController {
    }

    void adjustWallpaperWindows() {
        mDisplayContent.mWallpaperMayChange = false;

        // First find top-most window that has asked to be on top of the wallpaper;
        // all wallpapers go behind it.
        findWallpaperTarget();
@@ -924,29 +920,6 @@ class WallpaperController {
        return transitionReady;
    }

    /**
     * Adjusts the wallpaper windows if the input display has a pending wallpaper layout or one of
     * the opening apps should be a wallpaper target.
     */
    void adjustWallpaperWindowsForAppTransitionIfNeeded(ArraySet<ActivityRecord> openingApps) {
        boolean adjust = false;
        if ((mDisplayContent.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0) {
            adjust = true;
        } else {
            for (int i = openingApps.size() - 1; i >= 0; --i) {
                final ActivityRecord activity = openingApps.valueAt(i);
                if (activity.windowsCanBeWallpaperTarget()) {
                    adjust = true;
                    break;
                }
            }
        }

        if (adjust) {
            adjustWallpaperWindows();
        }
    }

    void addWallpaperToken(WallpaperWindowToken token) {
        mWallpaperTokens.add(token);
    }
+3 −5
Original line number Diff line number Diff line
@@ -4277,14 +4277,13 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
    }

    /** Makes the surface of drawn window (COMMIT_DRAW_PENDING) to be visible. */
    boolean commitFinishDrawing(SurfaceControl.Transaction t) {
        boolean committed = mWinAnimator.commitFinishDrawingLocked();
        if (committed) {
    void commitFinishDrawing(SurfaceControl.Transaction t) {
        if (mWinAnimator.commitFinishDrawingLocked()) {
            // Ensure that the visibility of buffer layer is set.
            mWinAnimator.prepareSurfaceLocked(t);
        }
        for (int i = mChildren.size() - 1; i >= 0; i--) {
            committed |= mChildren.get(i).commitFinishDrawing(t);
            mChildren.get(i).commitFinishDrawing(t);
        }

        // When a new activity is showing, update dim in this transaction
@@ -4302,7 +4301,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        if (getAnimationLeash() != null) {
            t.merge(getSyncTransaction());
        }
        return committed;
    }

    // This must be called while inside a transaction.