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

Commit 13f73a51 authored by Chris Li's avatar Chris Li Committed by Android (Google) Code Review
Browse files

Merge "Convert WindowState report fields to mLastReported" into main

parents 2767bf3c c2c36eec
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -56,7 +56,16 @@ public class ClientWindowFrames implements Parcelable {
    public ClientWindowFrames() {
    }

    public ClientWindowFrames(ClientWindowFrames other) {
    public ClientWindowFrames(@NonNull ClientWindowFrames other) {
        setTo(other);
    }

    private ClientWindowFrames(@NonNull Parcel in) {
        readFromParcel(in);
    }

    /** Updates the current frames to the given frames. */
    public void setTo(@NonNull ClientWindowFrames other) {
        frame.set(other.frame);
        displayFrame.set(other.displayFrame);
        parentFrame.set(other.parentFrame);
@@ -67,10 +76,6 @@ public class ClientWindowFrames implements Parcelable {
        compatScale = other.compatScale;
    }

    private ClientWindowFrames(Parcel in) {
        readFromParcel(in);
    }

    /** Needed for AIDL out parameters. */
    public void readFromParcel(Parcel in) {
        frame.readFromParcel(in);
+3 −5
Original line number Diff line number Diff line
@@ -1927,7 +1927,7 @@ public class WindowManagerService extends IWindowManager.Stub
            displayContent.getInsetsStateController().updateAboveInsetsState(
                    false /* notifyInsetsChanged */);

            outInsetsState.set(win.getCompatInsetsState(), true /* copySources */);
            win.fillInsetsState(outInsetsState, true /* copySources */);
            getInsetsSourceControls(win, outActiveControls);

            if (win.mLayoutAttached) {
@@ -2680,7 +2680,7 @@ public class WindowManagerService extends IWindowManager.Stub
            }

            if (outInsetsState != null) {
                outInsetsState.set(win.getCompatInsetsState(), true /* copySources */);
                win.fillInsetsState(outInsetsState, true /* copySources */);
            }

            ProtoLog.v(WM_DEBUG_FOCUS, "Relayout of %s: focusMayChange=%b",
@@ -2743,12 +2743,10 @@ public class WindowManagerService extends IWindowManager.Stub
    }

    private void getInsetsSourceControls(WindowState win, InsetsSourceControl.Array outArray) {
        final InsetsSourceControl[] controls =
                win.getDisplayContent().getInsetsStateController().getControlsForDispatch(win);
        // We will leave the critical section before returning the leash to the client,
        // so we need to copy the leash to prevent others release the one that we are
        // about to return.
        outArray.set(controls, true /* copyControls */);
        win.fillInsetsSourceControls(outArray, true /* copyControls */);
        // This source control is an extra copy if the client is not local. By setting
        // PARCELABLE_WRITE_RETURN_VALUE, the leash will be released at the end of
        // SurfaceControl.writeToParcel.
+36 −16
Original line number Diff line number Diff line
@@ -434,7 +434,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
    /** @see #isLastConfigReportedToClient() */
    private boolean mLastConfigReportedToClient;

    // TODO(b/339380439): Ensure to use the same object for IWindowSession#relayout
    private final ClientWindowFrames mLastReportedFrames = new ClientWindowFrames();

    private final InsetsState mLastReportedInsetsState = new InsetsState();

    private final InsetsSourceControl.Array mLastReportedActiveControls =
            new InsetsSourceControl.Array();

@@ -495,8 +498,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

    private final WindowFrames mWindowFrames = new WindowFrames();

    private final ClientWindowFrames mClientWindowFrames = new ClientWindowFrames();

    /**
     * List of rects where system gestures should be ignored.
     *
@@ -3650,8 +3651,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
                outFrames.attachedFrame.scale(mInvGlobalScale);
            }
        }

        outFrames.compatScale = getCompatScaleForClient();
        if (mLastReportedFrames != outFrames) {
            mLastReportedFrames.setTo(outFrames);
        }

        // Note: in the cases where the window is tied to an activity, we should not send a
        // configuration update when the window has requested to be hidden. Doing so can lead to
@@ -3678,6 +3681,25 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        mLastConfigReportedToClient = true;
    }

    void fillInsetsState(@NonNull InsetsState outInsetsState, boolean copySources) {
        outInsetsState.set(getCompatInsetsState(), copySources);
        if (outInsetsState != mLastReportedInsetsState) {
            // No need to copy for the recorded.
            mLastReportedInsetsState.set(outInsetsState, false /* copySources */);
        }
    }

    void fillInsetsSourceControls(@NonNull InsetsSourceControl.Array outArray,
            boolean copyControls) {
        final InsetsSourceControl[] controls =
                getDisplayContent().getInsetsStateController().getControlsForDispatch(this);
        outArray.set(controls, copyControls);
        if (outArray != mLastReportedActiveControls) {
            // No need to copy for the recorded.
            mLastReportedActiveControls.setTo(outArray, false /* copyControls */);
        }
    }

    void reportResized() {
        // If the activity is scheduled to relaunch, skip sending the resized to ViewRootImpl now
        // since it will be destroyed anyway. This also prevents the client from receiving
@@ -3712,9 +3734,10 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

        final int prevRotation = mLastReportedConfiguration
                .getMergedConfiguration().windowConfiguration.getRotation();
        fillClientWindowFramesAndConfiguration(mClientWindowFrames, mLastReportedConfiguration,
        fillClientWindowFramesAndConfiguration(mLastReportedFrames, mLastReportedConfiguration,
                mLastReportedActivityWindowInfo, true /* useLatestConfig */,
                false /* relayoutVisible */);
        fillInsetsState(mLastReportedInsetsState, false /* copySources */);
        final boolean syncRedraw = shouldSendRedrawForSync();
        final boolean syncWithBuffers = syncRedraw && shouldSyncWithBuffers();
        final boolean reportDraw = syncRedraw || drawPending;
@@ -3734,8 +3757,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

        if (Flags.bundleClientTransactionFlag()) {
            getProcess().scheduleClientTransactionItem(
                    WindowStateResizeItem.obtain(mClient, mClientWindowFrames, reportDraw,
                            mLastReportedConfiguration, getCompatInsetsState(), forceRelayout,
                    WindowStateResizeItem.obtain(mClient, mLastReportedFrames, reportDraw,
                            mLastReportedConfiguration, mLastReportedInsetsState, forceRelayout,
                            alwaysConsumeSystemBars, displayId,
                            syncWithBuffers ? mSyncSeqId : -1, isDragResizing,
                            mLastReportedActivityWindowInfo));
@@ -3743,8 +3766,8 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        } else {
            // TODO(b/301870955): cleanup after launch
            try {
                mClient.resized(mClientWindowFrames, reportDraw, mLastReportedConfiguration,
                        getCompatInsetsState(), forceRelayout, alwaysConsumeSystemBars, displayId,
                mClient.resized(mLastReportedFrames, reportDraw, mLastReportedConfiguration,
                        mLastReportedInsetsState, forceRelayout, alwaysConsumeSystemBars, displayId,
                        syncWithBuffers ? mSyncSeqId : -1, isDragResizing,
                        mLastReportedActivityWindowInfo);
                onResizePostDispatched(drawPending, prevRotation, displayId);
@@ -3817,17 +3840,14 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        if (mRemoved) {
            return;
        }
        final InsetsStateController stateController =
                getDisplayContent().getInsetsStateController();
        final InsetsState insetsState = getCompatInsetsState();
        mLastReportedActiveControls.set(stateController.getControlsForDispatch(this),
                false /* copyControls */);
        fillInsetsState(mLastReportedInsetsState, false /* copySources */);
        fillInsetsSourceControls(mLastReportedActiveControls, false /* copyControls */);
        if (Flags.insetsControlChangedItem()) {
            getProcess().scheduleClientTransactionItem(WindowStateInsetsControlChangeItem.obtain(
                    mClient, insetsState, mLastReportedActiveControls));
                    mClient, mLastReportedInsetsState, mLastReportedActiveControls));
        } else {
            try {
                mClient.insetsControlChanged(insetsState, mLastReportedActiveControls);
                mClient.insetsControlChanged(mLastReportedInsetsState, mLastReportedActiveControls);
            } catch (RemoteException e) {
                Slog.w(TAG, "Failed to deliver inset control state change to w=" + this, e);
            }