summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ady Abraham <adyabr@google.com> 2020-07-06 12:58:05 -0700
committer Ady Abraham <adyabr@google.com> 2020-07-08 01:07:20 +0000
commit20c029ce8217c2fd0e94ecebb985ed38324328bb (patch)
tree4c2065950953a9dc32401f7488963b8909f63e42
parentf4beceb1e8497d18057818c526003bcbe4c3c06e (diff)
SurfaceFlinger: only ExplicitDefault can use appRequestRange
This change is limiting layers that are ExplicitExactOrMultiple from using a refresh rate outside of the primary range. When these layers are visible and there is an interaction with the device, we usually change the refresh rate due to other layers that are animating. Letting layers that are ExplicitExactOrMultiple to pick a refresh rate from the extended appRequestRange results in refresh rate changes which are not desired. Bug: 159940172 Test: YouTube when the device the primary range is restricted Change-Id: I6aa60c359d690a92342963cb14bdeece4e6d5c5f
-rw-r--r--services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp6
-rw-r--r--services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp22
2 files changed, 5 insertions, 23 deletions
diff --git a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
index 053d0a7a39..8661b6ee0a 100644
--- a/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
+++ b/services/surfaceflinger/Scheduler/RefreshRateConfigs.cpp
@@ -212,10 +212,8 @@ const RefreshRate& RefreshRateConfigs::getBestRefreshRate(
bool inPrimaryRange =
scores[i].first->inPolicy(policy->primaryRange.min, policy->primaryRange.max);
if ((primaryRangeIsSingleRate || !inPrimaryRange) &&
- !(layer.focused &&
- (layer.vote == LayerVoteType::ExplicitDefault ||
- layer.vote == LayerVoteType::ExplicitExactOrMultiple))) {
- // Only focused layers with explicit frame rate settings are allowed to score
+ !(layer.focused && layer.vote == LayerVoteType::ExplicitDefault)) {
+ // Only focused layers with ExplicitDefault frame rate settings are allowed to score
// refresh rates outside the primary range.
continue;
}
diff --git a/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp b/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp
index 03d4460b15..1f6f166b45 100644
--- a/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp
+++ b/services/surfaceflinger/tests/unittests/RefreshRateConfigsTest.cpp
@@ -1130,15 +1130,6 @@ TEST_F(RefreshRateConfigsTest,
auto& lr = layers[0];
RefreshRateConfigs::GlobalSignals consideredSignals;
- lr.vote = LayerVoteType::ExplicitExactOrMultiple;
- lr.desiredRefreshRate = 60.0f;
- lr.name = "60Hz ExplicitExactOrMultiple";
- lr.focused = true;
- EXPECT_EQ(mExpected60Config,
- refreshRateConfigs->getBestRefreshRate(layers, {.touch = true, .idle = true},
- &consideredSignals));
- EXPECT_EQ(false, consideredSignals.touch);
-
lr.vote = LayerVoteType::ExplicitDefault;
lr.desiredRefreshRate = 60.0f;
lr.name = "60Hz ExplicitDefault";
@@ -1162,13 +1153,6 @@ TEST_F(RefreshRateConfigsTest,
auto layers = std::vector<LayerRequirement>{LayerRequirement{.weight = 1.0f}};
auto& lr = layers[0];
- lr.vote = LayerVoteType::ExplicitExactOrMultiple;
- lr.desiredRefreshRate = 90.0f;
- lr.name = "90Hz ExplicitExactOrMultiple";
- lr.focused = true;
- EXPECT_EQ(mExpected90Config,
- refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = true}));
-
lr.vote = LayerVoteType::ExplicitDefault;
lr.desiredRefreshRate = 90.0f;
lr.name = "90Hz ExplicitDefault";
@@ -1204,7 +1188,7 @@ TEST_F(RefreshRateConfigsTest,
refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}));
lr.focused = true;
- EXPECT_EQ(mExpected60Config,
+ EXPECT_EQ(mExpected90Config,
refreshRateConfigs->getBestRefreshRate(layers, {.touch = false, .idle = false}));
lr.vote = LayerVoteType::ExplicitDefault;
@@ -1306,7 +1290,7 @@ TEST_F(RefreshRateConfigsTest, primaryVsAppRequestPolicy) {
EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Max, 90.f));
EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::Heuristic, 90.f));
EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitDefault, 90.f));
- EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f));
+ EXPECT_EQ(HWC_CONFIG_ID_60, getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f));
// Layers not focused are not allowed to override primary config
EXPECT_EQ(HWC_CONFIG_ID_60,
@@ -1321,7 +1305,7 @@ TEST_F(RefreshRateConfigsTest, primaryVsAppRequestPolicy) {
// When we're higher than the primary range max due to a layer frame rate setting, touch boost
// shouldn't drag us back down to the primary range max.
EXPECT_EQ(HWC_CONFIG_ID_90, getFrameRate(LayerVoteType::ExplicitDefault, 90.f, /*touch=*/true));
- EXPECT_EQ(HWC_CONFIG_ID_90,
+ EXPECT_EQ(HWC_CONFIG_ID_60,
getFrameRate(LayerVoteType::ExplicitExactOrMultiple, 90.f, /*touch=*/true));
ASSERT_GE(refreshRateConfigs->setDisplayManagerPolicy(