SF: Toggle VSYNC in EventThread with state machine
This CL simplifies the logic to enable and disable VSYNC in the
EventThread loop.
Bug: 74619554
Test: libsurfaceflinger_unittest
Test: dumpsys SurfaceFlinger --vsync
Change-Id: I7637fcf1982d60cfced5dae68c74556f0ee67a0f
diff --git a/services/surfaceflinger/Scheduler/EventThread.h b/services/surfaceflinger/Scheduler/EventThread.h
index 1a8ebb7..f093e47 100644
--- a/services/surfaceflinger/Scheduler/EventThread.h
+++ b/services/surfaceflinger/Scheduler/EventThread.h
@@ -176,9 +176,6 @@
void removeDisplayEventConnectionLocked(const wp<EventThreadConnection>& connection)
REQUIRES(mMutex);
- void enableVSyncLocked() REQUIRES(mMutex);
- void disableVSyncLocked() REQUIRES(mMutex);
-
// Implements VSyncSource::Callback
void onVSyncEvent(nsecs_t timestamp) override;
@@ -212,11 +209,17 @@
VSyncState mVSyncState GUARDED_BY(mMutex);
- bool mVsyncEnabled GUARDED_BY(mMutex) = false;
- bool mKeepRunning GUARDED_BY(mMutex) = true;
+ // State machine for event loop.
+ enum class State {
+ Idle,
+ Quit,
+ SyntheticVSync,
+ VSync,
+ };
- // for debugging
- bool mDebugVsyncEnabled GUARDED_BY(mMutex) = false;
+ State mState GUARDED_BY(mMutex) = State::Idle;
+
+ static const char* toCString(State);
// Callback that resets the idle timer when the next vsync is received.
ResetIdleTimerCallback mResetIdleTimer;