Merge "Reland "Add/plumb SurfaceControl.DISPLAY_DECORATION""

This commit is contained in:
Leon Scroggins 2021-12-29 13:01:54 +00:00 committed by Android (Google) Code Review
commit 3fccaab880
2 changed files with 47 additions and 0 deletions

View File

@ -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

View File

@ -493,6 +493,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
@ -2853,6 +2856,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()
@ -10439,6 +10445,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.
*