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

Commit affcd11b authored by Ram Indani's avatar Ram Indani Committed by Automerger Merge Worker
Browse files

Merge "SF: Select the highest render rate for the min refresh rate when order...

Merge "SF: Select the highest render rate for the min refresh rate when order requested is RefreshRateOrder::Ascending" into udc-dev am: 2cbefff9

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



Change-Id: I89d1a4235302958433dcb59dacf92e3d5d00c49a
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0b7f36f6 2cbefff9
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -958,7 +958,7 @@ auto RefreshRateSelector::rankFrameRates(std::optional<int> anchorGroupOpt,
        }

        const bool ascending = (refreshRateOrder == RefreshRateOrder::Ascending);
        const auto id = frameRateMode.modePtr->getId();
        const auto id = modePtr->getId();
        if (ascending && frameRateMode.fps < *maxRenderRateForMode.get(id)) {
            // TODO(b/266481656): Once this bug is fixed, we can remove this workaround and actually
            //  use a lower frame rate when we want Ascending frame rates.
@@ -970,14 +970,20 @@ auto RefreshRateSelector::rankFrameRates(std::optional<int> anchorGroupOpt,
        if (ascending) {
            score = 1.0f / score;
        }

        constexpr float kScore = std::numeric_limits<float>::max();
        if (preferredDisplayModeOpt) {
            if (*preferredDisplayModeOpt == modePtr->getId()) {
                constexpr float kScore = std::numeric_limits<float>::max();
                ranking.emplace_front(ScoredFrameRate{frameRateMode, kScore});
                return;
            }
            constexpr float kNonPreferredModePenalty = 0.95f;
            score *= kNonPreferredModePenalty;
        } else if (ascending && id == getMinRefreshRateByPolicyLocked()->getId()) {
            // TODO(b/266481656): Once this bug is fixed, we can remove this workaround
            //  and actually use a lower frame rate when we want Ascending frame rates.
            ranking.emplace_front(ScoredFrameRate{frameRateMode, kScore});
            return;
        }

        ALOGV("%s(%s) %s (%s) scored %.2f", whence, ftl::enum_string(refreshRateOrder).c_str(),
+6 −0
Original line number Diff line number Diff line
@@ -2999,6 +2999,12 @@ TEST_P(RefreshRateSelectorTest, noLowerFrameRateOnMinVote) {
    layers[0].name = "Test layer";
    layers[0].vote = LayerVoteType::Min;
    EXPECT_FRAME_RATE_MODE(kMode60, 60_Hz, selector.getBestScoredFrameRate(layers).frameRateMode);

    constexpr FpsRanges kCappedAt60 = {{30_Hz, 90_Hz}, {30_Hz, 60_Hz}};
    EXPECT_EQ(SetPolicyResult::Changed,
              selector.setDisplayManagerPolicy(
                      {DisplayModeId(kModeId60), kCappedAt60, kCappedAt60}));
    EXPECT_FRAME_RATE_MODE(kMode60, 60_Hz, selector.getBestScoredFrameRate(layers).frameRateMode);
}

TEST_P(RefreshRateSelectorTest, frameRateIsCappedByPolicy) {