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

Commit 62c1e21a authored by Jorim Jaggi's avatar Jorim Jaggi Committed by android-build-merger
Browse files

Merge "Split out whether frame callback and tick is scheduled" into oc-dev

am: 756efea1

Change-Id: I73a1585ac7e287afcf2f0d15d9ccedc5627deed0
parents f528efd2 756efea1
Loading
Loading
Loading
Loading
+24 −7
Original line number Diff line number Diff line
@@ -87,8 +87,18 @@ public class WindowAnimator {
    private final SurfaceFlingerVsyncChoreographer mSfChoreographer;

    private Choreographer mChoreographer;
    private boolean mAnimationScheduled;

    /**
     * Indicates whether we have an animation frame callback scheduled, which will happen at
     * vsync-app and then schedule the animation tick at the right time (vsync-sf).
     */
    private boolean mAnimationFrameCallbackScheduled;

    /**
     * Indicates whether we have an animation tick scheduled. The tick is the thing that actually
     * executes the animation step, which will happen at vsync-sf.
     */
    private boolean mAnimationTickScheduled;

    WindowAnimator(final WindowManagerService service) {
        mService = service;
@@ -104,13 +114,20 @@ public class WindowAnimator {
                mService.getDefaultDisplayContentLocked().getDisplay(), mChoreographer);
        mAnimationTick = () -> {
            synchronized (mService.mWindowMap) {
                mAnimationScheduled = false;
                mAnimationTickScheduled = false;
                animateLocked(mCurrentFrameTime);
            }
        };
        mAnimationFrameCallback = frameTimeNs -> {
            synchronized (mService.mWindowMap) {
                mCurrentFrameTime = frameTimeNs;
                mAnimationFrameCallbackScheduled = false;
                if (mAnimationTickScheduled) {
                    return;
                }
                mAnimationTickScheduled = true;
                mSfChoreographer.scheduleAtSfVsync(mAnimationTick);
            }
        };
    }

@@ -371,8 +388,8 @@ public class WindowAnimator {
    }

    void scheduleAnimation() {
        if (!mAnimationScheduled) {
            mAnimationScheduled = true;
        if (!mAnimationFrameCallbackScheduled) {
            mAnimationFrameCallbackScheduled = true;
            mChoreographer.postFrameCallback(mAnimationFrameCallback);
        }
    }
@@ -386,7 +403,7 @@ public class WindowAnimator {
    }

    boolean isAnimationScheduled() {
        return mAnimationScheduled;
        return mAnimationFrameCallbackScheduled || mAnimationTickScheduled;
    }

    Choreographer getChoreographer() {