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

Commit c870608e authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Android (Google) Code Review
Browse files

Merge "LowLight blocking zone modes config for vrr displays" into main

parents 5d81c188 b17bbfcc
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -230,6 +230,16 @@ import javax.xml.datatype.DatatypeConfigurationException;
 *              <nits>55.2</nits>
 *            </displayBrightnessPoint>
 *          </blockingZoneThreshold>
 *          <supportedModes>
 *            <point>
 *              <first>60</first>   // refresh rate
 *              <second>60</second> // vsync
 *            </point>
 *            <point>
 *              <first>120</first>    // refresh rate
 *              <second>120</second> // vsync
 *            </point>
 *          </supportedModes>
 *        </lowerBlockingZoneConfigs>
 *        <higherBlockingZoneConfigs>
 *          <defaultRefreshRate>90</defaultRefreshRate>
@@ -244,6 +254,16 @@ import javax.xml.datatype.DatatypeConfigurationException;
 *            </displayBrightnessPoint>
 *          </blockingZoneThreshold>
 *        </higherBlockingZoneConfigs>
 *        <lowPowerSupportedModes>
 *          <point>
 *            <first>60</first>   // refresh rate
 *            <second>60</second> // vsync
 *          </point>
 *          <point>
 *            <first>60</first>    // refresh rate
 *            <second>240</second> // vsync
 *          </point>
 *        </lowPowerSupportedModes>
 *      </refreshRate>
 *
 *      <highBrightnessMode enabled="true">
