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

Commit ff3e1df3 authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android (Google) Code Review
Browse files

Merge "Follow up to Ia7900e753b29187a7a7b81f393666687e8b8e04b"

parents bc8a4541 aa7505df
Loading
Loading
Loading
Loading
+21 −39
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@ import java.util.ArrayList;
 */
public class SyncRtSurfaceTransactionApplier {

    private final Object mLock = new Object();
    private final Surface mTargetSurface;
    private final ViewRootImpl mTargetViewRootImpl;
    private final float[] mTmpFloat9 = new float[9];
@@ -43,37 +42,23 @@ public class SyncRtSurfaceTransactionApplier {
        mTargetSurface = mTargetViewRootImpl != null ? mTargetViewRootImpl.mSurface : null;
    }

    /**
     * Schedules applying surface parameters on the next frame.
     *
     * @param params The parameters for the surface to apply.
     */
    public void scheduleApply(SurfaceParams params) {
        ArrayList<SurfaceParams> list = new ArrayList<>(1);
        list.add(params);
        scheduleApply(list);
    }

    /**
     * Schedules applying surface parameters on the next frame.
     *
     * @param params The surface parameters to apply. DO NOT MODIFY the list after passing into
     *               this method to avoid synchronization issues.
     */
    public void scheduleApply(ArrayList<SurfaceParams> params) {
        if (mTargetViewRootImpl != null) {

            // Acquire mLock to establish a happens-before relationship to ensure the other thread
            // sees the surface parameters.
            synchronized (mLock) {
    public void scheduleApply(SurfaceParams... params) {
        if (mTargetViewRootImpl == null) {
            return;
        }
        mTargetViewRootImpl.registerRtFrameCallback(frame -> {
                    synchronized (mLock) {
                if (mTargetSurface == null || !mTargetSurface.isValid()) {
                    return;
                }
                SurfaceControl.Transaction t = new SurfaceControl.Transaction();
                        for (int i = params.size() - 1; i >= 0; i--) {
                            SurfaceParams surfaceParams = params.get(i);
                for (int i = params.length - 1; i >= 0; i--) {
                    SurfaceParams surfaceParams = params[i];
                    SurfaceControl surface = surfaceParams.surface;
                    t.deferTransactionUntilSurface(surface, mTargetSurface, frame);
                    t.setMatrix(surface, surfaceParams.matrix, mTmpFloat9);
@@ -84,11 +69,8 @@ public class SyncRtSurfaceTransactionApplier {
                }
                t.setEarlyWakeup();
                t.apply();
                    }
        });
    }
        }
    }

    public static class SurfaceParams {