summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajat Yadav <quic_rajayada@quicinc.com>2022-03-02 16:56:52 +0530
committerThirupathi Reddy R <quic_treddyr@quicinc.com>2022-04-12 18:13:32 +0530
commitb74706e534ada99920bb5b92fa046e47cd29d0a0 (patch)
treebf05e4a315309ee2c50e288cd18e838b84b53a65
parentede31eb457a1547e9e60a1376d3db7157aa7f3f6 (diff)
sf: Reconfigure Display without waiting for mode change
CRs-Fixed:3120039 Change-Id: I3743ab8ff1c78aa4ee6521d44976609089c0d661
-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 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);