Skip to content

Commit 726ca29

Browse files
Rachel LeeGerrit Code Review
authored andcommitted
Merge "DO_NOT_MERGE Fix primaryRangeIsSingleRate + touch on dVRR" into android15-tests-dev
2 parents 47c8085 + 5cf032c commit 726ca29

2 files changed

Lines changed: 44 additions & 6 deletions

File tree

services/surfaceflinger/Scheduler/RefreshRateSelector.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -841,7 +841,8 @@ auto RefreshRateSelector::getRankedFrameRatesLocked(const std::vector<LayerRequi
841841
return score.overallScore == 0;
842842
});
843843

844-
if (policy->primaryRangeIsSingleRate()) {
844+
// TODO(b/364651864): Evaluate correctness of primaryRangeIsSingleRate.
845+
if (!isVrrDevice() && policy->primaryRangeIsSingleRate()) {
845846
// If we never scored any layers, then choose the rate from the primary
846847
// range instead of picking a random score from the app range.
847848
if (noLayerScore) {
@@ -887,10 +888,10 @@ auto RefreshRateSelector::getRankedFrameRatesLocked(const std::vector<LayerRequi
887888
const auto touchRefreshRates = rankFrameRates(anchorGroup, RefreshRateOrder::Descending);
888889
using fps_approx_ops::operator<;
889890

890-
if (scores.front().frameRateMode.fps < touchRefreshRates.front().frameRateMode.fps) {
891-
ALOGV("Touch Boost");
891+
if (scores.front().frameRateMode.fps <= touchRefreshRates.front().frameRateMode.fps) {
892+
ALOGV("Touch Boost [late]");
892893
ATRACE_FORMAT_INSTANT("%s (Touch Boost [late])",
893-
to_string(touchRefreshRates.front().frameRateMode.fps).c_str());
894+
to_string(touchRefreshRates.front().frameRateMode.fps).c_str());
894895
return {touchRefreshRates, GlobalSignals{.touch = true}};
895896
}
896897
}

services/surfaceflinger/tests/unittests/RefreshRateSelectorTest.cpp

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1766,6 +1766,43 @@ TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withFrameRateCategory_60_12
17661766
}
17671767
}
17681768

1769+
TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_vrrHighHintTouch_primaryRangeIsSingleRate) {
1770+
if (GetParam() != Config::FrameRateOverride::Enabled) {
1771+
return;
1772+
}
1773+
1774+
SET_FLAG_FOR_TEST(flags::vrr_config, true);
1775+
1776+
auto selector = createSelector(kVrrMode_120, kModeId120);
1777+
selector.setActiveMode(kModeId120, 60_Hz);
1778+
1779+
// Change primary physical range to be single rate, which on VRR device should not affect
1780+
// fps scoring.
1781+
EXPECT_EQ(SetPolicyResult::Changed,
1782+
selector.setDisplayManagerPolicy({kModeId120, {120_Hz, 120_Hz}}));
1783+
1784+
std::vector<LayerRequirement> layers = {{.weight = 1.f}, {.weight = 1.f}};
1785+
layers[0].vote = LayerVoteType::ExplicitCategory;
1786+
layers[0].frameRateCategory = FrameRateCategory::HighHint;
1787+
layers[0].name = "ExplicitCategory HighHint";
1788+
1789+
auto actualRankedFrameRates = selector.getRankedFrameRates(layers);
1790+
// Expect late touch boost from HighHint.
1791+
EXPECT_EQ(120_Hz, actualRankedFrameRates.ranking.front().frameRateMode.fps);
1792+
EXPECT_EQ(kModeId120, actualRankedFrameRates.ranking.front().frameRateMode.modePtr->getId());
1793+
EXPECT_TRUE(actualRankedFrameRates.consideredSignals.touch);
1794+
1795+
layers[1].vote = LayerVoteType::ExplicitExactOrMultiple;
1796+
layers[1].desiredRefreshRate = 30_Hz;
1797+
layers[1].name = "ExplicitExactOrMultiple 30Hz";
1798+
1799+
actualRankedFrameRates = selector.getRankedFrameRates(layers);
1800+
// Expect late touch boost from HighHint.
1801+
EXPECT_EQ(120_Hz, actualRankedFrameRates.ranking.front().frameRateMode.fps);
1802+
EXPECT_EQ(kModeId120, actualRankedFrameRates.ranking.front().frameRateMode.modePtr->getId());
1803+
EXPECT_TRUE(actualRankedFrameRates.consideredSignals.touch);
1804+
}
1805+
17691806
TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withFrameRateCategory_HighHint) {
17701807
auto selector = createSelector(makeModes(kMode24, kMode30, kMode60, kMode120), kModeId60);
17711808

@@ -1884,7 +1921,7 @@ TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withFrameRateCategory_HighH
18841921
// Gets touch boost
18851922
EXPECT_EQ(120_Hz, actualRankedFrameRates.ranking.front().frameRateMode.fps);
18861923
EXPECT_EQ(kModeId120, actualRankedFrameRates.ranking.front().frameRateMode.modePtr->getId());
1887-
EXPECT_FALSE(actualRankedFrameRates.consideredSignals.touch);
1924+
EXPECT_TRUE(actualRankedFrameRates.consideredSignals.touch);
18881925
}
18891926

18901927
TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withFrameRateCategory_TouchBoost) {
@@ -1978,7 +2015,7 @@ TEST_P(RefreshRateSelectorTest, getBestFrameRateMode_withFrameRateCategory_Touch
19782015
lr2.name = "Max";
19792016
actualRankedFrameRates = selector.getRankedFrameRates(layers, {.touch = true});
19802017
EXPECT_FRAME_RATE_MODE(kMode120, 120_Hz, actualRankedFrameRates.ranking.front().frameRateMode);
1981-
EXPECT_FALSE(actualRankedFrameRates.consideredSignals.touch);
2018+
EXPECT_TRUE(actualRankedFrameRates.consideredSignals.touch);
19822019

19832020
lr1.vote = LayerVoteType::ExplicitCategory;
19842021
lr1.frameRateCategory = FrameRateCategory::Normal;

0 commit comments

Comments
 (0)