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

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

Merge "SF: Cleanup Layer membership test"

parents 8ea00877 66c20c4d
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -134,6 +134,9 @@ public:
    // this output allows that.
    // this output allows that.
    virtual bool belongsInOutput(std::optional<uint32_t> layerStackId, bool internalOnly) const = 0;
    virtual bool belongsInOutput(std::optional<uint32_t> layerStackId, bool internalOnly) const = 0;


    // Determines if a layer belongs to the output.
    virtual bool belongsInOutput(const compositionengine::Layer*) const = 0;

    // Returns a pointer to the output layer corresponding to the given layer on
    // Returns a pointer to the output layer corresponding to the given layer on
    // this output, or nullptr if the layer does not have one
    // this output, or nullptr if the layer does not have one
    virtual OutputLayer* getOutputLayerForLayer(Layer*) const = 0;
    virtual OutputLayer* getOutputLayerForLayer(Layer*) const = 0;
+1 −0
Original line number Original line Diff line number Diff line
@@ -63,6 +63,7 @@ public:


    Region getDirtyRegion(bool repaintEverything) const override;
    Region getDirtyRegion(bool repaintEverything) const override;
    bool belongsInOutput(std::optional<uint32_t>, bool) const override;
    bool belongsInOutput(std::optional<uint32_t>, bool) const override;
    bool belongsInOutput(const compositionengine::Layer*) const override;


    compositionengine::OutputLayer* getOutputLayerForLayer(
    compositionengine::OutputLayer* getOutputLayerForLayer(
            compositionengine::Layer*) const override;
            compositionengine::Layer*) const override;
+1 −0
Original line number Original line Diff line number Diff line
@@ -60,6 +60,7 @@ public:


    MOCK_CONST_METHOD1(getDirtyRegion, Region(bool));
    MOCK_CONST_METHOD1(getDirtyRegion, Region(bool));
    MOCK_CONST_METHOD2(belongsInOutput, bool(std::optional<uint32_t>, bool));
    MOCK_CONST_METHOD2(belongsInOutput, bool(std::optional<uint32_t>, bool));
    MOCK_CONST_METHOD1(belongsInOutput, bool(const compositionengine::Layer*));


    MOCK_CONST_METHOD1(getOutputLayerForLayer,
    MOCK_CONST_METHOD1(getOutputLayerForLayer,
                       compositionengine::OutputLayer*(compositionengine::Layer*));
                       compositionengine::OutputLayer*(compositionengine::Layer*));
+9 −0
Original line number Original line Diff line number Diff line
@@ -219,6 +219,15 @@ bool Output::belongsInOutput(std::optional<uint32_t> layerStackId, bool internal
            (!internalOnly || mState.layerStackInternal);
            (!internalOnly || mState.layerStackInternal);
}
}


bool Output::belongsInOutput(const compositionengine::Layer* layer) const {
    if (!layer) {
        return false;
    }

    const auto& layerFEState = layer->getState().frontEnd;
    return belongsInOutput(layerFEState.layerStackId, layerFEState.internalOnly);
}

compositionengine::OutputLayer* Output::getOutputLayerForLayer(
compositionengine::OutputLayer* Output::getOutputLayerForLayer(
        compositionengine::Layer* layer) const {
        compositionengine::Layer* layer) const {
    for (const auto& outputLayer : mOutputLayersOrderedByZ) {
    for (const auto& outputLayer : mOutputLayersOrderedByZ) {
+65 −0
Original line number Original line Diff line number Diff line
@@ -376,6 +376,71 @@ TEST_F(OutputTest, belongsInOutputFiltersAsExpected) {
    EXPECT_FALSE(mOutput.belongsInOutput(layerStack2, false));
    EXPECT_FALSE(mOutput.belongsInOutput(layerStack2, false));
}
}


TEST_F(OutputTest, belongsInOutputFiltersLayersAsExpected) {
    StrictMock<mock::Layer> layer;
    impl::LayerCompositionState layerState;

    EXPECT_CALL(layer, getState()).WillRepeatedly(ReturnRef(layerState));

    const uint32_t layerStack1 = 123u;
    const uint32_t layerStack2 = 456u;

    // If the output accepts layerStack1 and internal-only layers....
    mOutput.setLayerStackFilter(layerStack1, true);

    // A null layer pointer does not belong to the output
    EXPECT_FALSE(mOutput.belongsInOutput(nullptr));

    // A layer with no layerStack does not belong to it, internal-only or not.
    layerState.frontEnd.layerStackId = std::nullopt;
    layerState.frontEnd.internalOnly = false;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = std::nullopt;
    layerState.frontEnd.internalOnly = true;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));

    // Any layer with layerStack1 belongs to it, internal-only or not.
    layerState.frontEnd.layerStackId = layerStack1;
    layerState.frontEnd.internalOnly = false;
    EXPECT_TRUE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = layerStack1;
    layerState.frontEnd.internalOnly = true;
    EXPECT_TRUE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = layerStack2;
    layerState.frontEnd.internalOnly = true;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = layerStack2;
    layerState.frontEnd.internalOnly = false;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));

    // If the output accepts layerStack1 but not internal-only layers...
    mOutput.setLayerStackFilter(layerStack1, false);

    // A null layer pointer does not belong to the output
    EXPECT_FALSE(mOutput.belongsInOutput(nullptr));

    // Only non-internal layers with layerStack1 belong to it.
    layerState.frontEnd.layerStackId = layerStack1;
    layerState.frontEnd.internalOnly = false;
    EXPECT_TRUE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = layerStack1;
    layerState.frontEnd.internalOnly = true;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = layerStack2;
    layerState.frontEnd.internalOnly = true;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));

    layerState.frontEnd.layerStackId = layerStack2;
    layerState.frontEnd.internalOnly = false;
    EXPECT_FALSE(mOutput.belongsInOutput(&layer));
}

/*
/*
 * Output::getOutputLayerForLayer()
 * Output::getOutputLayerForLayer()
 */
 */
Loading