Add optional parameter to IVsyncSource::vsyncDeadlineAfter
vsyncDeadlineAfter just forwards its parameter to
VSyncTracker::nextAnticipatedVSyncTimeFrom, but the latter has an
optional parameter, too. Adding the optional parameter to
vsyncDeadlineAfter allows Scheduler::getNextFrameInterval to call it
directly. This will further help to move getNextFrameInterval's impl
into FrameTargeter::beginFrame, in
I229e09ccd760341268423fd4ba1ecc5105186f10.
Use Android's TimePoint and related classes directly in
getNextFrameInterval.
Bug: 315371484
Test: atest libscheduler_test:SchedulerTest#nextFrameIntervalTest
Change-Id: I1ede36d692b82a1f7276071fa558decced743334
diff --git a/services/surfaceflinger/Scheduler/Scheduler.cpp b/services/surfaceflinger/Scheduler/Scheduler.cpp
index fff97f7..c76d4bd 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.cpp
+++ b/services/surfaceflinger/Scheduler/Scheduler.cpp
@@ -646,13 +646,13 @@
return Fps{};
}
const Display& display = *displayOpt;
- const nsecs_t threshold =
- display.selectorPtr->getActiveMode().modePtr->getVsyncRate().getPeriodNsecs() / 2;
- const nsecs_t nextVsyncTime =
- display.schedulePtr->getTracker()
- .nextAnticipatedVSyncTimeFrom(currentExpectedPresentTime.ns() + threshold,
- currentExpectedPresentTime.ns());
- return Fps::fromPeriodNsecs(nextVsyncTime - currentExpectedPresentTime.ns());
+ const Duration threshold =
+ display.selectorPtr->getActiveMode().modePtr->getVsyncRate().getPeriod() / 2;
+ const TimePoint nextVsyncTime =
+ display.schedulePtr->vsyncDeadlineAfter(currentExpectedPresentTime + threshold,
+ currentExpectedPresentTime);
+ const Duration frameInterval = nextVsyncTime - currentExpectedPresentTime;
+ return Fps::fromPeriodNsecs(frameInterval.ns());
}
void Scheduler::resync() {