SF: initiateDisplayModeChanges requires another commit
When initiateDisplayModeChanges decides to change the mode,
another commit is required as the call to finalizeDisplayModeChange
resides within commit.
Bug: 341152836
Change-Id: Ic60e144e113521b9143fa60e5fed46aa562ddfe4
Test: android.view.surfacecontrol.cts.ChoreographerNativeTest#testRefreshRateCallbacksIsSyncedWithDisplayManager
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index b2ca572..90484b1 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1414,12 +1414,11 @@
}
}
-bool SurfaceFlinger::initiateDisplayModeChanges() {
+void SurfaceFlinger::initiateDisplayModeChanges() {
ATRACE_CALL();
std::optional<PhysicalDisplayId> displayToUpdateImmediately;
- bool mustComposite = false;
for (const auto& [id, physical] : mPhysicalDisplays) {
const auto display = getDisplayDeviceLocked(id);
if (!display) continue;
@@ -1471,11 +1470,7 @@
mScheduler->onNewVsyncPeriodChangeTimeline(outTimeline);
if (outTimeline.refreshRequired) {
- if (FlagManager::getInstance().vrr_bugfix_24q4()) {
- mustComposite = true;
- } else {
- scheduleComposite(FrameHint::kNone);
- }
+ scheduleComposite(FrameHint::kNone);
} else {
// TODO(b/255635711): Remove `displayToUpdateImmediately` to `finalizeDisplayModeChange`
// for all displays. This was only needed when the loop iterated over `mDisplays` rather
@@ -1493,8 +1488,6 @@
applyActiveMode(display);
}
}
-
- return mustComposite;
}
void SurfaceFlinger::disableExpensiveRendering() {
@@ -2674,7 +2667,7 @@
? &mLayerHierarchyBuilder.getHierarchy()
: nullptr,
updateAttachedChoreographer);
- mustComposite |= initiateDisplayModeChanges();
+ initiateDisplayModeChanges();
}
updateCursorAsync();