SF: Split Scheduler::setRefreshRateSelector
Add helper functions to bind/unbind the idle timer.
Bug: 255635821
Test: Build (-Wthread-safety)
Change-Id: I68cd1274e2b0591652a259b7f60d0a370883e512
diff --git a/services/surfaceflinger/Scheduler/Scheduler.h b/services/surfaceflinger/Scheduler/Scheduler.h
index 901cf74..797ec96 100644
--- a/services/surfaceflinger/Scheduler/Scheduler.h
+++ b/services/surfaceflinger/Scheduler/Scheduler.h
@@ -108,7 +108,8 @@
void startTimers();
using RefreshRateSelectorPtr = std::shared_ptr<RefreshRateSelector>;
- void setRefreshRateSelector(RefreshRateSelectorPtr) EXCLUDES(mRefreshRateSelectorLock);
+ void setRefreshRateSelector(RefreshRateSelectorPtr) REQUIRES(kMainThreadContext)
+ EXCLUDES(mRefreshRateSelectorLock);
void registerDisplay(PhysicalDisplayId, RefreshRateSelectorPtr);
void unregisterDisplay(PhysicalDisplayId);
@@ -253,6 +254,13 @@
sp<EventThreadConnection> createConnectionInternal(
EventThread*, EventRegistrationFlags eventRegistration = {});
+ void bindIdleTimer(RefreshRateSelector&) REQUIRES(kMainThreadContext, mRefreshRateSelectorLock);
+
+ // Blocks until the timer thread exits. `mRefreshRateSelectorLock` must not be locked by the
+ // caller on the main thread to avoid deadlock, since the timer thread locks it before exit.
+ static void unbindIdleTimer(RefreshRateSelector&) REQUIRES(kMainThreadContext)
+ EXCLUDES(mRefreshRateSelectorLock);
+
// Update feature state machine to given state when corresponding timer resets or expires.
void kernelIdleTimerCallback(TimerState) EXCLUDES(mRefreshRateSelectorLock);
void idleTimerCallback(TimerState);