From d1feb3c35952b2eec11aa99eb925edfb3e868359 Mon Sep 17 00:00:00 2001 From: Ady Abraham Date: Wed, 2 Jun 2021 21:04:28 -0700 Subject: SurfaceFlinger: set the refresh rate on overlay when calling to hwc Change the refresh rate value on the overlay right after we set the new refresh rate to hwc, instead of when we intend to change the refresh rate. The latter may cause the display to freeze due to a race condition where we intend to switch the refresh rate and then abort (due to a infrequent layer update for example). Bug: 183902142 Test: Swipe app to see app drawer and wait for the refresh rate to change Change-Id: Id78efb96571b978d8adaabcff9aa30c32fe67786 --- services/surfaceflinger/SurfaceFlinger.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'services/surfaceflinger/SurfaceFlinger.cpp') diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 881ee5b8f4..202af2877a 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1034,10 +1034,6 @@ void SurfaceFlinger::setDesiredActiveMode(const ActiveModeInfo& info) { updatePhaseConfiguration(refreshRate.getFps()); mScheduler->setModeChangePending(true); } - - if (mRefreshRateOverlay) { - mRefreshRateOverlay->changeRefreshRate(refreshRate.getFps()); - } } status_t SurfaceFlinger::setActiveMode(const sp& displayToken, int modeId) { @@ -1195,6 +1191,10 @@ void SurfaceFlinger::performSetActiveMode() { } mScheduler->onNewVsyncPeriodChangeTimeline(outTimeline); + if (mRefreshRateOverlay) { + mRefreshRateOverlay->changeRefreshRate(desiredMode->getFps()); + } + // Scheduler will submit an empty frame to HWC if needed. mSetActiveModePending = true; } -- cgit v1.2.3-59-g8ed1b