From 20c029ce8217c2fd0e94ecebb985ed38324328bb Mon Sep 17 00:00:00 2001 From: Ady Abraham Date: Mon, 6 Jul 2020 12:58:05 -0700 Subject: 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 --- .../Scheduler/RefreshRateConfigs.cpp | 6 ++---- .../tests/unittests/RefreshRateConfigsTest.cpp | 22 +++------------------- 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{.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( -- cgit v1.2.3-59-g8ed1b