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

Commit 5ed18499 authored by chaviw's avatar chaviw
Browse files

Remove overlay when DC is mirroring

Layers can be added to the overlay when DisplayContent is mirroring
which would add content that's not from the original display. This
change puts the overlay layer offscreen so the root layer will only have
the mirrored content below.

This fixes an issue where screen recording with MediaProjection would
show a black frame as the first frame. That frame was the RotationLayer
getting put on top since the system thinks it needs to freeze the
display.

Test: No longer black frame as first frame in recording
Test: SurfaceViewSyncTest
Fixes: 205235272
Change-Id: I96323db05221d02db4d7762c7f36d3af904ef49e
parent 336c20ea
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -6162,7 +6162,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                // Reparent the SurfaceControl of this DisplayContent to null, to prevent content
                // Reparent the SurfaceControl of this DisplayContent to null, to prevent content
                // being added to it. This ensures that no app launched explicitly on the
                // being added to it. This ensures that no app launched explicitly on the
                // VirtualDisplay will show up as part of the mirrored content.
                // VirtualDisplay will show up as part of the mirrored content.
                .reparent(mWindowingLayer, null);
                .reparent(mWindowingLayer, null)
                .reparent(mOverlayLayer, null);
        // Retrieve the size of the DisplayArea to mirror.
        // Retrieve the size of the DisplayArea to mirror.
        updateMirroredSurface(transaction, wc.getDisplayContent().getBounds(), surfaceSize);
        updateMirroredSurface(transaction, wc.getDisplayContent().getBounds(), surfaceSize);
        mTokenToMirror = tokenToMirror;
        mTokenToMirror = tokenToMirror;
@@ -6192,7 +6193,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
                    // Reparent the SurfaceControl of this DisplayContent back to mSurfaceControl,
                    // Reparent the SurfaceControl of this DisplayContent back to mSurfaceControl,
                    // to allow content to be added to it. This allows this DisplayContent to stop
                    // to allow content to be added to it. This allows this DisplayContent to stop
                    // mirroring and show content normally.
                    // mirroring and show content normally.
                    .reparent(mWindowingLayer, mSurfaceControl).apply();
                    .reparent(mWindowingLayer, mSurfaceControl)
                    .reparent(mOverlayLayer, mSurfaceControl)
                    .apply();
            // Stop mirroring by destroying the reference to the mirrored layer.
            // Stop mirroring by destroying the reference to the mirrored layer.
            mMirroredSurface = null;
            mMirroredSurface = null;
            // Do not un-set the token, in case content is removed and mirroring should begin again.
            // Do not un-set the token, in case content is removed and mirroring should begin again.