diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-24 23:06:27 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2021-07-24 23:06:27 +0000 |
commit | 8a405095c9e9c7196d29cb1b611eb21ede34c08f (patch) | |
tree | b4a8c367b2c4aab8620b3b5b8d6ca9942e9d6cb0 | |
parent | 4a0260ddd3b86d63db9080d0f1863bb5be018179 (diff) | |
parent | 4d56aeed596b259d2355478c5d4505bb429a5634 (diff) | |
download | native-8a405095c9e9c7196d29cb1b611eb21ede34c08f.tar.gz |
Snap for 7580922 from 4d56aeed596b259d2355478c5d4505bb429a5634 to sc-d1-release
Change-Id: I5c66dc85665c902c35cf8a9068a3c6768ac8faa4
-rw-r--r-- | services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp | 10 | ||||
-rw-r--r-- | services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp | 45 |
2 files changed, 43 insertions, 12 deletions
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp index f80ec223c1..c1cd5ab5fd 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp @@ -218,6 +218,7 @@ void CachedSet::render(renderengine::RenderEngine& renderEngine, TexturePool& te } renderengine::LayerSettings holePunchSettings; + renderengine::LayerSettings holePunchBackgroundSettings; if (mHolePunchLayer) { auto clientCompositionList = mHolePunchLayer->getOutputLayer()->getLayerFE().prepareClientCompositionList( @@ -232,6 +233,15 @@ void CachedSet::render(renderengine::RenderEngine& renderEngine, TexturePool& te holePunchSettings.alpha = 0.0f; holePunchSettings.name = std::string("hole punch layer"); layerSettingsPointers.push_back(&holePunchSettings); + + // Add a solid background as the first layer in case there is no opaque + // buffer behind the punch hole + holePunchBackgroundSettings.alpha = 1.0f; + holePunchBackgroundSettings.name = std::string("holePunchBackground"); + holePunchBackgroundSettings.geometry.boundaries = holePunchSettings.geometry.boundaries; + holePunchBackgroundSettings.geometry.positionTransform = + holePunchSettings.geometry.positionTransform; + layerSettingsPointers.insert(layerSettingsPointers.begin(), &holePunchBackgroundSettings); } if (sDebugHighlighLayers) { diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp index b765337410..ec81322afa 100644 --- a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp @@ -656,12 +656,22 @@ TEST_F(CachedSetTest, addHolePunch) { base::unique_fd&&, base::unique_fd*) -> size_t { // If the highlight layer is enabled, it will increase the size by 1. // We're interested in the third layer either way. - EXPECT_GE(layers.size(), 3u); - const auto* holePunchSettings = layers[2]; - EXPECT_EQ(nullptr, holePunchSettings->source.buffer.buffer); - EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchSettings->source.solidColor); - EXPECT_TRUE(holePunchSettings->disableBlending); - EXPECT_EQ(0.0f, holePunchSettings->alpha); + EXPECT_GE(layers.size(), 4u); + { + const auto* holePunchSettings = layers[3]; + EXPECT_EQ(nullptr, holePunchSettings->source.buffer.buffer); + EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchSettings->source.solidColor); + EXPECT_TRUE(holePunchSettings->disableBlending); + EXPECT_EQ(0.0f, holePunchSettings->alpha); + } + + { + const auto* holePunchBackgroundSettings = layers[0]; + EXPECT_EQ(nullptr, holePunchBackgroundSettings->source.buffer.buffer); + EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchBackgroundSettings->source.solidColor); + EXPECT_FALSE(holePunchBackgroundSettings->disableBlending); + EXPECT_EQ(1.0f, holePunchBackgroundSettings->alpha); + } return NO_ERROR; }; @@ -706,12 +716,23 @@ TEST_F(CachedSetTest, addHolePunch_noBuffer) { base::unique_fd&&, base::unique_fd*) -> size_t { // If the highlight layer is enabled, it will increase the size by 1. // We're interested in the third layer either way. - EXPECT_GE(layers.size(), 3u); - const auto* holePunchSettings = layers[2]; - EXPECT_EQ(nullptr, holePunchSettings->source.buffer.buffer); - EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchSettings->source.solidColor); - EXPECT_TRUE(holePunchSettings->disableBlending); - EXPECT_EQ(0.0f, holePunchSettings->alpha); + EXPECT_GE(layers.size(), 4u); + + { + const auto* holePunchSettings = layers[3]; + EXPECT_EQ(nullptr, holePunchSettings->source.buffer.buffer); + EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchSettings->source.solidColor); + EXPECT_TRUE(holePunchSettings->disableBlending); + EXPECT_EQ(0.0f, holePunchSettings->alpha); + } + + { + const auto* holePunchBackgroundSettings = layers[0]; + EXPECT_EQ(nullptr, holePunchBackgroundSettings->source.buffer.buffer); + EXPECT_EQ(half3(0.0f, 0.0f, 0.0f), holePunchBackgroundSettings->source.solidColor); + EXPECT_FALSE(holePunchBackgroundSettings->disableBlending); + EXPECT_EQ(1.0f, holePunchBackgroundSettings->alpha); + } return NO_ERROR; }; |