summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Vishnu Nair <vishnun@google.com> 2025-01-15 09:37:02 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-01-15 09:37:02 -0800
commit4d73cd3581a3ceb5f3b2e09a5deeda5637789100 (patch)
tree756e95b298910e768f6053e1873b85d25869d362
parenta8e18bc7c9aa79ba7b99785e420666c48f27c9f6 (diff)
parent463478209c8670a36969aee8b5e897467db43f61 (diff)
Merge "Update BBQ apply token before updating destination frame" into main
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java5
-rw-r--r--core/java/android/view/ViewRootImpl.java9
2 files changed, 8 insertions, 6 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index eeb56d4d6c05..464756842caf 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -2424,9 +2424,10 @@ public abstract class WallpaperService extends Service {
Surface ret = null;
if (mBlastBufferQueue == null) {
- mBlastBufferQueue = new BLASTBufferQueue("Wallpaper", mBbqSurfaceControl,
- width, height, format);
+ mBlastBufferQueue = new BLASTBufferQueue("Wallpaper",
+ true /* updateDestinationFrame */);
mBlastBufferQueue.setApplyToken(mBbqApplyToken);
+ mBlastBufferQueue.update(mBbqSurfaceControl, width, height, format);
// We only return the Surface the first time, as otherwise
// it hasn't changed and there is no need to update.
ret = mBlastBufferQueue.createSurface();
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index a657acd261d4..0972c01aa653 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -2759,14 +2759,15 @@ public final class ViewRootImpl implements ViewParent,
if (mBlastBufferQueue != null) {
mBlastBufferQueue.destroy();
}
- mBlastBufferQueue = new BLASTBufferQueue(mTag, mSurfaceControl,
- mSurfaceSize.x, mSurfaceSize.y, mWindowAttributes.format);
- mBlastBufferQueue.setTransactionHangCallback(sTransactionHangCallback);
- mBlastBufferQueue.setWaitForBufferReleaseCallback(mChoreographer::onWaitForBufferRelease);
+ mBlastBufferQueue = new BLASTBufferQueue(mTag, true /* updateDestinationFrame */);
// If we create and destroy BBQ without recreating the SurfaceControl, we can end up
// queuing buffers on multiple apply tokens causing out of order buffer submissions. We
// fix this by setting the same apply token on all BBQs created by this VRI.
mBlastBufferQueue.setApplyToken(mBbqApplyToken);
+ mBlastBufferQueue.update(mSurfaceControl, mSurfaceSize.x, mSurfaceSize.y,
+ mWindowAttributes.format);
+ mBlastBufferQueue.setTransactionHangCallback(sTransactionHangCallback);
+ mBlastBufferQueue.setWaitForBufferReleaseCallback(mChoreographer::onWaitForBufferRelease);
Surface blastSurface;
if (addSchandleToVriSurface()) {
blastSurface = mBlastBufferQueue.createSurfaceWithHandle();