diff options
| author | 2025-01-15 09:37:02 -0800 | |
|---|---|---|
| committer | 2025-01-15 09:37:02 -0800 | |
| commit | 4d73cd3581a3ceb5f3b2e09a5deeda5637789100 (patch) | |
| tree | 756e95b298910e768f6053e1873b85d25869d362 | |
| parent | a8e18bc7c9aa79ba7b99785e420666c48f27c9f6 (diff) | |
| parent | 463478209c8670a36969aee8b5e897467db43f61 (diff) | |
Merge "Update BBQ apply token before updating destination frame" into main
| -rw-r--r-- | core/java/android/service/wallpaper/WallpaperService.java | 5 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 9 |
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(); |