+16 −5
Original line number Diff line number Diff line
@@ -64,18 +64,22 @@ public class RefreshRateData {

    public final List<SupportedModeData> lowPowerSupportedModes;

    public final List<SupportedModeData> lowLightBlockingZoneSupportedModes;

    @VisibleForTesting
    public RefreshRateData(int defaultRefreshRate, int defaultPeakRefreshRate,
            int defaultRefreshRateInHbmHdr, int defaultRefreshRateInHbmSunlight,
            List<SupportedModeData> lowPowerSupportedModes) {
            List<SupportedModeData> lowPowerSupportedModes,
            List<SupportedModeData> lowLightBlockingZoneSupportedModes) {
        this.defaultRefreshRate = defaultRefreshRate;
        this.defaultPeakRefreshRate = defaultPeakRefreshRate;
        this.defaultRefreshRateInHbmHdr = defaultRefreshRateInHbmHdr;
        this.defaultRefreshRateInHbmSunlight = defaultRefreshRateInHbmSunlight;
        this.lowPowerSupportedModes = Collections.unmodifiableList(lowPowerSupportedModes);
        this.lowLightBlockingZoneSupportedModes =
                Collections.unmodifiableList(lowLightBlockingZoneSupportedModes);
    }


    @Override
    public String toString() {
        return "RefreshRateData {"
@@ -84,6 +88,7 @@ public class RefreshRateData {
                + ", defaultRefreshRateInHbmHdr: " + defaultRefreshRateInHbmHdr
                + ", defaultRefreshRateInHbmSunlight: " + defaultRefreshRateInHbmSunlight
                + ", lowPowerSupportedModes=" + lowPowerSupportedModes
                + ", lowLightBlockingZoneSupportedModes=" + lowLightBlockingZoneSupportedModes
                + "} ";
    }

@@ -100,13 +105,19 @@ public class RefreshRateData {
        int defaultRefreshRateInHbmSunlight = loadDefaultRefreshRateInHbmSunlight(
                refreshRateConfigs, resources);

        NonNegativeFloatToFloatMap modes =
        NonNegativeFloatToFloatMap lowPowerModes =
                refreshRateConfigs == null ? null : refreshRateConfigs.getLowPowerSupportedModes();
        List<SupportedModeData> lowPowerSupportedModes = SupportedModeData.load(modes);
        List<SupportedModeData> lowPowerSupportedModes = SupportedModeData.load(lowPowerModes);

        BlockingZoneConfig lowerZoneConfig = refreshRateConfigs == null ? null
                : refreshRateConfigs.getLowerBlockingZoneConfigs();
        NonNegativeFloatToFloatMap lowerZoneModes =
                lowerZoneConfig == null ? null : lowerZoneConfig.getSupportedModes();
        List<SupportedModeData> lowLightSupportedModes = SupportedModeData.load(lowerZoneModes);

        return new RefreshRateData(defaultRefreshRate, defaultPeakRefreshRate,
                defaultRefreshRateInHbmHdr, defaultRefreshRateInHbmSunlight,
                lowPowerSupportedModes);
                lowPowerSupportedModes, lowLightSupportedModes);
    }

    private static int loadDefaultRefreshRate(
+22 −16
Original line number Diff line number Diff line
@@ -2157,8 +2157,19 @@ public class DisplayModeDirector {
            }
        }

        private boolean hasLowLightVrrConfig() {
            DisplayDeviceConfig config;
            synchronized (mLock) {
                config = mDefaultDisplayDeviceConfig;
            }
            return mVsyncLowLightBlockingVoteEnabled
                    && config != null
                    && config.isVrrSupportEnabled()
                    && !config.getRefreshRateData().lowLightBlockingZoneSupportedModes.isEmpty();
        }

        private void restartObserver() {
            if (mRefreshRateInLowZone > 0) {
            if (mRefreshRateInLowZone > 0 || hasLowLightVrrConfig()) {
                mShouldObserveDisplayLowChange = hasValidThreshold(
                        mLowDisplayBrightnessThresholds);
                mShouldObserveAmbientLowChange = hasValidThreshold(
@@ -2300,6 +2311,7 @@ public class DisplayModeDirector {
            return false;
        }

        @GuardedBy("mLock")
        private void onBrightnessChangedLocked() {
            if (!mRefreshRateChangeable || mLowPowerModeEnabled) {
                return;
@@ -2315,8 +2327,14 @@ public class DisplayModeDirector {

            boolean insideLowZone = hasValidLowZone() && isInsideLowZone(mBrightness, mAmbientLux);
            if (insideLowZone) {
                refreshRateVote =
                        Vote.forPhysicalRefreshRates(mRefreshRateInLowZone, mRefreshRateInLowZone);
                if (hasLowLightVrrConfig()) {
                    refreshRateVote = Vote.forSupportedRefreshRates(mDefaultDisplayDeviceConfig
                            .getRefreshRateData().lowLightBlockingZoneSupportedModes);
                } else {
                    refreshRateVote = Vote.forPhysicalRefreshRates(
                            mRefreshRateInLowZone, mRefreshRateInLowZone);
                    refreshRateSwitchingVote = Vote.forDisableRefreshRateSwitching();
                }
                if (mLowZoneRefreshRateForThermals != null) {
                    RefreshRateRange range = SkinThermalStatusObserver
                            .findBestMatchingRefreshRateRange(mThermalStatus,
@@ -2326,18 +2344,6 @@ public class DisplayModeDirector {
                                Vote.forPhysicalRefreshRates(range.min, range.max);
                    }
                }

                if (mVsyncLowLightBlockingVoteEnabled
                        && isVrrSupportedLocked(Display.DEFAULT_DISPLAY)) {
                    refreshRateSwitchingVote = Vote.forSupportedRefreshRatesAndDisableSwitching(
                            List.of(
                                    new SupportedRefreshRatesVote.RefreshRates(
                                            /* peakRefreshRate= */ 60f, /* vsyncRate= */ 60f),
                                    new SupportedRefreshRatesVote.RefreshRates(
                                            /* peakRefreshRate= */120f, /* vsyncRate= */ 120f)));
                } else {
                    refreshRateSwitchingVote = Vote.forDisableRefreshRateSwitching();
                }
            }

            boolean insideHighZone = hasValidHighZone()
@@ -2368,7 +2374,7 @@ public class DisplayModeDirector {
        }

        private boolean hasValidLowZone() {
            return mRefreshRateInLowZone > 0
            return (mRefreshRateInLowZone > 0 || hasLowLightVrrConfig())
                    && (mShouldObserveDisplayLowChange || mShouldObserveAmbientLowChange);
        }

+0 −7
Original line number Diff line number Diff line
@@ -233,13 +233,6 @@ interface Vote {
        return new SupportedModesVote(modeIds);
    }

    static Vote forSupportedRefreshRatesAndDisableSwitching(
            List<SupportedRefreshRatesVote.RefreshRates> supportedRefreshRates) {
        return new CombinedVote(
                List.of(forDisableRefreshRateSwitching(),
                        new SupportedRefreshRatesVote(supportedRefreshRates)));
    }

    static String priorityToString(int priority) {
        switch (priority) {
            case PRIORITY_APP_REQUEST_BASE_MODE_REFRESH_RATE:
+15 −0
Original line number Diff line number Diff line
@@ -779,6 +779,21 @@
    </xs:complexType>

    <xs:complexType name="blockingZoneConfig">
        <!-- list of supported modes for blocking zone . Each point corresponds to one mode.
            Supported only for lowerBlockingZoneConfigs
            Mode format is : first = refreshRate, second = vsyncRate. E.g. :
            <supportedModes>
                <point>
                    <first>60</first>   // refreshRate
                    <second>60</second> //vsyncRate
                </point>
                ....
            </supportedModes>
        -->
        <xs:element type="nonNegativeFloatToFloatMap" name="supportedModes" minOccurs="0">
            <xs:annotation name="nullable"/>
            <xs:annotation name="final"/>
        </xs:element>
        <xs:element name="defaultRefreshRate" type="xs:nonNegativeInteger"
                    minOccurs="1" maxOccurs="1">
            <xs:annotation name="final"/>
Loading