Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6d78937 authored by Alec Mouri's avatar Alec Mouri
Browse files

Respect buffer rotation in OutputLayer's filtering test

Otherwise GPU composition quality is degraded for:
* Non-prerotated layers
* Screenshots captured from devices with rotated panels

The second issue in particular is problematic for CTS.

Bug: 283075427
Test: SurfaceViewTests with a 90 degree panel installation
Test: libcompositionengine_test
Change-Id: I6dd7f0f385d7df0463a560d97c1ca5ee89998405
parent ffb3221d
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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 {
+15 −0
Original line number Diff line number Diff line
@@ -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