Merge "If smooth display is off, brightness change should not trigger rr change" into udc-dev

This commit is contained in:
Oleg Petšjonkin
2023-05-03 17:21:23 +00:00
committed by Android (Google) Code Review
2 changed files with 68 additions and 4 deletions

View File

@@ -1977,10 +1977,8 @@ public class DisplayModeDirector {
}
updateSensorStatus();
if (mRefreshRateChangeable) {
synchronized (mLock) {
onBrightnessChangedLocked();
}
synchronized (mLock) {
onBrightnessChangedLocked();
}
}
@@ -2071,6 +2069,9 @@ public class DisplayModeDirector {
}
private void onBrightnessChangedLocked() {
if (!mRefreshRateChangeable) {
return;
}
Vote refreshRateVote = null;
Vote refreshRateSwitchingVote = null;

View File

@@ -914,6 +914,69 @@ public class DisplayModeDirectorTest {
.isEqualTo(updatedAmbientThresholds);
}
@Test
public void setBrightness_doesNotLockFpsIfSmoothDisplayIsOff() {
DisplayModeDirector director =
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
setPeakRefreshRate(60); // set smooth display ON
director.getSettingsObserver().setDefaultRefreshRate(90);
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
final FakeDeviceConfig config = mInjector.getDeviceConfig();
config.setRefreshRateInLowZone(90);
config.setLowDisplayBrightnessThresholds(new int[] { 10 });
config.setLowAmbientBrightnessThresholds(new int[] { 20 });
director.start(createMockSensorManager(createLightSensor()));
ArgumentCaptor<DisplayListener> displayListenerCaptor =
ArgumentCaptor.forClass(DisplayListener.class);
verify(mInjector).registerDisplayListener(displayListenerCaptor.capture(),
any(Handler.class),
eq(DisplayManager.EVENT_FLAG_DISPLAY_CHANGED
| DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS));
DisplayListener displayListener = displayListenerCaptor.getValue();
setBrightness(10, 10, displayListener);
Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_FLICKER_REFRESH_RATE);
assertThat(vote).isNull();
vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_FLICKER_REFRESH_RATE_SWITCH);
assertThat(vote).isNull();
}
@Test
public void setBrightness_locksFpsIfSmoothDisplayIsOn() {
DisplayModeDirector director =
createDirectorFromRefreshRateArray(new float[] {60.f, 90.f}, 0);
setPeakRefreshRate(90); // set smooth display ON
director.getSettingsObserver().setDefaultRefreshRate(90);
director.getBrightnessObserver().setDefaultDisplayState(Display.STATE_ON);
final FakeDeviceConfig config = mInjector.getDeviceConfig();
config.setRefreshRateInLowZone(90);
config.setLowDisplayBrightnessThresholds(new int[] { 10 });
config.setLowAmbientBrightnessThresholds(new int[] { 20 });
director.start(createMockSensorManager(createLightSensor()));
ArgumentCaptor<DisplayListener> displayListenerCaptor =
ArgumentCaptor.forClass(DisplayListener.class);
verify(mInjector).registerDisplayListener(displayListenerCaptor.capture(),
any(Handler.class),
eq(DisplayManager.EVENT_FLAG_DISPLAY_CHANGED
| DisplayManager.EVENT_FLAG_DISPLAY_BRIGHTNESS));
DisplayListener displayListener = displayListenerCaptor.getValue();
setBrightness(10, 10, displayListener);
Vote vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_FLICKER_REFRESH_RATE);
assertVoteForPhysicalRefreshRate(vote, 90 /*fps*/);
vote = director.getVote(Display.DEFAULT_DISPLAY, Vote.PRIORITY_FLICKER_REFRESH_RATE_SWITCH);
assertThat(vote).isNotNull();
assertThat(vote.disableRefreshRateSwitching).isTrue();
}
@Test
public void testLockFpsForLowZone() throws Exception {
DisplayModeDirector director =