diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index ac9400d0d96fc..c0c286b7e72cd 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -154,6 +154,8 @@ import javax.xml.datatype.DatatypeConfigurationException; * * * 75 + * 75 + * 75 * * * 50 @@ -429,6 +431,7 @@ public class DisplayDeviceConfig { private static final long STABLE_FLAG = 1L << 62; private static final int DEFAULT_PEAK_REFRESH_RATE = 0; private static final int DEFAULT_REFRESH_RATE = 60; + private static final int DEFAULT_REFRESH_RATE_IN_HBM = 0; private static final int DEFAULT_LOW_REFRESH_RATE = 60; private static final int DEFAULT_HIGH_REFRESH_RATE = 0; private static final int[] DEFAULT_BRIGHTNESS_THRESHOLDS = new int[]{}; @@ -608,6 +611,15 @@ public class DisplayDeviceConfig { */ private int mDefaultRefreshRate = DEFAULT_REFRESH_RATE; + /** + * Default refresh rate while the device has high brightness mode enabled for HDR. + */ + private int mDefaultRefreshRateInHbmHdr = DEFAULT_REFRESH_RATE_IN_HBM; + + /** + * Default refresh rate while the device has high brightness mode enabled for Sunlight. + */ + private int mDefaultRefreshRateInHbmSunlight = DEFAULT_REFRESH_RATE_IN_HBM; /** * Default refresh rate in the high zone defined by brightness and ambient thresholds. * If non-positive, then the refresh rate is unchanged even if thresholds are configured. @@ -1348,8 +1360,7 @@ public class DisplayDeviceConfig { * @return Default refresh rate while the device has high brightness mode enabled for HDR. */ public int getDefaultRefreshRateInHbmHdr() { - return mContext.getResources().getInteger( - R.integer.config_defaultRefreshRateInHbmHdr); + return mDefaultRefreshRateInHbmHdr; } /** @@ -1357,8 +1368,7 @@ public class DisplayDeviceConfig { * high lux. */ public int getDefaultRefreshRateInHbmSunlight() { - return mContext.getResources().getInteger( - R.integer.config_defaultRefreshRateInHbmSunlight); + return mDefaultRefreshRateInHbmSunlight; } /** @@ -1540,6 +1550,8 @@ public class DisplayDeviceConfig { + ", mDefaultPeakRefreshRate= " + mDefaultPeakRefreshRate + ", mDefaultRefreshRate= " + mDefaultRefreshRate + ", mRefreshRateZoneProfiles= " + mRefreshRateZoneProfiles + + ", mDefaultRefreshRateInHbmHdr= " + mDefaultRefreshRateInHbmHdr + + ", mDefaultRefreshRateInHbmSunlight= " + mDefaultRefreshRateInHbmSunlight + ", mLowDisplayBrightnessThresholds= " + Arrays.toString(mLowDisplayBrightnessThresholds) + ", mLowAmbientBrightnessThresholds= " @@ -1866,6 +1878,7 @@ public class DisplayDeviceConfig { : refreshRateConfigs.getHigherBlockingZoneConfigs(); loadPeakDefaultRefreshRate(refreshRateConfigs); loadDefaultRefreshRate(refreshRateConfigs); + loadDefaultRefreshRateInHbm(refreshRateConfigs); loadLowerRefreshRateBlockingZones(lowerBlockingZoneConfig); loadHigherRefreshRateBlockingZones(higherBlockingZoneConfig); loadRefreshRateZoneProfiles(refreshRateConfigs); @@ -1902,7 +1915,27 @@ public class DisplayDeviceConfig { mRefreshRateZoneProfiles.put( zone.getId(), new SurfaceControl.RefreshRateRange( - range.getMinimum().floatValue(), range.getMaximum().floatValue())); + range.getMinimum().floatValue(), range.getMaximum().floatValue())); + } + } + + private void loadDefaultRefreshRateInHbm(RefreshRateConfigs refreshRateConfigs) { + if (refreshRateConfigs != null + && refreshRateConfigs.getDefaultRefreshRateInHbmHdr() != null) { + mDefaultRefreshRateInHbmHdr = refreshRateConfigs.getDefaultRefreshRateInHbmHdr() + .intValue(); + } else { + mDefaultRefreshRateInHbmHdr = mContext.getResources().getInteger( + R.integer.config_defaultRefreshRateInHbmHdr); + } + + if (refreshRateConfigs != null + && refreshRateConfigs.getDefaultRefreshRateInHbmSunlight() != null) { + mDefaultRefreshRateInHbmSunlight = + refreshRateConfigs.getDefaultRefreshRateInHbmSunlight().intValue(); + } else { + mDefaultRefreshRateInHbmSunlight = mContext.getResources().getInteger( + R.integer.config_defaultRefreshRateInHbmSunlight); } } diff --git a/services/core/xsd/display-device-config/display-device-config.xsd b/services/core/xsd/display-device-config/display-device-config.xsd index ef5aa604279b6..9260d2b4194ab 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -481,6 +481,14 @@ minOccurs="0" maxOccurs="1"> + + + + + + diff --git a/services/core/xsd/display-device-config/schema/current.txt b/services/core/xsd/display-device-config/schema/current.txt index ed9f95962f683..e81c27d94c88a 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -192,11 +192,15 @@ package com.android.server.display.config { ctor public RefreshRateConfigs(); method public final java.math.BigInteger getDefaultPeakRefreshRate(); method public final java.math.BigInteger getDefaultRefreshRate(); + method public final java.math.BigInteger getDefaultRefreshRateInHbmHdr(); + method public final java.math.BigInteger getDefaultRefreshRateInHbmSunlight(); method public final com.android.server.display.config.BlockingZoneConfig getHigherBlockingZoneConfigs(); method public final com.android.server.display.config.BlockingZoneConfig getLowerBlockingZoneConfigs(); method public final com.android.server.display.config.RefreshRateZoneProfiles getRefreshRateZoneProfiles(); method public final void setDefaultPeakRefreshRate(java.math.BigInteger); method public final void setDefaultRefreshRate(java.math.BigInteger); + method public final void setDefaultRefreshRateInHbmHdr(java.math.BigInteger); + method public final void setDefaultRefreshRateInHbmSunlight(java.math.BigInteger); method public final void setHigherBlockingZoneConfigs(com.android.server.display.config.BlockingZoneConfig); method public final void setLowerBlockingZoneConfigs(com.android.server.display.config.BlockingZoneConfig); method public final void setRefreshRateZoneProfiles(com.android.server.display.config.RefreshRateZoneProfiles); diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java index 5ebc901fae666..fdfcd81cbef92 100644 --- a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -157,13 +157,13 @@ public final class DisplayDeviceConfigTest { assertEquals(90, mDisplayDeviceConfig.getDefaultHighBlockingZoneRefreshRate()); assertEquals(85, mDisplayDeviceConfig.getDefaultPeakRefreshRate()); assertEquals(45, mDisplayDeviceConfig.getDefaultRefreshRate()); - assertEquals(2, mDisplayDeviceConfig.getRefreshRangeProfiles().size()); assertEquals(60, mDisplayDeviceConfig.getRefreshRange("test1").min, SMALL_DELTA); assertEquals(60, mDisplayDeviceConfig.getRefreshRange("test1").max, SMALL_DELTA); assertEquals(80, mDisplayDeviceConfig.getRefreshRange("test2").min, SMALL_DELTA); assertEquals(90, mDisplayDeviceConfig.getRefreshRange("test2").max, SMALL_DELTA); - + assertEquals(82, mDisplayDeviceConfig.getDefaultRefreshRateInHbmHdr()); + assertEquals(83, mDisplayDeviceConfig.getDefaultRefreshRateInHbmSunlight()); assertArrayEquals(new int[]{45, 55}, mDisplayDeviceConfig.getLowDisplayBrightnessThresholds()); assertArrayEquals(new int[]{50, 60}, @@ -575,6 +575,8 @@ public final class DisplayDeviceConfigTest { + "\n" + "\n" + "" + + "82\n" + + "83\n" + "\n" + "75\n" + "\n"