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

Commit c2c63461 authored by John Reck's avatar John Reck Committed by android-build-merger
Browse files

Merge "Revert SurfaceView back to Q's version" into qt-r1-dev

am: 2f8cae24

Change-Id: Iaacf495a7d45f854fdcefba73dbdffec09ba974d
parents 84f6ea85 2f8cae24
Loading
Loading
Loading
Loading
+0 −42
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.content.res.Configuration;
import android.graphics.BlendMode;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.HardwareRenderer;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
@@ -202,29 +201,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb

    private SurfaceControl.Transaction mRtTransaction = new SurfaceControl.Transaction();

    /**
     * A callback which reflects an alpha value of this view onto the underlying surfaces.
     *
     * <p class="note"><strong>Note:</strong> This doesn't have to be defined as a member variable,
     * but can be defined as an inline lambda when calling ViewRootImpl#registerRtFrameCallback().
     * However when we do so, the callback is triggered only for a few times and stops working for
     * some reason. It's suspected that there is a problem around garbage collection, and until
     * the cause is fixed, we will keep this callback in a member variable.</p>
    */
    private HardwareRenderer.FrameDrawingCallback mSetSurfaceAlphaCallback = frame -> {
        final ViewRootImpl viewRoot = getViewRootImpl();
        if (viewRoot == null || viewRoot.mSurface == null || !viewRoot.mSurface.isValid()) {
            // In this case, the alpha value is reflected on the screen in #updateSurface() later.
            return;
        }

        final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
        t.setAlpha(mSurfaceControl, getAlpha());
        t.deferTransactionUntilSurface(mSurfaceControl, viewRoot.mSurface, frame);
        t.setEarlyWakeup();
        t.apply();
    };

    public SurfaceView(Context context) {
        this(context, null);
    }
@@ -312,17 +288,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
        updateSurface();
    }

    @Override
    public void setAlpha(float alpha) {
        super.setAlpha(alpha);
        final ViewRootImpl viewRoot = getViewRootImpl();
        if (viewRoot == null) {
            return;
        }
        viewRoot.registerRtFrameCallback(mSetSurfaceAlphaCallback);
        invalidate();
    }

    private void performDrawFinished() {
        if (mPendingReportDraws > 0) {
            mDrawFinished = true;
@@ -682,13 +647,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
                        }
                        updateBackgroundVisibilityInTransaction(viewRoot.getSurfaceControl());

                        // Alpha value change is handled in setAlpha() directly using a local
                        // transaction. However it can happen that setAlpha() is called while
                        // local transactions cannot be applied, so the value is stored in a View
                        // but not yet reflected on the Surface.
                        mSurfaceControl.setAlpha(getAlpha());
                        mBackgroundControl.setAlpha(getAlpha());

                        // While creating the surface, we will set it's initial
                        // geometry. Outside of that though, we should generally
                        // leave it to the RenderThread.