summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2022-04-12 06:03:33 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2022-04-12 06:03:33 -0700
commit1edff3d455e34db835db04f60f44435f9e74dfa3 (patch)
treeb6f60d179b84396109faff15ce4dd4bad597984a
parent7249b8580a8e2921c1a8cc624f321390a80370b7 (diff)
parentb74706e534ada99920bb5b92fa046e47cd29d0a0 (diff)
Merge "sf: Reconfigure Display without waiting for mode change"
-rwxr-xr-xservices/surfaceflinger/SurfaceFlinger.cpp24
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);