diff options
author | Rajat Yadav <quic_rajayada@quicinc.com> | 2022-03-02 16:56:52 +0530 |
---|---|---|
committer | Thirupathi Reddy R <quic_treddyr@quicinc.com> | 2022-04-12 18:13:32 +0530 |
commit | b74706e534ada99920bb5b92fa046e47cd29d0a0 (patch) | |
tree | bf05e4a315309ee2c50e288cd18e838b84b53a65 | |
parent | ede31eb457a1547e9e60a1376d3db7157aa7f3f6 (diff) |
sf: Reconfigure Display without waiting for mode change
CRs-Fixed:3120039
Change-Id: I3743ab8ff1c78aa4ee6521d44976609089c0d661
-rwxr-xr-x | services/surfaceflinger/SurfaceFlinger.cpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 24c3e67441..f08d8489cd 100755 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1652,18 +1652,6 @@ void SurfaceFlinger::setActiveModeInternal() { return; } - if (display->getActiveMode()->getSize() != upcomingModeInfo.mode->getSize()) { - auto& state = mCurrentState.displays.editValueFor(display->getDisplayToken()); - // We need to generate new sequenceId in order to recreate the display (and this - // way the framebuffer). - state.sequenceId = DisplayDeviceState{}.sequenceId; - state.physical->activeMode = upcomingModeInfo.mode; - processDisplayChangesLocked(); - - // processDisplayChangesLocked will update all necessary components so we're done here. - return; - } - // We just created this display so we can call even if we are not on // the main thread MainThreadScopedGuard fakeMainThreadGuard(SF_MAIN_THREAD); @@ -1763,6 +1751,16 @@ void SurfaceFlinger::performSetActiveMode() { } mScheduler->onNewVsyncPeriodChangeTimeline(outTimeline); + const auto upcomingMode = display->getMode(desiredActiveMode->mode->getId()); + if (display->getActiveMode()->getSize() != upcomingMode->getSize()) { + auto& state = mCurrentState.displays.editValueFor(display->getDisplayToken()); + // We need to generate new sequenceId in order to recreate the display (and this + // way the framebuffer). + state.sequenceId = DisplayDeviceState{}.sequenceId; + state.physical->activeMode = upcomingMode; + processDisplayChangesLocked(); + } + // Scheduler will submit an empty frame to HWC if needed. mSetActiveModePending = true; } @@ -8308,7 +8306,7 @@ status_t SurfaceFlinger::setDesiredDisplayModeSpecsInternal( // be depending in this callback. const auto activeMode = display->getActiveMode(); if (isDisplayActiveLocked(display)) { - mScheduler->onPrimaryDisplayModeChanged(mAppConnectionHandle, activeMode); + mScheduler->onPrimaryDisplayModeChanged(mAppConnectionHandle, display->getMode(currentPolicy.defaultMode)); toggleKernelIdleTimer(); } else { mScheduler->onNonPrimaryDisplayModeChanged(mAppConnectionHandle, activeMode); |