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

Commit 3abbe0be 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

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



Change-Id: I085dd777b0217a5e7b6f73988fbcf5055ce0389f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 250dc6fe 27558598
Loading
Loading
Loading
Loading
+56 −27
Original line number Original line Diff line number Diff line
@@ -1444,13 +1444,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();
                }
                }
@@ -2115,11 +2114,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();
        }
        }
@@ -2129,7 +2137,15 @@ 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();
            }
            }
@@ -2142,11 +2158,20 @@ public class DisplayModeDirector {
                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();
        }
        }
@@ -2156,7 +2181,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();
            }
            }
@@ -3067,10 +3100,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();
@@ -3080,10 +3111,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 =
+37 −6
Original line number Original line 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
        // 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);
@@ -2332,6 +2332,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);
@@ -2362,6 +2363,7 @@ public class DisplayModeDirectorTest {
        // Need to wait for the property change to propagate to the main thread.
        // Need to wait for the property change to propagate to the main thread.
        waitForIdleSync();
        waitForIdleSync();


        // 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);
@@ -2377,6 +2379,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
@@ -2536,18 +2567,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));
        }
        }
@@ -2583,13 +2614,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));