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

Commit 96fc100e authored by Rupesh Bansal's avatar Rupesh Bansal Committed by Automerger Merge Worker
Browse files

Merge "Fix the issue where resetting the refresh rates in DeviceConfig...

Merge "Fix the issue where resetting the refresh rates in DeviceConfig wouldn't make the system to fallback to the default values" into udc-dev am: 27558598 am: 3abbe0be

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21897620



Change-Id: Icdb01d872fe8109e30a1edc2e7476124a8471392
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 4d35a7cb 3abbe0be
Loading
Loading
Loading
Loading
+56 −27
Original line number Diff line number Diff line
@@ -1444,13 +1444,12 @@ public class DisplayModeDirector {
        }

        public void onDeviceConfigDefaultPeakRefreshRateChanged(Float defaultPeakRefreshRate) {
            if (defaultPeakRefreshRate == null) {
                defaultPeakRefreshRate = (float) mContext.getResources().getInteger(
                        R.integer.config_defaultPeakRefreshRate);
            }

            if (mDefaultPeakRefreshRate != defaultPeakRefreshRate) {
            synchronized (mLock) {
                if (defaultPeakRefreshRate == null) {
                    setDefaultPeakRefreshRate(mDefaultDisplayDeviceConfig,
                            /* attemptLoadingFromDeviceConfig= */ false);
                    updateRefreshRateSettingLocked();
                } else if (mDefaultPeakRefreshRate != defaultPeakRefreshRate) {
                    mDefaultPeakRefreshRate = defaultPeakRefreshRate;
                    updateRefreshRateSettingLocked();
                }
@@ -2115,11 +2114,20 @@ public class DisplayModeDirector {
                mLowDisplayBrightnessThresholds = displayThresholds;
                mLowAmbientBrightnessThresholds = ambientThresholds;
            } else {
                // Invalid or empty. Use device default.
                mLowDisplayBrightnessThresholds = mContext.getResources().getIntArray(
                        R.array.config_brightnessThresholdsOfPeakRefreshRate);
                mLowAmbientBrightnessThresholds = mContext.getResources().getIntArray(
                        R.array.config_ambientThresholdsOfPeakRefreshRate);
                DisplayDeviceConfig displayDeviceConfig;
                synchronized (mLock) {
                    displayDeviceConfig = mDefaultDisplayDeviceConfig;
                }
                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();
        }
@@ -2129,7 +2137,15 @@ public class DisplayModeDirector {
         * DeviceConfig properties.
         */
        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;
                restartObserver();
            }
@@ -2142,11 +2158,20 @@ public class DisplayModeDirector {
                mHighDisplayBrightnessThresholds = displayThresholds;
                mHighAmbientBrightnessThresholds = ambientThresholds;
            } else {
                // Invalid or empty. Use device default.
                mHighDisplayBrightnessThresholds = mContext.getResources().getIntArray(
                        R.array.config_highDisplayBrightnessThresholdsOfFixedRefreshRate);
                mHighAmbientBrightnessThresholds = mContext.getResources().getIntArray(
                        R.array.config_highAmbientBrightnessThresholdsOfFixedRefreshRate);
                DisplayDeviceConfig displayDeviceConfig;
                synchronized (mLock) {
                    displayDeviceConfig = mDefaultDisplayDeviceConfig;
                }
                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();
        }
@@ -2156,7 +2181,15 @@ public class DisplayModeDirector {
         * DeviceConfig properties.
         */
        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;
                restartObserver();
            }
@@ -3067,10 +3100,8 @@ public class DisplayModeDirector {
                    new Pair<>(lowDisplayBrightnessThresholds, lowAmbientBrightnessThresholds))
                    .sendToTarget();

            if (refreshRateInLowZone != -1) {
            mHandler.obtainMessage(MSG_REFRESH_RATE_IN_LOW_ZONE_CHANGED, refreshRateInLowZone,
                    0).sendToTarget();
            }

            int[] highDisplayBrightnessThresholds = getHighDisplayBrightnessThresholds();
            int[] highAmbientBrightnessThresholds = getHighAmbientBrightnessThresholds();
@@ -3080,10 +3111,8 @@ public class DisplayModeDirector {
                    new Pair<>(highDisplayBrightnessThresholds, highAmbientBrightnessThresholds))
                    .sendToTarget();

            if (refreshRateInHighZone != -1) {
            mHandler.obtainMessage(MSG_REFRESH_RATE_IN_HIGH_ZONE_CHANGED, refreshRateInHighZone,
                    0).sendToTarget();
            }

            synchronized (mLock) {
                final int refreshRateInHbmSunlight =
+37 −6
Original line number Diff line number Diff line
@@ -2300,7 +2300,7 @@ public class DisplayModeDirectorTest {
        // 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
        // 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().getDefaultPeakRefreshRate(), 75,
                0.0);
@@ -2332,6 +2332,7 @@ public class DisplayModeDirectorTest {
        when(displayDeviceConfig.getDefaultRefreshRateInHbmSunlight()).thenReturn(75);
        director.defaultDisplayDeviceUpdated(displayDeviceConfig);

        // Verify the new values are from the freshly loaded DisplayDeviceConfig.
        assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0);
        assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 65,
                0.0);
@@ -2362,6 +2363,7 @@ public class DisplayModeDirectorTest {
        // Need to wait for the property change to propagate to the main thread.
        waitForIdleSync();

        // Verify the values are loaded from the DeviceConfig.
        assertEquals(director.getSettingsObserver().getDefaultRefreshRate(), 60, 0.0);
        assertEquals(director.getSettingsObserver().getDefaultPeakRefreshRate(), 60,
                0.0);
@@ -2377,6 +2379,35 @@ public class DisplayModeDirectorTest {
                new int[]{20});
        assertEquals(director.getHbmObserver().getRefreshRateInHbmHdr(), 70);
        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
@@ -2536,18 +2567,18 @@ public class DisplayModeDirectorTest {
            super.addOnPropertiesChangedListener(namespace, executor, listener);
        }

        void setRefreshRateInLowZone(int fps) {
        void setRefreshRateInLowZone(Integer fps) {
            putPropertyAndNotify(
                    DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_LOW_ZONE,
                    String.valueOf(fps));
        }

        void setRefreshRateInHbmSunlight(int fps) {
        void setRefreshRateInHbmSunlight(Integer fps) {
            putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
                    KEY_REFRESH_RATE_IN_HBM_SUNLIGHT, String.valueOf(fps));
        }

        void setRefreshRateInHbmHdr(int fps) {
        void setRefreshRateInHbmHdr(Integer fps) {
            putPropertyAndNotify(DeviceConfig.NAMESPACE_DISPLAY_MANAGER,
                    KEY_REFRESH_RATE_IN_HBM_HDR, String.valueOf(fps));
        }
@@ -2583,13 +2614,13 @@ public class DisplayModeDirectorTest {
                    thresholds);
        }

        void setRefreshRateInHighZone(int fps) {
        void setRefreshRateInHighZone(Integer fps) {
            putPropertyAndNotify(
                    DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_REFRESH_RATE_IN_HIGH_ZONE,
                    String.valueOf(fps));
        }

        void setDefaultPeakRefreshRate(int fps) {
        void setDefaultPeakRefreshRate(Integer fps) {
            putPropertyAndNotify(
                    DeviceConfig.NAMESPACE_DISPLAY_MANAGER, KEY_PEAK_REFRESH_RATE_DEFAULT,
                    String.valueOf(fps));