diff options
-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 |