From 02e5a33bbc92d80727bb5e93f3b0004ad07d2187 Mon Sep 17 00:00:00 2001 From: Robert Carr Date: Thu, 5 Nov 2020 11:22:51 -0800 Subject: [PATCH] SurfaceView: Disable BLASTSync We didn't intend to flip this behavior in the initial BLAST flip revert back to using deferTransaction for now. Bug: 172579592 Test: Existing tests pass Change-Id: I07887d59d16ff3676cf20fac11e1ef3fc5e17106 --- core/java/android/view/SurfaceView.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 14748f03e9341..15adc5a0ec2fc 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -432,7 +432,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall * This gets called on a RenderThread worker thread, so members accessed here must * be protected by a lock. */ - final boolean useBLAST = viewRoot.useBLAST(); + final boolean useBLAST = useBLASTSync(viewRoot); viewRoot.registerRtFrameCallback(frame -> { try { synchronized (mSurfaceControlLock) { @@ -809,7 +809,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall * This gets called on a RenderThread worker thread, so members accessed here must * be protected by a lock. */ - final boolean useBLAST = viewRoot.useBLAST(); + final boolean useBLAST = useBLASTSync(viewRoot); viewRoot.registerRtFrameCallback(frame -> { try { synchronized (mSurfaceControlLock) { @@ -1110,7 +1110,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall final boolean needBLASTSync = (layoutSizeChanged || positionChanged || visibleChanged) && - viewRoot.useBLAST(); + useBLASTSync(viewRoot); final boolean realSizeChanged = performSurfaceTransaction(viewRoot, translator, creating, sizeChanged, needBLASTSync); final boolean redrawNeeded = sizeChanged || creating || @@ -1352,7 +1352,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private void applySurfaceTransforms(SurfaceControl surface, SurfaceControl.Transaction t, Rect position, long frameNumber) { final ViewRootImpl viewRoot = getViewRootImpl(); - if (frameNumber > 0 && viewRoot != null && !viewRoot.useBLAST()) { + if (frameNumber > 0 && viewRoot != null && !useBLASTSync(viewRoot)) { t.deferTransactionUntil(surface, viewRoot.getSurfaceControl(), frameNumber); } @@ -1385,7 +1385,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall private void setParentSpaceRectangle(Rect position, long frameNumber) { final ViewRootImpl viewRoot = getViewRootImpl(); - final boolean useBLAST = viewRoot.useBLAST(); + final boolean useBLAST = useBLASTSync(viewRoot); if (useBLAST) { synchronized (viewRoot.getBlastTransactionLock()) { @@ -1444,7 +1444,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall @Override public void positionLost(long frameNumber) { final ViewRootImpl viewRoot = getViewRootImpl(); - boolean useBLAST = viewRoot != null && viewRoot.useBLAST(); + boolean useBLAST = viewRoot != null && useBLASTSync(viewRoot); if (DEBUG) { Log.d(TAG, String.format("%d windowPositionLost, frameNr = %d", System.identityHashCode(this), frameNumber)); @@ -1920,4 +1920,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall + "Exception requesting focus on embedded window", e); } } + + private boolean useBLASTSync(ViewRootImpl viewRoot) { + return viewRoot.useBLAST() && mUseBlastAdapter; + } }