diff options
Diffstat (limited to 'services/surfaceflinger/DisplayDevice.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 32 |
1 files changed, 8 insertions, 24 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 7b0aad7316..799d62c19d 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -222,6 +222,7 @@ bool DisplayDevice::initiateModeChange(display::DisplayModeRequest&& desiredMode const hal::VsyncPeriodChangeConstraints& constraints, hal::VsyncPeriodChangeTimeline& outTimeline) { mPendingModeOpt = std::move(desiredMode); + mIsModeSetPending = true; const auto& mode = *mPendingModeOpt->mode.modePtr; @@ -234,22 +235,9 @@ bool DisplayDevice::initiateModeChange(display::DisplayModeRequest&& desiredMode return true; } -auto DisplayDevice::finalizeModeChange() -> ModeChange { - if (!mPendingModeOpt) return NoModeChange{"No pending mode"}; - - auto pendingMode = *std::exchange(mPendingModeOpt, std::nullopt); - auto& pendingModePtr = pendingMode.mode.modePtr; - - if (!mRefreshRateSelector->displayModes().contains(pendingModePtr->getId())) { - return NoModeChange{"Unknown pending mode"}; - } - - if (getActiveMode().modePtr->getResolution() != pendingModePtr->getResolution()) { - return ResolutionChange{std::move(pendingMode)}; - } - - setActiveMode(pendingModePtr->getId(), pendingModePtr->getVsyncRate(), pendingMode.mode.fps); - return RefreshRateChange{std::move(pendingMode)}; +void DisplayDevice::finalizeModeChange(DisplayModeId modeId, Fps vsyncRate, Fps renderFps) { + setActiveMode(modeId, vsyncRate, renderFps); + mIsModeSetPending = false; } nsecs_t DisplayDevice::getVsyncPeriodFromHWC() const { @@ -587,14 +575,10 @@ auto DisplayDevice::getDesiredMode() const -> DisplayModeRequestOpt { return mDesiredModeOpt; } -auto DisplayDevice::takeDesiredMode() -> DisplayModeRequestOpt { - DisplayModeRequestOpt desiredModeOpt; - { - std::scoped_lock lock(mDesiredModeLock); - std::swap(mDesiredModeOpt, desiredModeOpt); - mHasDesiredModeTrace = false; - } - return desiredModeOpt; +void DisplayDevice::clearDesiredMode() { + std::scoped_lock lock(mDesiredModeLock); + mDesiredModeOpt.reset(); + mHasDesiredModeTrace = false; } void DisplayDevice::adjustRefreshRate(Fps pacesetterDisplayRefreshRate) { |