diff options
-rw-r--r-- | services/surfaceflinger/DisplayHardware/HWComposer.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 6be57d480d..9aaaa95a66 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -540,8 +540,9 @@ status_t HWComposer::getDeviceCompositionChanges( displayData.validateWasSkipped = false; { std::scoped_lock lock{displayData.expectedPresentLock}; - displayData.lastExpectedPresentTimestamp = TimePoint::fromNs(expectedPresentTime); - // TODO(b/296636176) Update displayData.lastFrameInterval for present display commands + if (expectedPresentTime > displayData.lastExpectedPresentTimestamp.ns()) { + displayData.lastExpectedPresentTimestamp = TimePoint::fromNs(expectedPresentTime); + } } if (canSkipValidate) { @@ -965,6 +966,11 @@ status_t HWComposer::notifyExpectedPresentIfRequired(PhysicalDisplayId displayId isExpectedPresentWithinTimeout(expectedPresentTime, lastExpectedPresentTimestamp, timeoutOpt, threshold); + using fps_approx_ops::operator!=; + if (frameIntervalIsOnCadence && frameInterval != lastFrameInterval) { + displayData.lastExpectedPresentTimestamp = expectedPresentTime; + } + if (expectedPresentWithinTimeout && frameIntervalIsOnCadence) { return NO_ERROR; } |