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

Commit 2d39fb90 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Follow up to Ia7900e753b29187a7a7b81f393666687e8b8e04b

Test: Open notification
Bug: 78611607
Change-Id: I608d4b619d5e236c1c874c8c7613f35574d45fd4
Merged-In: I608d4b619d5e236c1c874c8c7613f35574d45fd4
parent 64be98d5
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 {