Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07474c17 authored by Oleg Petsjonkin's avatar Oleg Petsjonkin
Browse files

If smooth display is off, brightness change should not trigger rr change

Bug: b/270605208
Test: manual testing, adb shell dupmpsys
Change-Id: I616e75ae83b3d9f2269cb1b1f3628065d42233ca
parent 0c7f2a54
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -1977,12 +1977,10 @@ public class DisplayModeDirector {
            }

            updateSensorStatus();
            if (mRefreshRateChangeable) {
            synchronized (mLock) {
                onBrightnessChangedLocked();
            }
        }
        }

        private void reloadLightSensor(DisplayDeviceConfig displayDeviceConfig) {
            reloadLightSensorData(displayDeviceConfig);
@@ -2071,6 +2069,9 @@ public class DisplayModeDirector {
        }

        private void onBrightnessChangedLocked() {
            if (!mRefreshRateChangeable) {
                return;
            }
            Vote refreshRateVote = null;
            Vote refreshRateSwitchingVote = null;

+63 −0
Original line number Diff line number Diff line
@@ -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 =