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

Commit d71c2b1a authored by Alec Mouri's avatar Alec Mouri Committed by Android (Google) Code Review
Browse files

Merge "[SurfaceFlinger] Some dispsync fixes for early event firing" into qt-r1-dev

parents 2eeb9c63 c3a482d7
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -79,11 +79,7 @@ public:
        Mutex::Autolock lock(mMutex);

        mPhase = phase;
        if (mReferenceTime != referenceTime) {
            for (auto& eventListener : mEventListeners) {
                eventListener.mHasFired = false;
            }
        }
        const bool referenceTimeChanged = mReferenceTime != referenceTime;
        mReferenceTime = referenceTime;
        if (mPeriod != 0 && mPeriod != period && mReferenceTime != 0) {
            // Inflate the reference time to be the most recent predicted
@@ -94,6 +90,13 @@ public:
            mReferenceTime = mReferenceTime + (numOldPeriods)*mPeriod;
        }
        mPeriod = period;
        if (!mModelLocked && referenceTimeChanged) {
            for (auto& eventListener : mEventListeners) {
                eventListener.mHasFired = false;
                eventListener.mLastEventTime =
                        mReferenceTime - mPeriod + mPhase + eventListener.mPhase;
            }
        }
        if (mTraceDetailedInfo) {
            ATRACE_INT64("DispSync:Period", mPeriod);
            ATRACE_INT64("DispSync:Phase", mPhase + mPeriod / 2);
@@ -120,6 +123,13 @@ public:

    void unlockModel() {
        Mutex::Autolock lock(mMutex);
        if (mModelLocked) {
            for (auto& eventListener : mEventListeners) {
                if (eventListener.mLastEventTime > mReferenceTime) {
                    eventListener.mHasFired = true;
                }
            }
        }
        mModelLocked = false;
        ATRACE_INT("DispSync:ModelLocked", mModelLocked);
    }
@@ -249,6 +259,10 @@ public:
            listener.mLastCallbackTime = lastCallbackTime;
        }

        if (!mModelLocked && listener.mLastEventTime > mReferenceTime) {
            listener.mHasFired = true;
        }

        mEventListeners.push_back(listener);

        mCond.signal();