Loading services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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) { Loading services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp +33 −12 Original line number Diff line number Diff line Loading @@ -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_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; }; Loading Loading @@ -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_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; }; Loading Loading
services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +10 −0 Original line number Diff line number Diff line Loading @@ -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( Loading @@ -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) { Loading
services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp +33 −12 Original line number Diff line number Diff line Loading @@ -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_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; }; Loading Loading @@ -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_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; }; Loading