summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Oleg Petsjonkin <petsjonkin@google.com> 2023-02-15 17:15:50 +0000
committer Oleg Petšjonkin <petsjonkin@google.com> 2023-02-21 07:35:43 +0000
commit1356c3ba4968b4b0fe4003a4e3f220143cfad27f (patch)
tree0aa124a738682a8b1627471952e2109da7abc562
parent78d12d31d46c043f6a2acf13333c68af21f388bf (diff)
properly setting LayoutLimitedRefreshRate for LogicalDisplay
Test: atest LogicalDisplayTest Bug: 269222489 Change-Id: I241684e619fe28ea112ef5ecab92ea46db3d51b1
-rw-r--r--services/core/java/com/android/server/display/DisplayModeDirector.java2
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplay.java13
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplayMapper.java14
-rw-r--r--services/tests/servicestests/src/com/android/server/display/LogicalDisplayTest.java12
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);
+ }
}