summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java5
-rw-r--r--core/java/android/view/IWindowSession.aidl6
-rw-r--r--core/java/android/view/ViewRootImpl.java17
-rw-r--r--core/java/android/view/WindowlessWindowManager.java2
4 files changed, 16 insertions, 14 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index dd78c78654c3..e9285cc7931d 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -223,6 +223,9 @@ public abstract class WallpaperService extends Service {
SurfaceControl mSurfaceControl = new SurfaceControl();
+ // Unused relayout out-param
+ SurfaceControl mTmpSurfaceControl = new SurfaceControl();
+
final BaseSurfaceHolder mSurfaceHolder = new BaseSurfaceHolder() {
{
mRequestedFormat = PixelFormat.RGBX_8888;
@@ -902,7 +905,7 @@ public abstract class WallpaperService extends Service {
View.VISIBLE, 0, -1, mWinFrame, mContentInsets,
mVisibleInsets, mStableInsets, mBackdropFrame,
mDisplayCutout, mMergedConfiguration, mSurfaceControl,
- mInsetsState, mSurfaceSize);
+ mInsetsState, mSurfaceSize, mTmpSurfaceControl);
if (mSurfaceControl.isValid()) {
mSurfaceHolder.mSurface.copyFrom(mSurfaceControl);
mSurfaceControl.release();
diff --git a/core/java/android/view/IWindowSession.aidl b/core/java/android/view/IWindowSession.aidl
index e3446e1f7b57..1677357dedbe 100644
--- a/core/java/android/view/IWindowSession.aidl
+++ b/core/java/android/view/IWindowSession.aidl
@@ -92,6 +92,9 @@ interface IWindowSession {
* @param outSurface Object in which is placed the new display surface.
* @param insetsState The current insets state in the system.
* @param outSurfaceSize The width and height of the surface control
+ * @param outBlastSurfaceControl A BLAST SurfaceControl allocated by the WindowManager
+ * the SurfaceControl willl be managed by the client side, but the WindowManager
+ * may use it as a deferTransaction barrier.
*
* @return int Result flags: {@link WindowManagerGlobal#RELAYOUT_SHOW_FOCUS},
* {@link WindowManagerGlobal#RELAYOUT_FIRST_TIME}.
@@ -103,7 +106,8 @@ interface IWindowSession {
out Rect outBackdropFrame,
out DisplayCutout.ParcelableWrapper displayCutout,
out MergedConfiguration outMergedConfiguration, out SurfaceControl outSurfaceControl,
- out InsetsState insetsState, out Point outSurfaceSize);
+ out InsetsState insetsState, out Point outSurfaceSize,
+ out SurfaceControl outBlastSurfaceControl);
/*
* Notify the window manager that an application is relaunching and
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 7a93dcc9e4ec..fbcc261a956e 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -507,7 +507,7 @@ public final class ViewRootImpl implements ViewParent,
@UnsupportedAppUsage
public final Surface mSurface = new Surface();
private final SurfaceControl mSurfaceControl = new SurfaceControl();
- private SurfaceControl mBlastSurfaceControl;
+ private SurfaceControl mBlastSurfaceControl = new SurfaceControl();
private BLASTBufferQueue mBlastBufferQueue;
@@ -1690,23 +1690,17 @@ public final class ViewRootImpl implements ViewParent,
.build();
setBoundsLayerCrop();
mTransaction.show(mBoundsLayer).apply();
- }
- return mBoundsLayer;
+ }
+ return mBoundsLayer;
}
Surface getOrCreateBLASTSurface(int width, int height) {
if (mSurfaceControl == null || !mSurfaceControl.isValid()) {
return null;
}
- if (mBlastSurfaceControl == null) {
- mBlastSurfaceControl = new SurfaceControl.Builder(mSurfaceSession)
- .setParent(mSurfaceControl)
- .setName("BLAST")
- .setBLASTLayer()
- .build();
+ if ((mBlastBufferQueue != null) && mBlastSurfaceControl.isValid()) {
mBlastBufferQueue = new BLASTBufferQueue(
mBlastSurfaceControl, width, height);
-
}
mBlastBufferQueue.update(mBlastSurfaceControl, width, height);
@@ -7344,7 +7338,8 @@ public final class ViewRootImpl implements ViewParent,
insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0, frameNumber,
mTmpFrame, mPendingContentInsets, mPendingVisibleInsets,
mPendingStableInsets, mPendingBackDropFrame, mPendingDisplayCutout,
- mPendingMergedConfiguration, mSurfaceControl, mTempInsets, mSurfaceSize);
+ mPendingMergedConfiguration, mSurfaceControl, mTempInsets, mSurfaceSize,
+ mBlastSurfaceControl);
if (mSurfaceControl.isValid()) {
if (!WindowManagerGlobal.USE_BLAST_ADAPTER) {
mSurface.copyFrom(mSurfaceControl);
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index 9f2784889cab..91778aaf51fd 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -161,7 +161,7 @@ public class WindowlessWindowManager implements IWindowSession {
Rect outStableInsets, Rect outBackdropFrame,
DisplayCutout.ParcelableWrapper cutout, MergedConfiguration mergedConfiguration,
SurfaceControl outSurfaceControl, InsetsState outInsetsState,
- Point outSurfaceSize) {
+ Point outSurfaceSize, SurfaceControl outBLASTSurfaceControl) {
State state = null;
synchronized (this) {
state = mStateForWindow.get(window.asBinder());