diff options
3 files changed, 40 insertions, 6 deletions
diff --git a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp index 42c126382e..aaca4fe424 100644 --- a/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +++ b/services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp @@ -307,7 +307,12 @@ bool CachedSet::requiresHolePunch() const { } const auto& layerFE = mLayers[0].getState()->getOutputLayer()->getLayerFE(); - if (layerFE.getCompositionState()->forceClientComposition) { + const auto* compositionState = layerFE.getCompositionState(); + if (compositionState->forceClientComposition) { + return false; + } + + if (compositionState->blendMode != hal::BlendMode::NONE) { return false; } diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp index 4ae921d661..8a99e4e2e8 100644 --- a/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/planner/CachedSetTest.cpp @@ -539,6 +539,8 @@ TEST_F(CachedSetTest, rendersWithOffsetFramebufferContent) { TEST_F(CachedSetTest, holePunch_requiresBuffer) { CachedSet::Layer& layer1 = *mTestLayers[0]->cachedSetLayer.get(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.blendMode = hal::BlendMode::NONE; sp<mock::LayerFE> layerFE1 = mTestLayers[0]->layerFE; CachedSet cachedSet(layer1); @@ -549,7 +551,9 @@ TEST_F(CachedSetTest, holePunch_requiresBuffer) { TEST_F(CachedSetTest, holePunch_requiresRoundedCorners) { CachedSet::Layer& layer1 = *mTestLayers[0]->cachedSetLayer.get(); - mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; CachedSet cachedSet(layer1); @@ -558,7 +562,9 @@ TEST_F(CachedSetTest, holePunch_requiresRoundedCorners) { TEST_F(CachedSetTest, holePunch_requiresSingleLayer) { CachedSet::Layer& layer1 = *mTestLayers[0]->cachedSetLayer.get(); - mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; EXPECT_CALL(*layerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); @@ -575,7 +581,9 @@ TEST_F(CachedSetTest, holePunch_requiresNonHdr) { mTestLayers[0]->layerState->update(&mTestLayers[0]->outputLayer); CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get(); - mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; CachedSet cachedSet(layer); @@ -589,7 +597,22 @@ TEST_F(CachedSetTest, holePunch_requiresNonBT601_625) { mTestLayers[0]->layerState->update(&mTestLayers[0]->outputLayer); CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get(); - mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; + sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; + + CachedSet cachedSet(layer); + EXPECT_CALL(*layerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); + + EXPECT_FALSE(cachedSet.requiresHolePunch()); +} + +TEST_F(CachedSetTest, holePunch_requiresNoBlending) { + CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::PREMULTIPLIED; sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; CachedSet cachedSet(layer); @@ -600,7 +623,9 @@ TEST_F(CachedSetTest, holePunch_requiresNonBT601_625) { TEST_F(CachedSetTest, requiresHolePunch) { CachedSet::Layer& layer = *mTestLayers[0]->cachedSetLayer.get(); - mTestLayers[0]->layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; + layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; CachedSet cachedSet(layer); @@ -614,6 +639,7 @@ TEST_F(CachedSetTest, holePunch_requiresDeviceComposition) { sp<mock::LayerFE> layerFE = mTestLayers[0]->layerFE; auto& layerFECompositionState = mTestLayers[0]->layerFECompositionState; layerFECompositionState.buffer = sp<GraphicBuffer>::make(); + layerFECompositionState.blendMode = hal::BlendMode::NONE; layerFECompositionState.forceClientComposition = true; CachedSet cachedSet(layer); diff --git a/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp b/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp index 656ef9abcb..96c28c9fc3 100644 --- a/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/planner/FlattenerTest.cpp @@ -633,6 +633,7 @@ TEST_F(FlattenerTest, flattenLayers_pip) { auto& layerState3 = mTestLayers[2]->layerState; const auto& overrideBuffer3 = layerState3->getOutputLayer()->getState().overrideInfo.buffer; + mTestLayers[2]->layerFECompositionState.blendMode = hal::BlendMode::NONE; EXPECT_CALL(*mTestLayers[2]->layerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); @@ -706,6 +707,7 @@ TEST_F(FlattenerTest, flattenLayers_holePunchSingleLayer) { // a rounded updating layer auto& layerState1 = mTestLayers[1]->layerState; const auto& overrideBuffer1 = layerState1->getOutputLayer()->getState().overrideInfo.buffer; + mTestLayers[1]->layerFECompositionState.blendMode = hal::BlendMode::NONE; EXPECT_CALL(*mTestLayers[1]->layerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); @@ -777,6 +779,7 @@ TEST_F(FlattenerTest, flattenLayers_holePunchSingleColorLayer) { // a rounded updating layer auto& layerState1 = mTestLayers[1]->layerState; const auto& overrideBuffer1 = layerState1->getOutputLayer()->getState().overrideInfo.buffer; + mTestLayers[1]->layerFECompositionState.blendMode = hal::BlendMode::NONE; EXPECT_CALL(*mTestLayers[1]->layerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); |