Merge "Remove additional sf transaction when constructing a leash" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
1b2dfb04c8
@@ -322,6 +322,14 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
*/
|
*/
|
||||||
public static final int CURSOR_WINDOW = 0x00002000;
|
public static final int CURSOR_WINDOW = 0x00002000;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Surface creation flag: Indicates the effect layer will not have a color fill on
|
||||||
|
* creation.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public static final int NO_COLOR_FILL = 0x00004000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Surface creation flag: Creates a normal surface.
|
* Surface creation flag: Creates a normal surface.
|
||||||
* This is the default.
|
* This is the default.
|
||||||
@@ -577,7 +585,7 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"width and height must be positive or unset");
|
"width and height must be positive or unset");
|
||||||
}
|
}
|
||||||
if ((mWidth > 0 || mHeight > 0) && (isColorLayerSet() || isContainerLayerSet())) {
|
if ((mWidth > 0 || mHeight > 0) && (isEffectLayer() || isContainerLayer())) {
|
||||||
throw new IllegalStateException(
|
throw new IllegalStateException(
|
||||||
"Only buffer layers can set a valid buffer size.");
|
"Only buffer layers can set a valid buffer size.");
|
||||||
}
|
}
|
||||||
@@ -749,10 +757,27 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicate whether a 'ColorLayer' is to be constructed.
|
* Indicate whether an 'EffectLayer' is to be constructed.
|
||||||
*
|
*
|
||||||
* Color layers will not have an associated BufferQueue and will instead always render a
|
* An effect layer behaves like a container layer by default but it can support
|
||||||
* solid color (that is, solid before plane alpha). Currently that color is black.
|
* color fill, shadows and/or blur. These layers will not have an associated buffer.
|
||||||
|
* When created, this layer has no effects set and will be transparent but the caller
|
||||||
|
* can render an effect by calling:
|
||||||
|
* - {@link Transaction#setColor(SurfaceControl, float[])}
|
||||||
|
* - {@link Transaction#setBackgroundBlurRadius(SurfaceControl, int)}
|
||||||
|
* - {@link Transaction#setShadowRadius(SurfaceControl, float)}
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public Builder setEffectLayer() {
|
||||||
|
mFlags |= NO_COLOR_FILL;
|
||||||
|
unsetBufferSize();
|
||||||
|
return setFlags(FX_SURFACE_EFFECT, FX_SURFACE_MASK);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience function to create an effect layer with a default color fill
|
||||||
|
* applied to it. Currently that color is black.
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -761,7 +786,7 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
return setFlags(FX_SURFACE_EFFECT, FX_SURFACE_MASK);
|
return setFlags(FX_SURFACE_EFFECT, FX_SURFACE_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isColorLayerSet() {
|
private boolean isEffectLayer() {
|
||||||
return (mFlags & FX_SURFACE_EFFECT) == FX_SURFACE_EFFECT;
|
return (mFlags & FX_SURFACE_EFFECT) == FX_SURFACE_EFFECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -786,7 +811,7 @@ public final class SurfaceControl implements Parcelable {
|
|||||||
return setFlags(FX_SURFACE_CONTAINER, FX_SURFACE_MASK);
|
return setFlags(FX_SURFACE_CONTAINER, FX_SURFACE_MASK);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isContainerLayerSet() {
|
private boolean isContainerLayer() {
|
||||||
return (mFlags & FX_SURFACE_CONTAINER) == FX_SURFACE_CONTAINER;
|
return (mFlags & FX_SURFACE_CONTAINER) == FX_SURFACE_CONTAINER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -388,18 +388,15 @@ class SurfaceAnimator {
|
|||||||
final SurfaceControl.Builder builder = animatable.makeAnimationLeash()
|
final SurfaceControl.Builder builder = animatable.makeAnimationLeash()
|
||||||
.setParent(animatable.getAnimationLeashParent())
|
.setParent(animatable.getAnimationLeashParent())
|
||||||
.setName(surface + " - animation-leash")
|
.setName(surface + " - animation-leash")
|
||||||
.setColorLayer();
|
|
||||||
final SurfaceControl leash = builder.build();
|
|
||||||
if (!hidden) {
|
|
||||||
// TODO(b/151665759) Defer reparent calls
|
// TODO(b/151665759) Defer reparent calls
|
||||||
// We want the leash to be visible immediately but we want to set the effects on
|
// We want the leash to be visible immediately because the transaction which shows
|
||||||
// the layer. Since the transaction used in this function may be deferred, we apply
|
// the leash may be deferred but the reparent will not. This will cause the leashed
|
||||||
// another transaction immediately with the correct visibility and effects.
|
// surface to be invisible until the deferred transaction is applied. If this
|
||||||
// If this doesn't work, you will can see the 2/3 button nav bar flicker during
|
// doesn't work, you will can see the 2/3 button nav bar flicker during seamless
|
||||||
// seamless rotation.
|
// rotation.
|
||||||
transactionFactory.get().unsetColor(leash).show(leash).apply();
|
.setHidden(hidden)
|
||||||
}
|
.setEffectLayer();
|
||||||
t.unsetColor(leash);
|
final SurfaceControl leash = builder.build();
|
||||||
t.setWindowCrop(leash, width, height);
|
t.setWindowCrop(leash, width, height);
|
||||||
t.setPosition(leash, x, y);
|
t.setPosition(leash, x, y);
|
||||||
t.show(leash);
|
t.show(leash);
|
||||||
|
|||||||
@@ -3202,15 +3202,9 @@ class Task extends WindowContainer<WindowContainer> {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
void onSurfaceShown(SurfaceControl.Transaction t) {
|
|
||||||
super.onSurfaceShown(t);
|
|
||||||
t.unsetColor(mSurfaceControl);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void setInitialSurfaceControlProperties(SurfaceControl.Builder b) {
|
void setInitialSurfaceControlProperties(SurfaceControl.Builder b) {
|
||||||
b.setColorLayer().setMetadata(METADATA_TASK_ID, mTaskId);
|
b.setEffectLayer().setMetadata(METADATA_TASK_ID, mTaskId);
|
||||||
super.setInitialSurfaceControlProperties(b);
|
super.setInitialSurfaceControlProperties(b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user