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

Commit ac227b88 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

am: 62c1e21a

Change-Id: I5e6d697a43327fc583f0248201ab4c7d2bd277cd
parents b86466ed 62c1e21a
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() {