SF: change the render rate directly instead of starting a new VsyncTimeline
So we would preserve the old vsync cadence
Bug: 328140524
Change-Id: Ibdd4e49ab5494605e39957cedc6fba00146d18d9
Test: presubmit
diff --git a/services/surfaceflinger/Scheduler/VSyncPredictor.cpp b/services/surfaceflinger/Scheduler/VSyncPredictor.cpp
index 3fc9a07..db1930d 100644
--- a/services/surfaceflinger/Scheduler/VSyncPredictor.cpp
+++ b/services/surfaceflinger/Scheduler/VSyncPredictor.cpp
@@ -379,9 +379,16 @@
prevRenderRate ? prevRenderRate->getPeriodNsecs() - renderRate.getPeriodNsecs() : 0;
const bool newRenderRateIsHigher = renderPeriodDelta > renderRate.getPeriodNsecs() &&
mLastCommittedVsync.ns() - mClock->now() > 2 * renderRate.getPeriodNsecs();
- if (applyImmediately || newRenderRateIsHigher) {
+ if (applyImmediately) {
+ while (mTimelines.size() > 1) {
+ mTimelines.pop_front();
+ }
+
+ mTimelines.front().setRenderRate(renderRate);
+ } else if (newRenderRateIsHigher) {
mTimelines.clear();
mLastCommittedVsync = TimePoint::fromNs(0);
+
} else {
mTimelines.back().freeze(
TimePoint::fromNs(mLastCommittedVsync.ns() + mIdealPeriod.ns() / 2));