Loading core/java/android/view/SurfaceControl.java +24 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading core/java/android/view/ViewRootImpl.java +23 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() Loading Loading @@ -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. * Loading Loading
core/java/android/view/SurfaceControl.java +24 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading
core/java/android/view/ViewRootImpl.java +23 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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() Loading Loading @@ -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. * Loading