summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-24 23:07:00 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-07-24 23:07:00 +0000
commit6744ec913dec1cfab062d57eb9143f0c493b6d1e (patch)
treeb4a8c367b2c4aab8620b3b5b8d6ca9942e9d6cb0
parent5095b2540c37b5572108aa1ec4492c823ae57f26 (diff)
parent4d56aeed596b259d2355478c5d4505bb429a5634 (diff)
downloadnative-6744ec913dec1cfab062d57eb9143f0c493b6d1e.tar.gz
Snap for 7580922 from 4d56aeed596b259d2355478c5d4505bb429a5634 to sc-release
Change-Id: If142e85f168a2d0ebb86d0317c405d5041438a65
-rw-r--r--services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp10
-rw-r--r--services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp45
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;
};