diff options
author | 2023-09-21 13:45:12 -0700 | |
---|---|---|
committer | 2023-09-22 10:26:18 -0700 | |
commit | 3faf574466854576f79f5798f9350bc2cb0fb6f5 (patch) | |
tree | 8d4c03f1c8036a0cf10bd614f512ccb08607a78f | |
parent | 9b08532c0e28a9c5b5b7478c80448110d0e5cec8 (diff) |
[SF] Update only the render rate on the
refresh rate indicator
Test: manual
BUG: 284845445
Change-Id: I30c34f1363bd7b3a21741c6b3ee70b67b1938fc0
-rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 8 | ||||
-rw-r--r-- | services/surfaceflinger/RefreshRateOverlay.cpp | 9 | ||||
-rw-r--r-- | services/surfaceflinger/RefreshRateOverlay.h | 1 |
3 files changed, 16 insertions, 2 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 252ba8e753..1faf6a1bcb 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -477,8 +477,12 @@ void DisplayDevice::enableRefreshRateOverlay(bool enable, bool setByHwc, bool sh void DisplayDevice::updateRefreshRateOverlayRate(Fps vsyncRate, Fps renderFps, bool setByHwc) { ATRACE_CALL(); - if (mRefreshRateOverlay && (!mRefreshRateOverlay->isSetByHwc() || setByHwc)) { - mRefreshRateOverlay->changeRefreshRate(vsyncRate, renderFps); + if (mRefreshRateOverlay) { + if (!mRefreshRateOverlay->isSetByHwc() || setByHwc) { + mRefreshRateOverlay->changeRefreshRate(vsyncRate, renderFps); + } else { + mRefreshRateOverlay->changeRenderRate(renderFps); + } } } diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp index e918dc9045..be04c09fa3 100644 --- a/services/surfaceflinger/RefreshRateOverlay.cpp +++ b/services/surfaceflinger/RefreshRateOverlay.cpp @@ -19,6 +19,7 @@ #include "Client.h" #include "Layer.h" #include "RefreshRateOverlay.h" +#include "Utils/FlagUtils.h" #include <SkSurface.h> @@ -249,6 +250,14 @@ void RefreshRateOverlay::changeRefreshRate(Fps vsyncRate, Fps renderFps) { createTransaction().setBuffer(mSurfaceControl->get(), buffer).apply(); } +void RefreshRateOverlay::changeRenderRate(Fps renderFps) { + if (mFeatures.test(Features::RenderRate) && mVsyncRate && flagutils::vrrConfigEnabled()) { + mRenderFps = renderFps; + const auto buffer = getOrCreateBuffers(*mVsyncRate, renderFps)[mFrame]; + createTransaction().setBuffer(mSurfaceControl->get(), buffer).apply(); + } +} + void RefreshRateOverlay::animate() { if (!mFeatures.test(Features::Spinner) || !mVsyncRate) return; diff --git a/services/surfaceflinger/RefreshRateOverlay.h b/services/surfaceflinger/RefreshRateOverlay.h index c0fc79b0ba..ae334e54ef 100644 --- a/services/surfaceflinger/RefreshRateOverlay.h +++ b/services/surfaceflinger/RefreshRateOverlay.h @@ -50,6 +50,7 @@ public: void setLayerStack(ui::LayerStack); void setViewport(ui::Size); void changeRefreshRate(Fps, Fps); + void changeRenderRate(Fps); void animate(); bool isSetByHwc() const { return mFeatures.test(RefreshRateOverlay::Features::SetByHwc); } |