diff options
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
-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 a8a0bab62d..80b92b2aa5 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; } @@ -8304,7 +8302,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); |