Loading services/surfaceflinger/CompositionEngine/src/Output.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -684,7 +684,9 @@ void Output::ensureOutputLayerIfVisible(sp<compositionengine::LayerFE>& layerFE, visibleNonShadowRegion.intersect(outputState.layerStackSpace.getContent())); outputLayerState.shadowRegion = shadowRegion; outputLayerState.outputSpaceBlockingRegionHint = layerFEState->compositionType == Composition::DISPLAY_DECORATION ? transparentRegion layerFEState->compositionType == Composition::DISPLAY_DECORATION ? outputState.transform.transform( transparentRegion.intersect(outputState.layerStackSpace.getContent())) : Region(); } Loading services/surfaceflinger/CompositionEngine/src/OutputLayerCompositionState.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,9 @@ void OutputLayerCompositionState::dump(std::string& out) const { out.append(" "); dumpVal(out, "shadowRegion", shadowRegion); out.append(" "); dumpVal(out, "outputSpaceBlockingRegionHint", outputSpaceBlockingRegionHint); out.append(" "); dumpVal(out, "forceClientComposition", forceClientComposition); dumpVal(out, "clearClientTarget", clearClientTarget); Loading services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +22 −1 Original line number Diff line number Diff line Loading @@ -1310,6 +1310,7 @@ struct OutputEnsureOutputLayerIfVisibleTest : public testing::Test { static const Region kLowerHalfBoundsNoRotation; static const Region kFullBounds90Rotation; static const Region kTransparentRegionHint; static const Region kTransparentRegionHint90Rotation; StrictMock<OutputPartialMock> mOutput; LayerFESet mGeomSnapshots; Loading @@ -1328,7 +1329,9 @@ const Region OutputEnsureOutputLayerIfVisibleTest::kLowerHalfBoundsNoRotation = const Region OutputEnsureOutputLayerIfVisibleTest::kFullBounds90Rotation = Region(Rect(0, 0, 200, 100)); const Region OutputEnsureOutputLayerIfVisibleTest::kTransparentRegionHint = Region(Rect(0, 0, 100, 100)); Region(Rect(25, 20, 50, 75)); const Region OutputEnsureOutputLayerIfVisibleTest::kTransparentRegionHint90Rotation = Region(Rect(125, 25, 180, 50)); TEST_F(OutputEnsureOutputLayerIfVisibleTest, performsGeomLatchBeforeCheckingIfLayerIncluded) { EXPECT_CALL(mOutput, includesLayer(sp<LayerFE>(mLayer.layerFE))).WillOnce(Return(false)); Loading Loading @@ -1779,6 +1782,24 @@ TEST_F(OutputEnsureOutputLayerIfVisibleTest, normalLayersDoNotSetBlockingRegion) EXPECT_THAT(mLayer.outputLayerState.outputSpaceBlockingRegionHint, RegionEq(Region())); } TEST_F(OutputEnsureOutputLayerIfVisibleTest, blockingRegionIsInOutputSpace) { mLayer.layerFEState.isOpaque = false; mLayer.layerFEState.contentDirty = true; mLayer.layerFEState.compositionType = aidl::android::hardware::graphics::composer3::Composition::DISPLAY_DECORATION; mOutput.mState.layerStackSpace.setContent(Rect(0, 0, 300, 200)); mOutput.mState.transform = ui::Transform(TR_ROT_90, 200, 300); EXPECT_CALL(mOutput, getOutputLayerCount()).WillOnce(Return(0u)); EXPECT_CALL(mOutput, ensureOutputLayer(Eq(std::nullopt), Eq(mLayer.layerFE))) .WillOnce(Return(&mLayer.outputLayer)); ensureOutputLayerIfVisible(); EXPECT_THAT(mLayer.outputLayerState.outputSpaceBlockingRegionHint, RegionEq(kTransparentRegionHint90Rotation)); } /* * Output::present() */ Loading Loading
services/surfaceflinger/CompositionEngine/src/Output.cpp +4 −2 Original line number Diff line number Diff line Loading @@ -684,7 +684,9 @@ void Output::ensureOutputLayerIfVisible(sp<compositionengine::LayerFE>& layerFE, visibleNonShadowRegion.intersect(outputState.layerStackSpace.getContent())); outputLayerState.shadowRegion = shadowRegion; outputLayerState.outputSpaceBlockingRegionHint = layerFEState->compositionType == Composition::DISPLAY_DECORATION ? transparentRegion layerFEState->compositionType == Composition::DISPLAY_DECORATION ? outputState.transform.transform( transparentRegion.intersect(outputState.layerStackSpace.getContent())) : Region(); } Loading
services/surfaceflinger/CompositionEngine/src/OutputLayerCompositionState.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -60,6 +60,9 @@ void OutputLayerCompositionState::dump(std::string& out) const { out.append(" "); dumpVal(out, "shadowRegion", shadowRegion); out.append(" "); dumpVal(out, "outputSpaceBlockingRegionHint", outputSpaceBlockingRegionHint); out.append(" "); dumpVal(out, "forceClientComposition", forceClientComposition); dumpVal(out, "clearClientTarget", clearClientTarget); Loading
services/surfaceflinger/CompositionEngine/tests/OutputTest.cpp +22 −1 Original line number Diff line number Diff line Loading @@ -1310,6 +1310,7 @@ struct OutputEnsureOutputLayerIfVisibleTest : public testing::Test { static const Region kLowerHalfBoundsNoRotation; static const Region kFullBounds90Rotation; static const Region kTransparentRegionHint; static const Region kTransparentRegionHint90Rotation; StrictMock<OutputPartialMock> mOutput; LayerFESet mGeomSnapshots; Loading @@ -1328,7 +1329,9 @@ const Region OutputEnsureOutputLayerIfVisibleTest::kLowerHalfBoundsNoRotation = const Region OutputEnsureOutputLayerIfVisibleTest::kFullBounds90Rotation = Region(Rect(0, 0, 200, 100)); const Region OutputEnsureOutputLayerIfVisibleTest::kTransparentRegionHint = Region(Rect(0, 0, 100, 100)); Region(Rect(25, 20, 50, 75)); const Region OutputEnsureOutputLayerIfVisibleTest::kTransparentRegionHint90Rotation = Region(Rect(125, 25, 180, 50)); TEST_F(OutputEnsureOutputLayerIfVisibleTest, performsGeomLatchBeforeCheckingIfLayerIncluded) { EXPECT_CALL(mOutput, includesLayer(sp<LayerFE>(mLayer.layerFE))).WillOnce(Return(false)); Loading Loading @@ -1779,6 +1782,24 @@ TEST_F(OutputEnsureOutputLayerIfVisibleTest, normalLayersDoNotSetBlockingRegion) EXPECT_THAT(mLayer.outputLayerState.outputSpaceBlockingRegionHint, RegionEq(Region())); } TEST_F(OutputEnsureOutputLayerIfVisibleTest, blockingRegionIsInOutputSpace) { mLayer.layerFEState.isOpaque = false; mLayer.layerFEState.contentDirty = true; mLayer.layerFEState.compositionType = aidl::android::hardware::graphics::composer3::Composition::DISPLAY_DECORATION; mOutput.mState.layerStackSpace.setContent(Rect(0, 0, 300, 200)); mOutput.mState.transform = ui::Transform(TR_ROT_90, 200, 300); EXPECT_CALL(mOutput, getOutputLayerCount()).WillOnce(Return(0u)); EXPECT_CALL(mOutput, ensureOutputLayer(Eq(std::nullopt), Eq(mLayer.layerFE))) .WillOnce(Return(&mLayer.outputLayer)); ensureOutputLayerIfVisible(); EXPECT_THAT(mLayer.outputLayerState.outputSpaceBlockingRegionHint, RegionEq(kTransparentRegionHint90Rotation)); } /* * Output::present() */ Loading