diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index 8e01b1434044e..89f1313a59e1b 100644 --- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java +++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java @@ -137,6 +137,8 @@ import javax.xml.datatype.DatatypeConfigurationException; * * * 75 + * 75 + * 75 * * * 50 @@ -404,6 +406,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[]{}; @@ -584,6 +587,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. @@ -1324,8 +1336,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; } /** @@ -1333,8 +1344,7 @@ public class DisplayDeviceConfig { * high lux. */ public int getDefaultRefreshRateInHbmSunlight() { - return mContext.getResources().getInteger( - R.integer.config_defaultRefreshRateInHbmSunlight); + return mDefaultRefreshRateInHbmSunlight; } /** @@ -1490,6 +1500,8 @@ public class DisplayDeviceConfig { + ", mDefaultHighBlockingZoneRefreshRate= " + mDefaultHighBlockingZoneRefreshRate + ", mDefaultPeakRefreshRate= " + mDefaultPeakRefreshRate + ", mDefaultRefreshRate= " + mDefaultRefreshRate + + ", mDefaultRefreshRateInHbmHdr= " + mDefaultRefreshRateInHbmHdr + + ", mDefaultRefreshRateInHbmSunlight= " + mDefaultRefreshRateInHbmSunlight + ", mLowDisplayBrightnessThresholds= " + Arrays.toString(mLowDisplayBrightnessThresholds) + ", mLowAmbientBrightnessThresholds= " @@ -1805,6 +1817,7 @@ public class DisplayDeviceConfig { : refreshRateConfigs.getHigherBlockingZoneConfigs(); loadPeakDefaultRefreshRate(refreshRateConfigs); loadDefaultRefreshRate(refreshRateConfigs); + loadDefaultRefreshRateInHbm(refreshRateConfigs); loadLowerRefreshRateBlockingZones(lowerBlockingZoneConfig); loadHigherRefreshRateBlockingZones(higherBlockingZoneConfig); } @@ -1829,6 +1842,26 @@ public class DisplayDeviceConfig { } } + 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); + } + } + /** * Loads the refresh rate configurations pertaining to the upper blocking zones. */ 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 abe48f894e599..91a11380c81ce 100644 --- a/services/core/xsd/display-device-config/display-device-config.xsd +++ b/services/core/xsd/display-device-config/display-device-config.xsd @@ -472,6 +472,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 2c97af55f0924..1110d86e1fc19 100644 --- a/services/core/xsd/display-device-config/schema/current.txt +++ b/services/core/xsd/display-device-config/schema/current.txt @@ -188,10 +188,14 @@ 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 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); } 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 d1fbc1e50e830..8f70617a66ea2 100644 --- a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java +++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java @@ -158,6 +158,8 @@ public final class DisplayDeviceConfigTest { assertEquals(90, mDisplayDeviceConfig.getDefaultHighBlockingZoneRefreshRate()); assertEquals(85, mDisplayDeviceConfig.getDefaultPeakRefreshRate()); assertEquals(45, mDisplayDeviceConfig.getDefaultRefreshRate()); + assertEquals(82, mDisplayDeviceConfig.getDefaultRefreshRateInHbmHdr()); + assertEquals(83, mDisplayDeviceConfig.getDefaultRefreshRateInHbmSunlight()); assertArrayEquals(new int[]{45, 55}, mDisplayDeviceConfig.getLowDisplayBrightnessThresholds()); assertArrayEquals(new int[]{50, 60}, @@ -465,6 +467,8 @@ public final class DisplayDeviceConfigTest { + "\n" + "45\n" + "85\n" + + "82\n" + + "83\n" + "\n" + "75\n" + "\n"