SF: Isolate modesetting in DisplayModeController
Move the per-display state machine for modesetting from DisplayDevice to DMC. In lieu of mStateLock, protect display lookup from multiple threads using a mutex internal to DMC, which fixes the following deadlock: OneShotTimer::loop SF::requestDisplayModes mStateLock SF::commit mStateLock SF::processDisplayChangesLocked (hotplug or resolution change) Scheduler::demotePacesetterDisplay OneShotTimer::stop A notable change is that {initiate,finalize}DisplayModeChange(s) are no longer called under mStateLock, thanks to DMC's granular, internal lock. finalizeDisplayModeChange still locks mStateLock for resolution changes. Add an ActiveModeListener to DMC and register a callback in SF to update the refresh rate overlay, which still lives in DisplayDevice for now. Fixes: 329450361 Bug: 241285876 Test: DisplayModeControllerTest Test: libsurfaceflinger_unittest Change-Id: I30ec756f134d2d67a70ac8797008dc792eac035e
Loading
Please register or sign in to comment