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

Commit 2f0567b0 authored by chaviw's avatar chaviw
Browse files

Use self's pendingTransaction object when setting position.

When iterating through each child to set its updated position,
the transaction object was passed to the children. This could allow
multiple transactions to update the same property on the same child.
If that occurs, then the merge does not guarantee the same order.
This could cause earlier transactions to overwrite later ones. Instead,
have each WC update its own transaction object.

Change-Id: Ie1bb758e4efd74fa012c7ec945d9c1c586162df4
Fixes: 72198558
Fixes: 72463091
Test: Issues from bugs no longer occur.
Test: go/wm-smoke-auto
parent cf40a9ab
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -736,15 +736,11 @@ public class TaskStack extends WindowContainer<Task> implements
    }

    private void updateSurfaceBounds() {
        updateSurfaceBounds(getPendingTransaction());
        updateSurfaceSize(getPendingTransaction());
        updateSurfacePosition();
        scheduleAnimation();
    }

    void updateSurfaceBounds(SurfaceControl.Transaction transaction) {
        updateSurfaceSize(transaction);
        updateSurfacePosition(transaction);
    }

    private void updateSurfaceSize(SurfaceControl.Transaction transaction) {
        if (mSurfaceControl == null) {
            return;
+3 −7
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
    @Override
    public void onConfigurationChanged(Configuration newParentConfig) {
        super.onConfigurationChanged(newParentConfig);
        updateSurfacePosition(getPendingTransaction());
        updateSurfacePosition();
        scheduleAnimation();
    }

@@ -1204,7 +1204,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
        }
    }

    void updateSurfacePosition(SurfaceControl.Transaction transaction) {
    void updateSurfacePosition() {
        if (mSurfaceControl == null) {
            return;
        }
@@ -1214,12 +1214,8 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
            return;
        }

        transaction.setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y);
        getPendingTransaction().setPosition(mSurfaceControl, mTmpPos.x, mTmpPos.y);
        mLastSurfacePosition.set(mTmpPos.x, mTmpPos.y);

        for (int i = mChildren.size() - 1; i >= 0; i--) {
            mChildren.get(i).updateSurfacePosition(transaction);
        }
    }

    void getRelativePosition(Point outPos) {
+6 −2
Original line number Diff line number Diff line
@@ -4519,7 +4519,7 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
        if (dimmer != null) {
            applyDims(dimmer);
        }
        updateSurfacePosition(mPendingTransaction);
        updateSurfacePosition();

        mWinAnimator.prepareSurfaceLocked(true);
        super.prepareSurfaces();
@@ -4541,7 +4541,11 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP
    }

    @Override
    void updateSurfacePosition(Transaction t) {
    void updateSurfacePosition() {
        updateSurfacePosition(getPendingTransaction());
    }

    private void updateSurfacePosition(Transaction t) {
        if (mSurfaceControl == null) {
            return;
        }