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

Commit 6b7ad65e authored by Ady Abraham's avatar Ady Abraham
Browse files

SF: cleanup RefreshRateConfigs interface

Change-Id: I0317ff4db2396de855d79ac10c63c1f5d8016131
Test: SF unit tests
Bug: 187539899
parent 1b11bc66
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -113,7 +113,7 @@ bool RefreshRateConfigs::isVoteAllowed(const LayerRequirement& layer,
        case LayerVoteType::ExplicitExactOrMultiple:
        case LayerVoteType::Heuristic:
            if (mConfig.frameRateMultipleThreshold != 0 &&
                refreshRate.fps.greaterThanOrEqualWithMargin(
                refreshRate.getFps().greaterThanOrEqualWithMargin(
                        Fps(mConfig.frameRateMultipleThreshold)) &&
                layer.desiredRefreshRate.lessThanWithMargin(
                        Fps(mConfig.frameRateMultipleThreshold / 2))) {
@@ -146,8 +146,8 @@ float RefreshRateConfigs::calculateLayerScoreLocked(const LayerRequirement& laye

    // If the layer wants Max, give higher score to the higher refresh rate
    if (layer.vote == LayerVoteType::Max) {
        const auto ratio =
                refreshRate.fps.getValue() / mAppRequestRefreshRates.back()->fps.getValue();
        const auto ratio = refreshRate.getFps().getValue() /
                mAppRequestRefreshRates.back()->getFps().getValue();
        // use ratio^2 to get a lower score the more we get further from peak
        return ratio * ratio;
    }
@@ -463,7 +463,7 @@ RefreshRate RefreshRateConfigs::getBestRefreshRateLocked(
        }
    }();
    if (globalSignals.touch && explicitDefaultVoteLayers == 0 && touchBoostForExplicitExact &&
        bestRefreshRate->fps.lessThanWithMargin(touchRefreshRate.fps)) {
        bestRefreshRate->getFps().lessThanWithMargin(touchRefreshRate.getFps())) {
        setTouchConsidered();
        ALOGV("TouchBoost - choose %s", touchRefreshRate.getName().c_str());
        return touchRefreshRate;
@@ -699,8 +699,7 @@ void RefreshRateConfigs::updateDisplayModes(const DisplayModes& modes,
    for (const auto& mode : modes) {
        const auto modeId = mode->getId();
        mRefreshRates.emplace(modeId,
                              std::make_unique<RefreshRate>(modeId, mode, mode->getFps(),
                                                            RefreshRate::ConstructorTag(0)));
                              std::make_unique<RefreshRate>(mode, RefreshRate::ConstructorTag(0)));
        if (modeId == currentModeId) {
            mCurrentRefreshRate = mRefreshRates.at(modeId).get();
        }
@@ -793,7 +792,7 @@ RefreshRateConfigs::Policy RefreshRateConfigs::getDisplayManagerPolicy() const {
bool RefreshRateConfigs::isModeAllowed(DisplayModeId modeId) const {
    std::lock_guard lock(mLock);
    for (const RefreshRate* refreshRate : mAppRequestRefreshRates) {
        if (refreshRate->modeId == modeId) {
        if (refreshRate->getModeId() == modeId) {
            return true;
        }
    }
@@ -808,7 +807,7 @@ void RefreshRateConfigs::getSortedRefreshRateListLocked(
    for (const auto& [type, refreshRate] : mRefreshRates) {
        if (shouldAddRefreshRate(*refreshRate)) {
            ALOGV("getSortedRefreshRateListLocked: mode %d added to list policy",
                  refreshRate->modeId.value());
                  refreshRate->getModeId().value());
            outRefreshRates->push_back(refreshRate.get());
        }
    }
+7 −13
Original line number Diff line number Diff line
@@ -64,25 +64,22 @@ public:
        };

    public:
        RefreshRate(DisplayModeId modeId, DisplayModePtr mode, Fps fps, ConstructorTag)
              : modeId(modeId), mode(mode), fps(std::move(fps)) {}
        RefreshRate(DisplayModePtr mode, ConstructorTag) : mode(mode) {}

        DisplayModeId getModeId() const { return modeId; }
        DisplayModeId getModeId() const { return mode->getId(); }
        nsecs_t getVsyncPeriod() const { return mode->getVsyncPeriod(); }
        int32_t getModeGroup() const { return mode->getGroup(); }
        std::string getName() const { return to_string(fps); }
        Fps getFps() const { return fps; }
        std::string getName() const { return to_string(getFps()); }
        Fps getFps() const { return mode->getFps(); }

        // Checks whether the fps of this RefreshRate struct is within a given min and max refresh
        // rate passed in. Margin of error is applied to the boundaries for approximation.
        bool inPolicy(Fps minRefreshRate, Fps maxRefreshRate) const {
            return minRefreshRate.lessThanOrEqualWithMargin(fps) &&
                    fps.lessThanOrEqualWithMargin(maxRefreshRate);
            return minRefreshRate.lessThanOrEqualWithMargin(getFps()) &&
                    getFps().lessThanOrEqualWithMargin(maxRefreshRate);
        }

        bool operator!=(const RefreshRate& other) const {
            return modeId != other.modeId || mode != other.mode;
        }
        bool operator!=(const RefreshRate& other) const { return mode != other.mode; }

        bool operator<(const RefreshRate& other) const {
            return getFps().getValue() < other.getFps().getValue();
@@ -99,10 +96,7 @@ public:
        friend RefreshRateConfigs;
        friend class RefreshRateConfigsTest;

        const DisplayModeId modeId;
        DisplayModePtr mode;
        // Refresh rate in frames per second
        const Fps fps{0.0f};
    };

    using AllRefreshRatesMapType =
+11 −19
Original line number Diff line number Diff line
@@ -51,8 +51,7 @@ protected:
    ~RefreshRateConfigsTest();

    RefreshRate createRefreshRate(DisplayModePtr displayMode) {
        return {displayMode->getId(), displayMode, displayMode->getFps(),
                RefreshRate::ConstructorTag(0)};
        return {displayMode, RefreshRate::ConstructorTag(0)};
    }

    Fps findClosestKnownFrameRate(const RefreshRateConfigs& refreshRateConfigs, Fps frameRate) {
@@ -147,24 +146,17 @@ protected:
    DisplayModes m60_120Device = {mConfig60, mConfig120};

    // Expected RefreshRate objects
    RefreshRate mExpected60Config = {HWC_CONFIG_ID_60, mConfig60, Fps(60),
                                     RefreshRate::ConstructorTag(0)};
    RefreshRate mExpectedAlmost60Config = {HWC_CONFIG_ID_60,
                                           createDisplayMode(HWC_CONFIG_ID_60, 0, 16666665),
                                           Fps(60), RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected90Config = {HWC_CONFIG_ID_90, mConfig90, Fps(90),
                                     RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected90DifferentGroupConfig = {HWC_CONFIG_ID_90, mConfig90DifferentGroup,
                                                   Fps(90), RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected90DifferentResolutionConfig = {HWC_CONFIG_ID_90,
                                                        mConfig90DifferentResolution, Fps(90),
                                                        RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected72Config = {HWC_CONFIG_ID_72, mConfig72, Fps(72.0f),
    RefreshRate mExpected60Config = {mConfig60, RefreshRate::ConstructorTag(0)};
    RefreshRate mExpectedAlmost60Config = {createDisplayMode(HWC_CONFIG_ID_60, 0, 16666665),
                                           RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected30Config = {HWC_CONFIG_ID_30, mConfig30, Fps(30),
    RefreshRate mExpected90Config = {mConfig90, RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected90DifferentGroupConfig = {mConfig90DifferentGroup,
                                                   RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected120Config = {HWC_CONFIG_ID_120, mConfig120, Fps(120),
    RefreshRate mExpected90DifferentResolutionConfig = {mConfig90DifferentResolution,
                                                        RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected72Config = {mConfig72, RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected30Config = {mConfig30, RefreshRate::ConstructorTag(0)};
    RefreshRate mExpected120Config = {mConfig120, RefreshRate::ConstructorTag(0)};

private:
    DisplayModePtr createDisplayMode(DisplayModeId modeId, int32_t group, int64_t vsyncPeriod,