summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/SurfaceControl.java41
-rw-r--r--services/core/java/com/android/server/wm/AppWindowThumbnail.java1
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java5
-rw-r--r--services/core/java/com/android/server/wm/WindowSurfaceController.java1
4 files changed, 44 insertions, 4 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 2e98d033fa7f..1dbe166899dc 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -268,6 +268,13 @@ public class SurfaceControl implements Parcelable {
public static final int FX_SURFACE_DIM = 0x00020000;
/**
+ * Surface creation flag: Creates a container surface.
+ * This surface will have no buffers and will only be used
+ * as a container for other surfaces, or for its InputInfo.
+ */
+ public static final int FX_SURFACE_CONTAINER = 0x00080000;
+
+ /**
* Mask used for FX values above.
*
*/
@@ -523,14 +530,39 @@ public class SurfaceControl implements Parcelable {
*/
public Builder setColorLayer(boolean isColorLayer) {
if (isColorLayer) {
- mFlags |= FX_SURFACE_DIM;
+ setFlags(FX_SURFACE_DIM, FX_SURFACE_MASK);
+ } else {
+ setBufferLayer();
+ }
+ return this;
+ }
+
+ /**
+ * Indicates whether a 'ContainerLayer' is to be constructed.
+ *
+ * Container layers will not be rendered in any fashion and instead are used
+ * as a parent of renderable layers.
+ *
+ * @param isContainerLayer Whether to create a container layer.
+ */
+ public Builder setContainerLayer(boolean isContainerLayer) {
+ if (isContainerLayer) {
+ setFlags(FX_SURFACE_CONTAINER, FX_SURFACE_MASK);
} else {
- mFlags &= ~FX_SURFACE_DIM;
+ setBufferLayer();
}
return this;
}
/**
+ * Indicates whether a buffer layer is to be constructed.
+ *
+ */
+ public Builder setBufferLayer() {
+ return setFlags(FX_SURFACE_NORMAL, FX_SURFACE_MASK);
+ }
+
+ /**
* Set 'Surface creation flags' such as {@link HIDDEN}, {@link SECURE}.
*
* TODO: Finish conversion to individual builder methods?
@@ -540,6 +572,11 @@ public class SurfaceControl implements Parcelable {
mFlags = flags;
return this;
}
+
+ private Builder setFlags(int flags, int mask) {
+ mFlags = (mFlags & ~mask) | flags;
+ return this;
+ }
}
/**
diff --git a/services/core/java/com/android/server/wm/AppWindowThumbnail.java b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
index ad92f81f4dde..bef974ae1081 100644
--- a/services/core/java/com/android/server/wm/AppWindowThumbnail.java
+++ b/services/core/java/com/android/server/wm/AppWindowThumbnail.java
@@ -69,6 +69,7 @@ class AppWindowThumbnail implements Animatable {
.setFormat(PixelFormat.TRANSLUCENT)
.setMetadata(appToken.windowType,
window != null ? window.mOwnerUid : Binder.getCallingUid())
+ .setBufferLayer()
.build();
if (SHOW_TRANSACTIONS) {
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 2941e93d12dc..6700a123e043 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -773,7 +773,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
final SurfaceControl.Builder b = mService.makeSurfaceBuilder(mSession)
.setSize(mSurfaceSize, mSurfaceSize)
- .setOpaque(true);
+ .setOpaque(true)
+ .setContainerLayer(true);
mWindowingLayer = b.setName("Display Root").build();
mOverlayLayer = b.setName("Display Overlays").build();
@@ -3890,7 +3891,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
SurfaceSession s = child != null ? child.getSession() : getSession();
final SurfaceControl.Builder b = mService.makeSurfaceBuilder(s);
b.setSize(mSurfaceSize, mSurfaceSize);
-
+ b.setContainerLayer(true);
if (child == null) {
return b;
}
diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java
index 66c8cca8f0e0..4548cec88e7e 100644
--- a/services/core/java/com/android/server/wm/WindowSurfaceController.java
+++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java
@@ -104,6 +104,7 @@ class WindowSurfaceController {
Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "new SurfaceControl");
final SurfaceControl.Builder b = win.makeSurface()
+ .setBufferLayer()
.setParent(win.getSurfaceControl())
.setName(name)
.setSize(w, h)