diff options
author | 2023-03-08 21:44:59 +0000 | |
---|---|---|
committer | 2023-04-14 20:37:03 +0000 | |
commit | 59a60b7b4f457bba27be21006a9ee148bb7e51e0 (patch) | |
tree | 5fb40bce68e64e667d484aebbd8ae41f7f212ad2 /services/surfaceflinger/DisplayDevice.cpp | |
parent | 763ee2914fc1a555ef13019ea4a2a14c17ea3678 (diff) |
Round up virtual display refresh rate
This semantics guarantees the virtual display will at least have the
specified refresh rate, e.g., if 60hz is requested on a 90hz display,
the virtual dislay will get a 90hz.
Bug: 266965278
Test: atest libsurfaceflinger_unittest
Change-Id: Ie7b30c5766454d0ad25cfd437f0498594c690a2e
Diffstat (limited to 'services/surfaceflinger/DisplayDevice.cpp')
-rw-r--r-- | services/surfaceflinger/DisplayDevice.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 01db0cdfdb..20f4de1d67 100644 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -535,8 +535,8 @@ void DisplayDevice::clearDesiredActiveModeState() { } void DisplayDevice::adjustRefreshRate(Fps pacesetterDisplayRefreshRate) { - using fps_approx_ops::operator==; - if (mRequestedRefreshRate == 0_Hz) { + using fps_approx_ops::operator<=; + if (mRequestedRefreshRate <= 0_Hz) { return; } @@ -547,7 +547,12 @@ void DisplayDevice::adjustRefreshRate(Fps pacesetterDisplayRefreshRate) { } unsigned divisor = static_cast<unsigned>( - std::round(pacesetterDisplayRefreshRate.getValue() / mRequestedRefreshRate.getValue())); + std::floor(pacesetterDisplayRefreshRate.getValue() / mRequestedRefreshRate.getValue())); + if (divisor == 0) { + mAdjustedRefreshRate = 0_Hz; + return; + } + mAdjustedRefreshRate = pacesetterDisplayRefreshRate / divisor; } |