diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/SurfaceControl.java | 24 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 23 |
2 files changed, 47 insertions, 0 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java index 3b5270960c99..ab33feae7c56 100644 --- a/core/java/android/view/SurfaceControl.java +++ b/core/java/android/view/SurfaceControl.java @@ -515,6 +515,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 * meaningless for surfaces without an alpha channel. By default @@ -3266,6 +3275,21 @@ public final class SurfaceControl implements Parcelable { } /** + * 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 * for instance but will still draw every pixel opaque. diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c37120220f1a..810919710550 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -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() @@ -10399,6 +10405,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. * * @param regionCopy List of regions |
