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

Commit 5b6fc415 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "[SF] Intersect layers with display frame not bounds""

parents 5a9bf901 e67fcd0a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -539,7 +539,7 @@ void Output::ensureOutputLayerIfVisible(sp<compositionengine::LayerFE>& layerFE,
    // TODO(b/121291683): Why does this not use visibleRegion? (see outputSpaceVisibleRegion below)
    const auto& outputState = getState();
    Region drawRegion(outputState.transform.transform(visibleNonTransparentRegion));
    drawRegion.andSelf(outputState.frame);
    drawRegion.andSelf(outputState.bounds);
    if (drawRegion.isEmpty()) {
        return;
    }
+4 −45
Original line number Diff line number Diff line
@@ -1067,7 +1067,7 @@ struct OutputEnsureOutputLayerIfVisibleTest : public testing::Test {
        EXPECT_CALL(mOutput, getOutputLayerOrderedByZByIndex(0u))
                .WillRepeatedly(Return(&mLayer.outputLayer));

        mOutput.mState.frame = Rect(0, 0, 200, 300);
        mOutput.mState.bounds = Rect(0, 0, 200, 300);
        mOutput.mState.viewport = Rect(0, 0, 200, 300);
        mOutput.mState.transform = ui::Transform(TR_IDENT, 200, 300);

@@ -1116,7 +1116,6 @@ TEST_F(OutputEnsureOutputLayerIfVisibleTest, performsGeomLatchBeforeCheckingIfLa
    EXPECT_CALL(mOutput, belongsInOutput(sp<LayerFE>(mLayer.layerFE))).WillOnce(Return(false));
    EXPECT_CALL(*mLayer.layerFE,
                prepareCompositionState(compositionengine::LayerFE::StateSubset::BasicGeometry));
    EXPECT_CALL(mOutput, ensureOutputLayer(_, _)).Times(0);

    mGeomSnapshots.clear();

@@ -1126,35 +1125,30 @@ TEST_F(OutputEnsureOutputLayerIfVisibleTest, performsGeomLatchBeforeCheckingIfLa
TEST_F(OutputEnsureOutputLayerIfVisibleTest,
       skipsLatchIfAlreadyLatchedBeforeCheckingIfLayerBelongs) {
    EXPECT_CALL(mOutput, belongsInOutput(sp<LayerFE>(mLayer.layerFE))).WillOnce(Return(false));
    EXPECT_CALL(mOutput, ensureOutputLayer(_, _)).Times(0);

    ensureOutputLayerIfVisible();
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesEarlyOutIfLayerHasNoCompositionState) {
    EXPECT_CALL(*mLayer.layerFE, getCompositionState()).WillOnce(Return(nullptr));
    EXPECT_CALL(mOutput, ensureOutputLayer(_, _)).Times(0);

    ensureOutputLayerIfVisible();
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesEarlyOutIfLayerNotVisible) {
    mLayer.layerFEState.isVisible = false;
    EXPECT_CALL(mOutput, ensureOutputLayer(_, _)).Times(0);

    ensureOutputLayerIfVisible();
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesEarlyOutIfLayerHasEmptyVisibleRegion) {
    mLayer.layerFEState.geomLayerBounds = FloatRect{0, 0, 0, 0};
    EXPECT_CALL(mOutput, ensureOutputLayer(_, _)).Times(0);

    ensureOutputLayerIfVisible();
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesNotSoEarlyOutIfDrawRegionEmpty) {
    mOutput.mState.frame = Rect(0, 0, 0, 0);
    EXPECT_CALL(mOutput, ensureOutputLayer(_, _)).Times(0);
TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesNotSoEarlyOutifDrawRegionEmpty) {
    mOutput.mState.bounds = Rect(0, 0, 0, 0);

    ensureOutputLayerIfVisible();
}
@@ -1426,41 +1420,6 @@ TEST_F(OutputEnsureOutputLayerIfVisibleTest,
    EXPECT_THAT(mLayer.outputLayerState.outputSpaceVisibleRegion, RegionEq(kRegionClipped));
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, handlesCreatingOutputLayerWhenBoundsDifferFrame) {
    const ui::Size bounds(1920, 1080);
    const ui::Size frame(3840, 2160);
    mOutput.mState.bounds = Rect(bounds);
    mOutput.mState.viewport = Rect(bounds);
    mOutput.mState.frame = Rect(frame);
    ui::Transform transform;
    transform.set(frame.width / bounds.width, 0, 0, frame.height / bounds.height);
    mOutput.mState.transform = transform;

    // Layer bounds are in the bottom right corner
    const Rect layerBounds =
            Rect(bounds.width - 20, bounds.height - 20, bounds.width, bounds.height);
    const Region fullBoundsRegion = Region(layerBounds);
    mLayer.layerFEState.geomLayerBounds =
            FloatRect{static_cast<float>(layerBounds.left), static_cast<float>(layerBounds.top),
                      static_cast<float>(layerBounds.right),
                      static_cast<float>(layerBounds.bottom)};

    EXPECT_CALL(mOutput, getOutputLayerCount()).WillOnce(Return(0u));
    EXPECT_CALL(mOutput, ensureOutputLayer(Eq(std::nullopt), Eq(mLayer.layerFE)))
            .WillOnce(Return(&mLayer.outputLayer));

    ensureOutputLayerIfVisible();
    EXPECT_THAT(mCoverageState.dirtyRegion, RegionEq(fullBoundsRegion));
    EXPECT_THAT(mCoverageState.aboveCoveredLayers, RegionEq(fullBoundsRegion));
    EXPECT_THAT(mCoverageState.aboveOpaqueLayers, RegionEq(fullBoundsRegion));

    EXPECT_THAT(mLayer.outputLayerState.visibleRegion, RegionEq(fullBoundsRegion));
    EXPECT_THAT(mLayer.outputLayerState.visibleNonTransparentRegion, RegionEq(fullBoundsRegion));
    EXPECT_THAT(mLayer.outputLayerState.coveredRegion, RegionEq(kEmptyRegion));
    EXPECT_THAT(mLayer.outputLayerState.outputSpaceVisibleRegion,
                RegionEq(transform.transform(fullBoundsRegion)));
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, coverageAccumulatesTest) {
    mLayer.layerFEState.isOpaque = false;
    mLayer.layerFEState.contentDirty = true;
@@ -1561,7 +1520,7 @@ TEST_F(OutputEnsureOutputLayerIfVisibleTest, shadowRegionOnlyTest) {
    EXPECT_TRUE(kExpectedLayerVisibleRegion.subtract(kExpectedLayerShadowRegion).isEmpty());
}

TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesNotSoEarlyOutIfLayerWithShadowIsCovered) {
TEST_F(OutputEnsureOutputLayerIfVisibleTest, takesNotSoEarlyOutifLayerWithShadowIsCovered) {
    ui::Transform translate;
    translate.set(50, 50);
    mLayer.layerFEState.geomLayerTransform = translate;