SF: query RefreshRateConfigs for kernel idle timer support
Use the per-display idle timer configuration instead of the global one.
Bug: 188838426
Test: check graphics.display.kernel_idle_timer.enabled can only be
toggled when the active display is a display that supports kernel
idle timer.
Change-Id: I4b2258723ed52eb6e94daaff04f65b80d9d0c9d5
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index b55ea4f..6dae07d 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -503,9 +503,6 @@
useFrameRateApi = use_frame_rate_api(true);
- mKernelIdleTimerEnabled = mSupportKernelIdleTimer = sysprop::support_kernel_idle_timer(false);
- base::SetProperty(KERNEL_IDLE_TIMER_PROP, mKernelIdleTimerEnabled ? "true" : "false");
-
mRefreshRateOverlaySpinner = property_get_bool("sf.debug.show_refresh_rate_overlay_spinner", 0);
// Debug property overrides ro. property
@@ -5913,16 +5910,18 @@
void SurfaceFlinger::toggleKernelIdleTimer() {
using KernelIdleTimerAction = scheduler::RefreshRateConfigs::KernelIdleTimerAction;
- // If the support for kernel idle timer is disabled in SF code, don't do anything.
- if (!mSupportKernelIdleTimer) {
- return;
- }
const auto display = getDefaultDisplayDeviceLocked();
if (!display) {
ALOGW("%s: default display is null", __func__);
return;
}
+ // If the support for kernel idle timer is disabled for the active display,
+ // don't do anything.
+ if (!display->refreshRateConfigs().supportsKernelIdleTimer()) {
+ return;
+ }
+
const KernelIdleTimerAction action = display->refreshRateConfigs().getIdleTimerAction();
switch (action) {
case KernelIdleTimerAction::TurnOff: