Merge "Fix early firing when adding event listeners" into qt-dev
diff --git a/services/surfaceflinger/Scheduler/DispSync.cpp b/services/surfaceflinger/Scheduler/DispSync.cpp
index 0738c6d..871f556 100644
--- a/services/surfaceflinger/Scheduler/DispSync.cpp
+++ b/services/surfaceflinger/Scheduler/DispSync.cpp
@@ -212,11 +212,14 @@
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.
- if (isShorterThanPeriod(now - listener.mLastEventTime)) {
+ // 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;
}
} else {