Split refresh rate range into two ranges
To prevent low-priority refresh rate considerations from overriding the app frame rate as specified via the new setFrameRate() api, split the display refresh rate range into "primary" and "app request" ranges. The primary range includes the low priority considerations, while the app request range removes two lower priority considerations. In general, surface flinger will keep the display refresh rate within the primary range, but layers with frame rate settings via the setFrameRate() api may cause surface flinger to pick a refresh rate outside the primary range. Surface flinger will never choose a refresh rate outside the app request range specified by display manager. Bug: 148978562 Test: - Added a new unit test to DisplayModeDirectorTest to verify that display manager strips lower priority considerations when deciding the app request range. - Added a new unit test to RefreshRateConfigsTest to verify RefreshRateConfigs handles the primary vs app request range correctly. - Manual test: Confirmed that with the "force 90Hz refresh rate" option turned on, we don't switch to 60Hz when playing a 60Hz video. - Manual test: Confirmed that with the "force 90Hz refresh rate" option turned on, when an app calls setFrameRate(60), we stay at 60Hz. - Manual test: Modified a Pixel 4 XL to prefer 60Hz in low brightness, entered low brightness, and confirmed we don't touch boost to 90Hz. - Manual test: Confirmed that Maps stays at 60Hz on Pixel 4. - Manual test: Turned on verbose logs in RefreshRateConfigs.cpp, confirmed they look good. - Manual test: Inspected dumpsys output, confirmed the primary and app request refresh rate ranges are printed correctly. Change-Id: I2a7f5ded0831c90b9b1ac09d941963a63b824098
Loading
Please register or sign in to comment