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

Commit cf8a6227 authored by Leon Scroggins's avatar Leon Scroggins Committed by Android (Google) Code Review
Browse files

Merge "Add/plumb SurfaceControl.DISPLAY_DECORATION"

parents 9710d3a2 b32fc559
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -514,6 +514,15 @@ public final class SurfaceControl implements Parcelable {
     */
    public static final int ENABLE_BACKPRESSURE = 0x00000100;

    /**
     * Buffers from this SurfaceControl should be considered display decorations.
     *
     * If the hardware has optimizations for display decorations (e.g. rounded corners, camera
     * cutouts, etc), it should use them for this layer.
     * @hide
     */
    public static final int DISPLAY_DECORATION = 0x00000200;

    /**
     * Surface creation flag: Creates a surface where color components are interpreted
     * as "non pre-multiplied" by their alpha channel. Of course this flag is
@@ -3265,6 +3274,21 @@ public final class SurfaceControl implements Parcelable {
            return this;
        }

        /**
         * Sets whether the surface should take advantage of display decoration optimizations.
         * @hide
         */
        public Transaction setDisplayDecoration(SurfaceControl sc, boolean displayDecoration) {
            checkPreconditions(sc);
            if (displayDecoration) {
                nativeSetFlags(mNativeObject, sc.mNativeObject, DISPLAY_DECORATION,
                        DISPLAY_DECORATION);
            } else {
                nativeSetFlags(mNativeObject, sc.mNativeObject, 0, DISPLAY_DECORATION);
            }
            return this;
        }

        /**
         * Indicates whether the surface must be considered opaque, even if its pixel format is
         * set to translucent. This can be useful if an application needs full RGBA 8888 support
+23 −0
Original line number Diff line number Diff line
@@ -491,6 +491,9 @@ public final class ViewRootImpl implements ViewParent,
    protected final ViewFrameInfo mViewFrameInfo = new ViewFrameInfo();
    private final InputEventAssigner mInputEventAssigner = new InputEventAssigner();

    // Whether to draw this surface as DISPLAY_DECORATION.
    boolean mDisplayDecorationCached = false;

    /**
     * Update the Choreographer's FrameInfo object with the timing information for the current
     * ViewRootImpl instance. Erase the data in the current ViewFrameInfo to prepare for the next
@@ -2842,6 +2845,9 @@ public final class ViewRootImpl implements ViewParent,
                if (mSurfaceControl.isValid()) {
                    updateOpacity(mWindowAttributes, dragResizing,
                            surfaceControlChanged /*forceUpdate */);
                    if (surfaceControlChanged) {
                        updateDisplayDecoration();
                    }
                }

                if (DEBUG_LAYOUT) Log.v(mTag, "relayout: frame=" + frame.toShortString()
@@ -10398,6 +10404,23 @@ public final class ViewRootImpl implements ViewParent,
        }
    }

    /**
     * @hide
     */
    public void setDisplayDecoration(boolean displayDecoration) {
        if (displayDecoration == mDisplayDecorationCached) return;

        mDisplayDecorationCached = displayDecoration;

        if (mSurfaceControl.isValid()) {
            updateDisplayDecoration();
        }
    }

    private void updateDisplayDecoration() {
        mTransaction.setDisplayDecoration(mSurfaceControl, mDisplayDecorationCached).apply();
    }

    /**
     * Sends a list of blur regions to SurfaceFlinger, tagged with a frame.
     *