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

Commit df3d2e14 authored by Alec Mouri's avatar Alec Mouri
Browse files

Revert "When adding event listener, use fuzzy window for last event time."

This reverts commit 6db6d622.

Reason for revert: issues such as b/131709052 where questionable frame pacing is observed. We could play with the ratios a bit but that would require a bit of tuning. Also, it looks like b/128918820 wasn't resolved by this change anyways so there's no evidence that this is a benefit.

Bug: 131709052
Test: systrace
Change-Id: I37656a8991a7040051cd5590c12b2a9a627e02a2
parent 8b30c364
Loading
Loading
Loading
Loading
+11 −14
Original line number Diff line number Diff line
@@ -210,17 +210,14 @@ public:
            const nsecs_t baseTime = now - mReferenceTime;
            const nsecs_t numPeriodsSinceReference = baseTime / mPeriod;
            const nsecs_t predictedReference = mReferenceTime + numPeriodsSinceReference * mPeriod;
            listener.mLastEventTime = predictedReference + mPhase + listener.mPhase;
            // If we're very close in time to the predicted last event time,
            // and we're not very close to the next predicted last event time
            // then we need to back up the last event time so that we can
            // attempt to fire an event immediately.
            //
            // Otherwise, keep the last event time that we predicted so that
            // we don't wake up early.
            if (isShorterThanPeriod(now - listener.mLastEventTime) &&
                !isShorterThanPeriod(listener.mLastEventTime + mPeriod - now)) {
                listener.mLastEventTime -= mPeriod;
            const nsecs_t phaseCorrection = mPhase + listener.mPhase;
            const nsecs_t predictedLastEventTime = predictedReference + phaseCorrection;
            if (predictedLastEventTime >= now) {
                // Make sure that the last event time does not exceed the current time.
                // If it would, then back the last event time by a period.
                listener.mLastEventTime = predictedLastEventTime - mPeriod;
            } else {
                listener.mLastEventTime = predictedLastEventTime;
            }
        } else {
            listener.mLastEventTime = now + mPhase - mWakeupLatency;
@@ -316,7 +313,7 @@ private:

    // Sanity check that the duration is close enough in length to a period without
    // falling into double-rate vsyncs.
    bool isShorterThanPeriod(nsecs_t duration) {
    bool isCloseToPeriod(nsecs_t duration) {
        // Ratio of 3/5 is arbitrary, but it must be greater than 1/2.
        return duration < (3 * mPeriod) / 5;
    }
@@ -332,7 +329,7 @@ private:
            nsecs_t t = computeListenerNextEventTimeLocked(eventListener, onePeriodAgo);

            if (t < now) {
                if (isShorterThanPeriod(now - eventListener.mLastCallbackTime)) {
                if (isCloseToPeriod(now - eventListener.mLastCallbackTime)) {
                    eventListener.mLastEventTime = t;
                    ALOGV("[%s] [%s] Skipping event due to model error", mName,
                          eventListener.mName);
@@ -392,7 +389,7 @@ private:

        // Check that it's been slightly more than half a period since the last
        // event so that we don't accidentally fall into double-rate vsyncs
        if (isShorterThanPeriod(t - listener.mLastEventTime)) {
        if (isCloseToPeriod(t - listener.mLastEventTime)) {
            t += mPeriod;
            ALOGV("[%s] Modifying t -> %" PRId64, mName, ns2us(t));
        }