Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02e5a33b authored by Robert Carr's avatar Robert Carr
Browse files

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
parent 7e3010b2
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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;
    }
}