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

Commit 7d4767ec authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

Merge "Do not postpone draw transaction" into tm-qpr-dev am: 061bca8a am: d82dc9f3

parents e1fc7f4a d82dc9f3
Loading
Loading
Loading
Loading
+1 −14
Original line number Diff line number Diff line
@@ -387,14 +387,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
    /** The last syncId associated with a BLAST prepareSync or 0 when no BLAST sync is active. */
    int mPrepareSyncSeqId = 0;

    /**
     * {@code true} when the client was still drawing for sync when the sync-set was finished or
     * cancelled. This can happen if the window goes away during a sync. In this situation we need
     * to make sure to still apply the postDrawTransaction when it finishes to prevent the client
     * from getting stuck in a bad state.
     */
    boolean mClientWasDrawingForSync = false;

    /**
     * Special mode that is intended only for the rounded corner overlay: during rotation
     * transition, we un-rotate the window token such that the window appears as it did before the
@@ -5977,9 +5969,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP

    @Override
    void finishSync(Transaction outMergedTransaction, boolean cancel) {
        if (mSyncState == SYNC_STATE_WAITING_FOR_DRAW && mRedrawForSyncReported) {
            mClientWasDrawingForSync = true;
        }
        mPrepareSyncSeqId = 0;
        if (cancel) {
            // This is leaving sync so any buffers left in the sync have a chance of
@@ -6047,9 +6036,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
            layoutNeeded = onSyncFinishedDrawing();
        }

        layoutNeeded |=
                mWinAnimator.finishDrawingLocked(postDrawTransaction, mClientWasDrawingForSync);
        mClientWasDrawingForSync = false;
        layoutNeeded |= mWinAnimator.finishDrawingLocked(postDrawTransaction);
        // We always want to force a traversal after a finish draw for blast sync.
        return !skipLayout && (hasSyncHandlers || layoutNeeded);
    }
+2 −26
Original line number Diff line number Diff line
@@ -151,17 +151,6 @@ class WindowStateAnimator {

    int mAttrType;

    /**
     * Handles surface changes synchronized to after the client has drawn the surface. This
     * transaction is currently used to reparent the old surface children to the new surface once
     * the client has completed drawing to the new surface.
     * This transaction is also used to merge transactions parceled in by the client. The client
     * uses the transaction to update the relative z of its children from the old parent surface
     * to the new parent surface once window manager reparents its children.
     */
    private final SurfaceControl.Transaction mPostDrawTransaction =
            new SurfaceControl.Transaction();

    WindowStateAnimator(final WindowState win) {
        final WindowManagerService service = win.mWmService;

@@ -217,8 +206,7 @@ class WindowStateAnimator {
        }
    }

    boolean finishDrawingLocked(SurfaceControl.Transaction postDrawTransaction,
            boolean forceApplyNow) {
    boolean finishDrawingLocked(SurfaceControl.Transaction postDrawTransaction) {
        final boolean startingWindow =
                mWin.mAttrs.type == WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
        if (startingWindow) {
@@ -240,14 +228,7 @@ class WindowStateAnimator {
        }

        if (postDrawTransaction != null) {
            // If there is no surface, the last draw was for the previous surface. We don't want to
            // wait until the new surface is shown and instead just apply the transaction right
            // away.
            if (mLastHidden && mDrawState != NO_SURFACE && !forceApplyNow) {
                mPostDrawTransaction.merge(postDrawTransaction);
            } else {
            mWin.getSyncTransaction().merge(postDrawTransaction);
            }
            layoutNeeded = true;
        }

@@ -543,7 +524,6 @@ class WindowStateAnimator {
        if (!shown)
            return false;

        t.merge(mPostDrawTransaction);
        return true;
    }

@@ -710,10 +690,6 @@ class WindowStateAnimator {
    }

    void destroySurface(SurfaceControl.Transaction t) {
        // Since the SurfaceControl is getting torn down, it's safe to just clean up any
        // pending transactions that were in mPostDrawTransaction, as well.
        t.merge(mPostDrawTransaction);

        try {
            if (mSurfaceController != null) {
                mSurfaceController.destroy(t);
+5 −0
Original line number Diff line number Diff line
@@ -552,7 +552,12 @@ public class WindowStateTests extends WindowTestsBase {
        win.applyWithNextDraw(t -> handledT[0] = t);
        assertTrue(win.useBLASTSync());
        final SurfaceControl.Transaction drawT = new StubTransaction();
        final SurfaceControl.Transaction currT = win.getSyncTransaction();
        clearInvocations(currT);
        win.mWinAnimator.mLastHidden = true;
        assertTrue(win.finishDrawing(drawT, Integer.MAX_VALUE));
        // The draw transaction should be merged to current transaction even if the state is hidden.
        verify(currT).merge(eq(drawT));
        assertEquals(drawT, handledT[0]);
        assertFalse(win.useBLASTSync());