summaryrefslogtreecommitdiff
path: root/services/surfaceflinger/DisplayDevice.cpp
diff options
context:
space:
mode:
author Huihong Luo <huisinro@google.com> 2023-03-08 21:44:59 +0000
committer Huihong Luo <huisinro@google.com> 2023-04-14 20:37:03 +0000
commit59a60b7b4f457bba27be21006a9ee148bb7e51e0 (patch)
tree5fb40bce68e64e667d484aebbd8ae41f7f212ad2 /services/surfaceflinger/DisplayDevice.cpp
parent763ee2914fc1a555ef13019ea4a2a14c17ea3678 (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.cpp11
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;
}