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

Commit 57ad5d9e authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Automerger Merge Worker
Browse files

Merge "Reparent bounds layer if surface was replaced." into rvc-dev am:...

Merge "Reparent bounds layer if surface was replaced." into rvc-dev am: ab3d80c9 am: fa48a156 am: 75a12e74 am: 04002dfd

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12123266

Change-Id: Ic583c118d6b9e7b8aa8498482b39f3f2d3dfbb61
parents 06a35c34 04002dfd
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -1816,13 +1816,19 @@ public final class ViewRootImpl implements ViewParent,
    /**
     * Called after window layout to update the bounds surface. If the surface insets have changed
     * or the surface has resized, update the bounds surface.
     *
     * @param shouldReparent Whether it should reparent the bounds layer to the main SurfaceControl.
     */
    private void updateBoundsLayer() {
    private void updateBoundsLayer(boolean shouldReparent) {
        if (mBoundsLayer != null) {
            setBoundsLayerCrop();
            mTransaction.deferTransactionUntil(mBoundsLayer,
                    getRenderSurfaceControl(), mSurface.getNextFrameNumber())
                    .apply();
            mTransaction.deferTransactionUntil(mBoundsLayer, getRenderSurfaceControl(),
                    mSurface.getNextFrameNumber());

            if (shouldReparent) {
                mTransaction.reparent(mBoundsLayer, getRenderSurfaceControl());
            }
            mTransaction.apply();
        }
    }

@@ -2904,7 +2910,16 @@ public final class ViewRootImpl implements ViewParent,
        }

        if (surfaceSizeChanged || surfaceReplaced || surfaceCreated || windowAttributesChanged) {
            updateBoundsLayer();
            // If the surface has been replaced, there's a chance the bounds layer is not parented
            // to the new layer. When updating bounds layer, also reparent to the main VRI
            // SurfaceControl to ensure it's correctly placed in the hierarchy.
            //
            // This needs to be done on the client side since WMS won't reparent the children to the
            // new surface if it thinks the app is closing. WMS gets the signal that the app is
            // stopping, but on the client side it doesn't get stopped since it's restarted quick
            // enough. WMS doesn't want to keep around old children since they will leak when the
            // client creates new children.
            updateBoundsLayer(surfaceReplaced);
        }

        final boolean didLayout = layoutRequested && (!mStopped || mReportNextDraw);