diff options
| author | 2023-02-15 17:15:50 +0000 | |
|---|---|---|
| committer | 2023-02-21 07:35:43 +0000 | |
| commit | 1356c3ba4968b4b0fe4003a4e3f220143cfad27f (patch) | |
| tree | 0aa124a738682a8b1627471952e2109da7abc562 | |
| parent | 78d12d31d46c043f6a2acf13333c68af21f388bf (diff) | |
properly setting LayoutLimitedRefreshRate for LogicalDisplay
Test: atest LogicalDisplayTest
Bug: 269222489
Change-Id: I241684e619fe28ea112ef5ecab92ea46db3d51b1
4 files changed, 33 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/display/DisplayModeDirector.java b/services/core/java/com/android/server/display/DisplayModeDirector.java index d26968a942d0..31f5ab7dfe98 100644 --- a/services/core/java/com/android/server/display/DisplayModeDirector.java +++ b/services/core/java/com/android/server/display/DisplayModeDirector.java @@ -1352,6 +1352,8 @@ public class DisplayModeDirector { return "PRIORITY_USER_SETTING_PEAK_RENDER_FRAME_RATE"; case PRIORITY_AUTH_OPTIMIZER_RENDER_FRAME_RATE: return "PRIORITY_AUTH_OPTIMIZER_RENDER_FRAME_RATE"; + case PRIORITY_LAYOUT_LIMITED_FRAME_RATE: + return "PRIORITY_LAYOUT_LIMITED_FRAME_RATE"; default: return Integer.toString(priority); } diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java index 2104ee3e50cb..fc90db66c1cb 100644 --- a/services/core/java/com/android/server/display/LogicalDisplay.java +++ b/services/core/java/com/android/server/display/LogicalDisplay.java @@ -332,6 +332,19 @@ final class LogicalDisplay { } /** + * Updates layoutLimitedRefreshRate + * + * @param layoutLimitedRefreshRate refresh rate limited by layout or null. + */ + public void updateLayoutLimitedRefreshRateLocked( + @Nullable SurfaceControl.RefreshRateRange layoutLimitedRefreshRate) { + if (!Objects.equals(layoutLimitedRefreshRate, mBaseDisplayInfo.layoutLimitedRefreshRate)) { + mBaseDisplayInfo.layoutLimitedRefreshRate = layoutLimitedRefreshRate; + mInfo.set(null); + } + } + + /** * Updates the state of the logical display based on the available display devices. * The logical display might become invalid if it is attached to a display device * that no longer exists. diff --git a/services/core/java/com/android/server/display/LogicalDisplayMapper.java b/services/core/java/com/android/server/display/LogicalDisplayMapper.java index 80e76b63ad35..2ac7d9d1a73e 100644 --- a/services/core/java/com/android/server/display/LogicalDisplayMapper.java +++ b/services/core/java/com/android/server/display/LogicalDisplayMapper.java @@ -1016,7 +1016,12 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { newDisplay.setDevicePositionLocked(displayLayout.getPosition()); newDisplay.setLeadDisplayLocked(displayLayout.getLeadDisplayId()); - setLayoutLimitedRefreshRate(newDisplay, device, displayLayout); + newDisplay.updateLayoutLimitedRefreshRateLocked( + device.getDisplayDeviceConfig().getRefreshRange( + displayLayout.getRefreshRateZoneId() + ) + ); + setEnabledLocked(newDisplay, displayLayout.isEnabled()); newDisplay.setBrightnessThrottlingDataIdLocked( displayLayout.getBrightnessThrottlingMapId() == null @@ -1027,13 +1032,6 @@ class LogicalDisplayMapper implements DisplayDeviceRepository.Listener { } } - private void setLayoutLimitedRefreshRate(@NonNull LogicalDisplay logicalDisplay, - @NonNull DisplayDevice device, @NonNull Layout.Display display) { - DisplayDeviceConfig config = device.getDisplayDeviceConfig(); - DisplayInfo info = logicalDisplay.getDisplayInfoLocked(); - info.layoutLimitedRefreshRate = config.getRefreshRange(display.getRefreshRateZoneId()); - } - /** * Creates a new logical display for the specified device and display Id and adds it to the list * of logical displays. diff --git a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java index d28050d29b4a..ff89be75c5d4 100644 --- a/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java +++ b/services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java @@ -166,4 +166,16 @@ public class LogicalDisplayTest { assertEquals(Display.REMOVE_MODE_MOVE_CONTENT_TO_PRIMARY, mLogicalDisplay.getDisplayInfoLocked().removeMode); } + + @Test + public void testLayoutLimitedRefreshRateNotClearedAfterUpdate() { + SurfaceControl.RefreshRateRange refreshRateRange = new SurfaceControl.RefreshRateRange(1, + 2); + mLogicalDisplay.updateLayoutLimitedRefreshRateLocked(refreshRateRange); + mLogicalDisplay.updateDisplayGroupIdLocked(1); + + DisplayInfo result = mLogicalDisplay.getDisplayInfoLocked(); + + assertEquals(refreshRateRange, result.layoutLimitedRefreshRate); + } } |