Merge "Fix the issue where resetting the refresh rates and brightness thresholds in DeviceConfig wouldn't make the system to fallback to the default values" into tm-qpr-dev

This commit is contained in:
Rupesh Bansal
2023-03-21 15:31:58 +00:00
committed by Android (Google) Code Review
2 changed files with 94 additions and 34 deletions

View File

@@ -1230,13 +1230,12 @@ public class DisplayModeDirector {
} }
public void onDeviceConfigDefaultPeakRefreshRateChanged(Float defaultPeakRefreshRate) { public void onDeviceConfigDefaultPeakRefreshRateChanged(Float defaultPeakRefreshRate) {
if (defaultPeakRefreshRate == null) {
defaultPeakRefreshRate = (float) mContext.getResources().getInteger(
R.integer.config_defaultPeakRefreshRate);
}
if (mDefaultPeakRefreshRate != defaultPeakRefreshRate) {
synchronized (mLock) { synchronized (mLock) {
if (defaultPeakRefreshRate == null) {
setDefaultPeakRefreshRate(mDefaultDisplayDeviceConfig,
/* attemptLoadingFromDeviceConfig= */ false);
updateRefreshRateSettingLocked();
} else if (mDefaultPeakRefreshRate != defaultPeakRefreshRate) {
mDefaultPeakRefreshRate = defaultPeakRefreshRate; mDefaultPeakRefreshRate = defaultPeakRefreshRate;
updateRefreshRateSettingLocked(); updateRefreshRateSettingLocked();
} }
@@ -1869,11 +1868,20 @@ public class DisplayModeDirector {
mLowDisplayBrightnessThresholds = displayThresholds; mLowDisplayBrightnessThresholds = displayThresholds;
mLowAmbientBrightnessThresholds = ambientThresholds; mLowAmbientBrightnessThresholds = ambientThresholds;
} else { } else {
// Invalid or empty. Use device default. DisplayDeviceConfig displayDeviceConfig;
mLowDisplayBrightnessThresholds = mContext.getResources().getIntArray( synchronized (mLock) {
R.array.config_brightnessThresholdsOfPeakRefreshRate); displayDeviceConfig = mDefaultDisplayDeviceConfig;
mLowAmbientBrightnessThresholds = mContext.getResources().getIntArray( }
R.array.config_ambientThresholdsOfPeakRefreshRate); mLowDisplayBrightnessThresholds = loadBrightnessThresholds(
() -> mDeviceConfigDisplaySettings.getLowDisplayBrightnessThresholds(),
() -> displayDeviceConfig.getLowDisplayBrightnessThresholds(),
R.array.config_brightnessThresholdsOfPeakRefreshRate,
displayDeviceConfig, /* attemptLoadingFromDeviceConfig= */ false);
mLowAmbientBrightnessThresholds = loadBrightnessThresholds(
() -> mDeviceConfigDisplaySettings.getLowAmbientBrightnessThresholds(),
() -> displayDeviceConfig.getLowAmbientBrightnessThresholds(),
R.array.config_ambientThresholdsOfPeakRefreshRate,
displayDeviceConfig, /* attemptLoadingFromDeviceConfig= */ false);
} }
restartObserver(); restartObserver();
} }
@@ -1883,24 +1891,41 @@ public class DisplayModeDirector {
* DeviceConfig properties. * DeviceConfig properties.
*/ */
public void onDeviceConfigRefreshRateInLowZoneChanged(int refreshRate) { public void onDeviceConfigRefreshRateInLowZoneChanged(int refreshRate) {
if (refreshRate != mRefreshRateInLowZone) { if (refreshRate == -1) {
// Given there is no value available in DeviceConfig, lets not attempt loading it
// from there.
synchronized (mLock) {
loadRefreshRateInLowZone(mDefaultDisplayDeviceConfig,
/* attemptLoadingFromDeviceConfig= */ false);
}
restartObserver();
} else if (refreshRate != mRefreshRateInLowZone) {
mRefreshRateInLowZone = refreshRate; mRefreshRateInLowZone = refreshRate;
restartObserver(); restartObserver();
} }
} }
public void onDeviceConfigHighBrightnessThresholdsChanged(int[] displayThresholds, private void onDeviceConfigHighBrightnessThresholdsChanged(int[] displayThresholds,
int[] ambientThresholds) { int[] ambientThresholds) {
if (displayThresholds != null && ambientThresholds != null if (displayThresholds != null && ambientThresholds != null
&& displayThresholds.length == ambientThresholds.length) { && displayThresholds.length == ambientThresholds.length) {
mHighDisplayBrightnessThresholds = displayThresholds; mHighDisplayBrightnessThresholds = displayThresholds;
mHighAmbientBrightnessThresholds = ambientThresholds; mHighAmbientBrightnessThresholds = ambientThresholds;
} else { } else {
// Invalid or empty. Use device default. DisplayDeviceConfig displayDeviceConfig;
mHighDisplayBrightnessThresholds = mContext.getResources().getIntArray( synchronized (mLock) {
R.array.config_highDisplayBrightnessThresholdsOfFixedRefreshRate); displayDeviceConfig = mDefaultDisplayDeviceConfig;
mHighAmbientBrightnessThresholds = mContext.getResources().getIntArray( }
R.array.config_highAmbientBrightnessThresholdsOfFixedRefreshRate); mHighDisplayBrightnessThresholds = loadBrightnessThresholds(
() -> mDeviceConfigDisplaySettings.getHighDisplayBrightnessThresholds(),
() -> displayDeviceConfig.getHighDisplayBrightnessThresholds(),
R.array.config_highDisplayBrightnessThresholdsOfFixedRefreshRate,
displayDeviceConfig, /* attemptLoadingFromDeviceConfig= */ false);
mHighAmbientBrightnessThresholds = loadBrightnessThresholds(
() -> mDeviceConfigDisplaySettings.getHighAmbientBrightnessThresholds(),
() -> displayDeviceConfig.getHighAmbientBrightnessThresholds(),
R.array.config_highAmbientBrightnessThresholdsOfFixedRefreshRate,
displayDeviceConfig, /* attemptLoadingFromDeviceConfig= */ false);
} }
restartObserver(); restartObserver();
} }
@@ -1910,7 +1935,15 @@ public class DisplayModeDirector {
* DeviceConfig properties. * DeviceConfig properties.
*/ */
public void onDeviceConfigRefreshRateInHighZoneChanged(int refreshRate) { public void onDeviceConfigRefreshRateInHighZoneChanged(int refreshRate) {
if (refreshRate != mRefreshRateInHighZone) { if (refreshRate == -1) {
// Given there is no value available in DeviceConfig, lets not attempt loading it
// from there.
synchronized (mLock) {
loadRefreshRateInHighZone(mDefaultDisplayDeviceConfig,
/* attemptLoadingFromDeviceConfig= */ false);
}
restartObserver();
} else if (refreshRate != mRefreshRateInHighZone) {
mRefreshRateInHighZone = refreshRate; mRefreshRateInHighZone = refreshRate;
restartObserver(); restartObserver();
} }
@@ -2870,10 +2903,8 @@ public class DisplayModeDirector {
new Pair<>(lowDisplayBrightnessThresholds, lowAmbientBrightnessThresholds)) new Pair<>(lowDisplayBrightnessThresholds, lowAmbientBrightnessThresholds))
.sendToTarget(); .sendToTarget();
if (refreshRateInLowZone != -1) {
mHandler.obtainMessage(MSG_REFRESH_RATE_IN_LOW_ZONE_CHANGED, refreshRateInLowZone, mHandler.obtainMessage(MSG_REFRESH_RATE_IN_LOW_ZONE_CHANGED, refreshRateInLowZone,
0).sendToTarget(); 0).sendToTarget();
}
int[] highDisplayBrightnessThresholds = getHighDisplayBrightnessThresholds(); int[] highDisplayBrightnessThresholds = getHighDisplayBrightnessThresholds();
int[] highAmbientBrightnessThresholds = getHighAmbientBrightnessThresholds(); int[] highAmbientBrightnessThresholds = getHighAmbientBrightnessThresholds();
@@ -2883,10 +2914,8 @@ public class DisplayModeDirector {
new Pair<>(highDisplayBrightnessThresholds, highAmbientBrightnessThresholds)) new Pair<>(highDisplayBrightnessThresholds, highAmbientBrightnessThresholds))
.sendToTarget(); .sendToTarget();
if (refreshRateInHighZone != -1) {
mHandler.obtainMessage(MSG_REFRESH_RATE_IN_HIGH_ZONE_CHANGED, refreshRateInHighZone, mHandler.obtainMessage(MSG_REFRESH_RATE_IN_HIGH_ZONE_CHANGED, refreshRateInHighZone,
0).sendToTarget(); 0).sendToTarget();
}
synchronized (mLock) { synchronized (mLock) {
final int refreshRateInHbmSunlight = final int refreshRateInHbmSunlight =

View File

@@ -1905,7 +1905,7 @@ public class DisplayModeDirectorTest {
// We don't expect any interaction with DeviceConfig when the director is initialized // We don't expect any interaction with DeviceConfig when the director is initialized
// because we explicitly avoid doing this as this can lead to a latency spike in the // because we explicitly avoid doing this as this can lead to a latency spike in the
// startup of DisplayManagerService // startup of DisplayManagerService
// Verify all the loaded values are from DisplayDeviceConfig // Verify all the loaded values are from config.xml
assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 45, 0.0); assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 45, 0.0);
assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 75, assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 75,
0.0); 0.0);
@@ -1937,6 +1937,7 @@ public class DisplayModeDirectorTest {
when(displayDeviceConfig.getDefaultRefreshRateInHbmSunlight()).thenReturn(75); when(displayDeviceConfig.getDefaultRefreshRateInHbmSunlight()).thenReturn(75);
director.defaultDisplayDeviceUpdated(displayDeviceConfig); director.defaultDisplayDeviceUpdated(displayDeviceConfig);
// Verify the new values are from the freshly loaded DisplayDeviceConfig.
assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0); assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0);
assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 65, assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 65,
0.0); 0.0);
@@ -1966,6 +1967,7 @@ public class DisplayModeDirectorTest {
config.setRefreshRateInHbmSunlight(80); config.setRefreshRateInHbmSunlight(80);
director.defaultDisplayDeviceUpdated(displayDeviceConfig); director.defaultDisplayDeviceUpdated(displayDeviceConfig);
// Verify the values are loaded from the DeviceConfig.
assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0); assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0);
assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 60, assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 60,
0.0); 0.0);
@@ -1981,6 +1983,35 @@ public class DisplayModeDirectorTest {
new int[]{20}); new int[]{20});
assertEquals(director.getHbmObserver().getRefreshRateInHbmHdr(), 70); assertEquals(director.getHbmObserver().getRefreshRateInHbmHdr(), 70);
assertEquals(director.getHbmObserver().getRefreshRateInHbmSunlight(), 80); assertEquals(director.getHbmObserver().getRefreshRateInHbmSunlight(), 80);
// Reset the DeviceConfig
config.setDefaultPeakRefreshRate(null);
config.setRefreshRateInHighZone(null);
config.setRefreshRateInLowZone(null);
config.setLowAmbientBrightnessThresholds(new int[]{});
config.setLowDisplayBrightnessThresholds(new int[]{});
config.setHighDisplayBrightnessThresholds(new int[]{});
config.setHighAmbientBrightnessThresholds(new int[]{});
config.setRefreshRateInHbmHdr(null);
config.setRefreshRateInHbmSunlight(null);
waitForIdleSync();
// verify the new values now fallback to DisplayDeviceConfig
assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0);
assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 65,
0.0);
assertEquals(director.getBrightnessObserver().getRefreshRateInHighZone(), 55);
assertEquals(director.getBrightnessObserver().getRefreshRateInLowZone(), 50);
assertArrayEquals(director.getBrightnessObserver().getHighDisplayBrightnessThreshold(),
new int[]{210});
assertArrayEquals(director.getBrightnessObserver().getHighAmbientBrightnessThreshold(),
new int[]{2100});
assertArrayEquals(director.getBrightnessObserver().getLowDisplayBrightnessThreshold(),
new int[]{25});
assertArrayEquals(director.getBrightnessObserver().getLowAmbientBrightnessThreshold(),
new int[]{30});
assertEquals(director.getHbmObserver().getRefreshRateInHbmHdr(), 65);
assertEquals(director.getHbmObserver().getRefreshRateInHbmSunlight(), 75);
} }
@Test @Test
@@ -2140,18 +2171,18 @@ public class DisplayModeDirectorTest {
super.addOnPropertiesChangedListener(namespace, executor, listener); super.addOnPropertiesChangedListener(namespace, executor, listener);
} }
void setRefreshRateInLowZone(int fps) { void setRefreshRateInLowZone(Integer fps) {
putPropertyAndNotify( putPropertyAndNotify(
DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_LOW_ZONE, DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_LOW_ZONE,
String.valueOf(fps)); String.valueOf(fps));
} }
void setRefreshRateInHbmSunlight(int fps) { void setRefreshRateInHbmSunlight(Integer fps) {
putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER, putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
KEY_REFRESH_RATE_IN_HBM_SUNLIGHT, String.valueOf(fps)); KEY_REFRESH_RATE_IN_HBM_SUNLIGHT, String.valueOf(fps));
} }
void setRefreshRateInHbmHdr(int fps) { void setRefreshRateInHbmHdr(Integer fps) {
putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER, putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
KEY_REFRESH_RATE_IN_HBM_HDR, String.valueOf(fps)); KEY_REFRESH_RATE_IN_HBM_HDR, String.valueOf(fps));
} }
@@ -2187,13 +2218,13 @@ public class DisplayModeDirectorTest {
thresholds); thresholds);
} }
void setRefreshRateInHighZone(int fps) { void setRefreshRateInHighZone(Integer fps) {
putPropertyAndNotify( putPropertyAndNotify(
DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_HIGH_ZONE, DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_HIGH_ZONE,
String.valueOf(fps)); String.valueOf(fps));
} }
void setDefaultPeakRefreshRate(int fps) { void setDefaultPeakRefreshRate(Integer fps) {
putPropertyAndNotify( putPropertyAndNotify(
DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_PEAK_REFRESH_RATE_DEFAULT, DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_PEAK_REFRESH_RATE_DEFAULT,
String.valueOf(fps)); String.valueOf(fps));