diff options
author | 2023-09-20 20:44:59 +0000 | |
---|---|---|
committer | 2023-09-20 20:44:59 +0000 | |
commit | a70acde23de7715c98e7cd70d071f7957b7a0bff (patch) | |
tree | ed091d4f9e29bee8e7df6c9262ad8c43129d0441 | |
parent | 29911e5787a26807b84c0cb7cc422017e2fdbe31 (diff) | |
parent | b6d789377cc755bcf123ec6ec39bd2461fcce45e (diff) |
Merge "Respect buffer rotation in OutputLayer's filtering test" into main
-rw-r--r-- | services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp | 12 | ||||
-rw-r--r-- | services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp | 15 |
2 files changed, 24 insertions, 3 deletions
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp index 22db247cc9..fe56969884 100644 --- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp +++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp @@ -844,10 +844,16 @@ void OutputLayer::applyDeviceLayerRequest(hal::LayerRequest request) { bool OutputLayer::needsFiltering() const { const auto& state = getState(); - const auto& displayFrame = state.displayFrame; const auto& sourceCrop = state.sourceCrop; - return sourceCrop.getHeight() != displayFrame.getHeight() || - sourceCrop.getWidth() != displayFrame.getWidth(); + auto displayFrameWidth = static_cast<float>(state.displayFrame.getWidth()); + auto displayFrameHeight = static_cast<float>(state.displayFrame.getHeight()); + + if (state.bufferTransform & HAL_TRANSFORM_ROT_90) { + std::swap(displayFrameWidth, displayFrameHeight); + } + + return sourceCrop.getHeight() != displayFrameHeight || + sourceCrop.getWidth() != displayFrameWidth; } std::optional<LayerFE::LayerSettings> OutputLayer::getOverrideCompositionSettings() const { diff --git a/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp b/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp index 9039d16aeb..630906a5b7 100644 --- a/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp +++ b/services/surfaceflinger/CompositionEngine/tests/OutputLayerTest.cpp @@ -1614,5 +1614,20 @@ TEST_F(OutputLayerTest, needsFilteringReturnsTrueIfDisplaySizeDifferentFromSourc EXPECT_TRUE(mOutputLayer.needsFiltering()); } +TEST_F(OutputLayerTest, needsFilteringReturnsFalseIfRotatedDisplaySizeSameAsSourceSize) { + mOutputLayer.editState().displayFrame = Rect(100, 100, 300, 200); + mOutputLayer.editState().sourceCrop = FloatRect{0.f, 0.f, 100.f, 200.f}; + mOutputLayer.editState().bufferTransform = Hwc2::Transform::ROT_90; + + EXPECT_FALSE(mOutputLayer.needsFiltering()); +} + +TEST_F(OutputLayerTest, needsFilteringReturnsTrueIfRotatedDisplaySizeDiffersFromSourceSize) { + mOutputLayer.editState().displayFrame = Rect(100, 100, 300, 200); + mOutputLayer.editState().sourceCrop = FloatRect{0.f, 0.f, 100.f, 200.f}; + + EXPECT_TRUE(mOutputLayer.needsFiltering()); +} + } // namespace } // namespace android::compositionengine |