Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +1 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ struct OutputLayerCompositionState { // behind the OutputLayer represented by this CompositionState and will // be visible through it. Unowned - the OutputLayer's lifetime will // outlast this.) OutputLayer* peekThroughLayer = nullptr; compositionengine::OutputLayer* peekThroughLayer = nullptr; } overrideInfo; /* Loading services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h +1 −1 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ public: void addHolePunchLayerIfFeasible(const CachedSet&, bool isFirstLayer); // Retrieve the layer that will be drawn behind this one. OutputLayer* getHolePunchLayer() const; compositionengine::OutputLayer* getHolePunchLayer() const; private: CachedSet() = default; Loading services/surfaceflinger/CompositionEngine/src/Output.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -707,7 +707,7 @@ void Output::writeCompositionState(const compositionengine::CompositionRefreshAr editState().earliestPresentTime = refreshArgs.earliestPresentTime; OutputLayer* peekThroughLayer = nullptr; compositionengine::OutputLayer* peekThroughLayer = nullptr; sp<GraphicBuffer> previousOverride = nullptr; bool includeGeometry = refreshArgs.updatingGeometryThisFrame; uint32_t z = 0; Loading services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -306,7 +306,7 @@ void CachedSet::addHolePunchLayerIfFeasible(const CachedSet& holePunchLayer, boo } } OutputLayer* CachedSet::getHolePunchLayer() const { compositionengine::OutputLayer* CachedSet::getHolePunchLayer() const { return mHolePunchLayer ? mHolePunchLayer->getOutputLayer() : nullptr; } Loading services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +60 −0 Original line number Diff line number Diff line Loading @@ -1062,13 +1062,73 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { kOverrideSurfaceDamage); expectSetHdrMetadataAndBufferCalls(kOverrideBuffer, kOverrideFence); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, peekThroughChangesBlendMode) { auto peekThroughLayerFE = sp<compositionengine::mock::LayerFE>::make(); OutputLayer peekThroughLayer{mOutput, peekThroughLayerFE}; mOutputLayer.mState.overrideInfo.peekThroughLayer = &peekThroughLayer; expectGeometryCommonCalls(kDisplayFrame, kSourceCrop, kBufferTransform, Hwc2::IComposerClient::BlendMode::PREMULTIPLIED); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, isPeekingThroughSetsOverride) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ true); EXPECT_TRUE(mOutputLayer.getState().hwc->stateOverridden); } TEST_F(OutputLayerWriteStateToHWCTest, zIsOverriddenSetsOverride) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ true, /*isPeekingThrough*/ false); EXPECT_TRUE(mOutputLayer.getState().hwc->stateOverridden); } TEST_F(OutputLayerWriteStateToHWCTest, roundedCornersForceClientComposition) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(true)); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CLIENT); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, roundedCornersPeekingThroughAllowsDeviceComposition) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ true); EXPECT_EQ(Hwc2::IComposerClient::Composition::DEVICE, mOutputLayer.getState().hwc->hwcCompositionType); } /* * OutputLayer::writeCursorPositionToHWC() */ Loading Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/OutputLayerCompositionState.h +1 −1 Original line number Diff line number Diff line Loading @@ -102,7 +102,7 @@ struct OutputLayerCompositionState { // behind the OutputLayer represented by this CompositionState and will // be visible through it. Unowned - the OutputLayer's lifetime will // outlast this.) OutputLayer* peekThroughLayer = nullptr; compositionengine::OutputLayer* peekThroughLayer = nullptr; } overrideInfo; /* Loading
services/surfaceflinger/CompositionEngine/include/compositionengine/impl/planner/CachedSet.h +1 −1 Original line number Diff line number Diff line Loading @@ -121,7 +121,7 @@ public: void addHolePunchLayerIfFeasible(const CachedSet&, bool isFirstLayer); // Retrieve the layer that will be drawn behind this one. OutputLayer* getHolePunchLayer() const; compositionengine::OutputLayer* getHolePunchLayer() const; private: CachedSet() = default; Loading
services/surfaceflinger/CompositionEngine/src/Output.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -707,7 +707,7 @@ void Output::writeCompositionState(const compositionengine::CompositionRefreshAr editState().earliestPresentTime = refreshArgs.earliestPresentTime; OutputLayer* peekThroughLayer = nullptr; compositionengine::OutputLayer* peekThroughLayer = nullptr; sp<GraphicBuffer> previousOverride = nullptr; bool includeGeometry = refreshArgs.updatingGeometryThisFrame; uint32_t z = 0; Loading
services/surfaceflinger/CompositionEngine/src/planner/CachedSet.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -306,7 +306,7 @@ void CachedSet::addHolePunchLayerIfFeasible(const CachedSet& holePunchLayer, boo } } OutputLayer* CachedSet::getHolePunchLayer() const { compositionengine::OutputLayer* CachedSet::getHolePunchLayer() const { return mHolePunchLayer ? mHolePunchLayer->getOutputLayer() : nullptr; } Loading
services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +60 −0 Original line number Diff line number Diff line Loading @@ -1062,13 +1062,73 @@ TEST_F(OutputLayerWriteStateToHWCTest, includesOverrideInfoIfPresent) { kOverrideSurfaceDamage); expectSetHdrMetadataAndBufferCalls(kOverrideBuffer, kOverrideFence); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, peekThroughChangesBlendMode) { auto peekThroughLayerFE = sp<compositionengine::mock::LayerFE>::make(); OutputLayer peekThroughLayer{mOutput, peekThroughLayerFE}; mOutputLayer.mState.overrideInfo.peekThroughLayer = &peekThroughLayer; expectGeometryCommonCalls(kDisplayFrame, kSourceCrop, kBufferTransform, Hwc2::IComposerClient::BlendMode::PREMULTIPLIED); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, isPeekingThroughSetsOverride) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ true); EXPECT_TRUE(mOutputLayer.getState().hwc->stateOverridden); } TEST_F(OutputLayerWriteStateToHWCTest, zIsOverriddenSetsOverride) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(false)); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ true, /*isPeekingThrough*/ false); EXPECT_TRUE(mOutputLayer.getState().hwc->stateOverridden); } TEST_F(OutputLayerWriteStateToHWCTest, roundedCornersForceClientComposition) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillOnce(Return(true)); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::CLIENT); mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ false); } TEST_F(OutputLayerWriteStateToHWCTest, roundedCornersPeekingThroughAllowsDeviceComposition) { expectGeometryCommonCalls(); expectPerFrameCommonCalls(); expectSetHdrMetadataAndBufferCalls(); EXPECT_CALL(*mLayerFE, hasRoundedCorners()).WillRepeatedly(Return(true)); expectSetCompositionTypeCall(Hwc2::IComposerClient::Composition::DEVICE); mLayerFEState.compositionType = Hwc2::IComposerClient::Composition::DEVICE; mOutputLayer.writeStateToHWC(/*includeGeometry*/ true, /*skipLayer*/ false, 0, /*zIsOverridden*/ false, /*isPeekingThrough*/ true); EXPECT_EQ(Hwc2::IComposerClient::Composition::DEVICE, mOutputLayer.getState().hwc->hwcCompositionType); } /* * OutputLayer::writeCursorPositionToHWC() */ Loading