diff options
author | 2023-08-07 18:49:47 -0700 | |
---|---|---|
committer | 2023-09-11 13:12:54 -0700 | |
commit | a04b8a5e0864b1064538db4e6dd887d2fc58dfe5 (patch) | |
tree | d553e297b3469a2cb62ea9baeeaf10bb47b09ef9 /services/surfaceflinger/DisplayDevice.cpp | |
parent | 70465c42c69b99720004d5db76f17045abea5ce5 (diff) |
[SF] Update DisplayMode::Fps with PeakFps
Update to incorporate display refresh rate on
DisplayMode
With the addition of VRR, vsync period
does not necessarily represent the
refresh rate of the display, having a
peakRefreshRate that represents the
display peak refresh rate helps with
separating the concern of vsync period
being different from the peak refresh rate
supported by the device.
Test: atest libsurfaceflinger_unittest
BUG: 286048920
BUG: 284845445
Change-Id: I9d90e4def4cf3efcd5a696a4ec43fbf7698abfe4
Diffstat (limited to 'services/surfaceflinger/DisplayDevice.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 70ccaf883e..252ba8e753 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -208,12 +208,12 @@ bool DisplayDevice::isPoweredOn() const { return mPowerMode && *mPowerMode != hal::PowerMode::OFF; } -void DisplayDevice::setActiveMode(DisplayModeId modeId, Fps displayFps, Fps renderFps) { - ATRACE_INT(mActiveModeFPSTrace.c_str(), displayFps.getIntValue()); +void DisplayDevice::setActiveMode(DisplayModeId modeId, Fps vsyncRate, Fps renderFps) { + ATRACE_INT(mActiveModeFPSTrace.c_str(), vsyncRate.getIntValue()); ATRACE_INT(mRenderFrameRateFPSTrace.c_str(), renderFps.getIntValue()); mRefreshRateSelector->setActiveMode(modeId, renderFps); - updateRefreshRateOverlayRate(displayFps, renderFps); + updateRefreshRateOverlayRate(vsyncRate, renderFps); } status_t DisplayDevice::initiateModeChange(const ActiveModeInfo& info, @@ -230,14 +230,14 @@ status_t DisplayDevice::initiateModeChange(const ActiveModeInfo& info, mIsModeSetPending = true; const auto& pendingMode = *info.modeOpt->modePtr; - ATRACE_INT(mActiveModeFPSHwcTrace.c_str(), pendingMode.getFps().getIntValue()); + ATRACE_INT(mActiveModeFPSHwcTrace.c_str(), pendingMode.getVsyncRate().getIntValue()); return mHwComposer.setActiveModeWithConstraints(getPhysicalId(), pendingMode.getHwcId(), constraints, outTimeline); } -void DisplayDevice::finalizeModeChange(DisplayModeId modeId, Fps displayFps, Fps renderFps) { - setActiveMode(modeId, displayFps, renderFps); +void DisplayDevice::finalizeModeChange(DisplayModeId modeId, Fps vsyncRate, Fps renderFps) { + setActiveMode(modeId, vsyncRate, renderFps); mIsModeSetPending = false; } @@ -253,7 +253,7 @@ nsecs_t DisplayDevice::getVsyncPeriodFromHWC() const { return vsyncPeriod; } - return refreshRateSelector().getActiveMode().modePtr->getVsyncPeriod(); + return refreshRateSelector().getActiveMode().modePtr->getVsyncRate().getPeriodNsecs(); } ui::Dataspace DisplayDevice::getCompositionDataSpace() const { @@ -466,17 +466,19 @@ void DisplayDevice::enableRefreshRateOverlay(bool enable, bool setByHwc, bool sh features |= RefreshRateOverlay::Features::SetByHwc; } + // TODO(b/296636258) Update to use the render rate range in VRR mode. const auto fpsRange = mRefreshRateSelector->getSupportedRefreshRateRange(); mRefreshRateOverlay = std::make_unique<RefreshRateOverlay>(fpsRange, features); mRefreshRateOverlay->setLayerStack(getLayerStack()); mRefreshRateOverlay->setViewport(getSize()); - updateRefreshRateOverlayRate(getActiveMode().modePtr->getFps(), getActiveMode().fps, setByHwc); + updateRefreshRateOverlayRate(getActiveMode().modePtr->getVsyncRate(), getActiveMode().fps, + setByHwc); } -void DisplayDevice::updateRefreshRateOverlayRate(Fps displayFps, Fps renderFps, bool setByHwc) { +void DisplayDevice::updateRefreshRateOverlayRate(Fps vsyncRate, Fps renderFps, bool setByHwc) { ATRACE_CALL(); if (mRefreshRateOverlay && (!mRefreshRateOverlay->isSetByHwc() || setByHwc)) { - mRefreshRateOverlay->changeRefreshRate(displayFps, renderFps); + mRefreshRateOverlay->changeRefreshRate(vsyncRate, renderFps); } } @@ -486,7 +488,7 @@ bool DisplayDevice::onKernelTimerChanged(std::optional<DisplayModeId> desiredMod const auto newMode = mRefreshRateSelector->onKernelTimerChanged(desiredModeId, timerExpired); if (newMode) { - updateRefreshRateOverlayRate(newMode->modePtr->getFps(), newMode->fps); + updateRefreshRateOverlayRate(newMode->modePtr->getVsyncRate(), newMode->fps); return true; } } @@ -541,14 +543,14 @@ auto DisplayDevice::setDesiredActiveMode(const ActiveModeInfo& info, bool force) return DesiredActiveModeAction::None; } - setActiveMode(desiredMode.getId(), desiredMode.getFps(), info.modeOpt->fps); + setActiveMode(desiredMode.getId(), desiredMode.getVsyncRate(), info.modeOpt->fps); return DesiredActiveModeAction::InitiateRenderRateSwitch; } // Set the render frame rate to the current physical refresh rate to schedule the next // frame as soon as possible. - setActiveMode(currentMode.modePtr->getId(), currentMode.modePtr->getFps(), - currentMode.modePtr->getFps()); + setActiveMode(currentMode.modePtr->getId(), currentMode.modePtr->getVsyncRate(), + currentMode.modePtr->getVsyncRate()); // Initiate a mode change. mDesiredActiveModeChanged = true; |