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

Commit 0dda09b5 authored by Galia Peycheva's avatar Galia Peycheva Committed by Android (Google) Code Review
Browse files

Merge "Dynamically disable blurs when tunnel mode is used"

parents 6ca24260 66eaf4a3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -108,6 +108,9 @@ public:
        // If set to true, change the layer settings to render a clear output.
        // This may be requested by the HWC
        const bool clearContent;

        // If set to true, change the layer settings to not use any blurs.
        const bool disableBlurs;
    };

    // A superset of LayerSettings required by RenderEngine to compose a layer
+14 −3
Original line number Diff line number Diff line
@@ -669,8 +669,14 @@ void Output::updateAndWriteCompositionState(
compositionengine::OutputLayer* Output::findLayerRequestingBackgroundComposition() const {
    compositionengine::OutputLayer* layerRequestingBgComposition = nullptr;
    for (auto* layer : getOutputLayersOrderedByZ()) {
        if (layer->getLayerFE().getCompositionState()->backgroundBlurRadius > 0 ||
            layer->getLayerFE().getCompositionState()->blurRegions.size() > 0) {
        auto* compState = layer->getLayerFE().getCompositionState();

        // If any layer has a sideband stream, we will disable blurs. In that case, we don't
        // want to force client composition because of the blur.
        if (compState->sidebandStream != nullptr) {
            return nullptr;
        }
        if (compState->backgroundBlurRadius > 0 || compState->blurRegions.size() > 0) {
            layerRequestingBgComposition = layer;
        }
    }
@@ -1022,6 +1028,8 @@ std::vector<LayerFE::LayerSettings> Output::generateClientCompositionRequests(
    // Used when a layer clears part of the buffer.
    Region stubRegion;

    bool disableBlurs = false;

    for (auto* layer : getOutputLayersOrderedByZ()) {
        const auto& layerState = layer->getState();
        const auto* layerFEState = layer->getLayerFE().getCompositionState();
@@ -1035,6 +1043,8 @@ std::vector<LayerFE::LayerSettings> Output::generateClientCompositionRequests(
            continue;
        }

        disableBlurs |= layerFEState->sidebandStream != nullptr;

        const bool clientComposition = layer->requiresClientComposition();

        // We clear the client target for non-client composed layers if
@@ -1063,7 +1073,8 @@ std::vector<LayerFE::LayerSettings> Output::generateClientCompositionRequests(
                                   .viewport = outputState.layerStackSpace.content,
                                   .dataspace = outputDataspace,
                                   .realContentIsVisible = realContentIsVisible,
                                   .clearContent = !clientComposition};
                                   .clearContent = !clientComposition,
                                   .disableBlurs = disableBlurs};
            std::vector<LayerFE::LayerSettings> results =
                    layerFE.prepareClientCompositionList(targetSettings);
            if (realContentIsVisible && !results.empty()) {
+21 −0
Original line number Diff line number Diff line
@@ -3688,6 +3688,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers, clearsHWCLayersIfOpaqu
            kDisplayDataspace,
            false /* realContentIsVisible */,
            true /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer2TargetSettings{
            Region(kDisplayFrame),
@@ -3699,6 +3700,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers, clearsHWCLayersIfOpaqu
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    LayerFE::LayerSettings mBlackoutSettings = mLayers[1].mLayerSettings;
@@ -3742,6 +3744,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer1TargetSettings{
            Region(Rect(0, 0, 30, 30)),
@@ -3753,6 +3756,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer2TargetSettings{
            Region(Rect(0, 0, 40, 201)),
@@ -3764,6 +3768,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(mLayers[0].mLayerFE, prepareClientCompositionList(Eq(ByRef(layer0TargetSettings))))
@@ -3795,6 +3800,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer1TargetSettings{
            Region(kDisplayFrame),
@@ -3806,6 +3812,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer2TargetSettings{
            Region(kDisplayFrame),
@@ -3817,6 +3824,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(mLayers[0].mLayerFE, prepareClientCompositionList(Eq(ByRef(layer0TargetSettings))))
@@ -3848,6 +3856,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,

    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer1TargetSettings{
@@ -3860,6 +3869,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer2TargetSettings{
            Region(kDisplayFrame),
@@ -3871,6 +3881,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(mLayers[0].mLayerFE, prepareClientCompositionList(Eq(ByRef(layer0TargetSettings))))
@@ -3901,6 +3912,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer1TargetSettings{
            Region(kDisplayFrame),
@@ -3912,6 +3924,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer2TargetSettings{
            Region(kDisplayFrame),
@@ -3923,6 +3936,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(mLayers[0].mLayerFE, prepareClientCompositionList(Eq(ByRef(layer0TargetSettings))))
@@ -3951,6 +3965,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer1TargetSettings{
            Region(kDisplayFrame),
@@ -3962,6 +3977,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };
    compositionengine::LayerFE::ClientCompositionTargetSettings layer2TargetSettings{
            Region(kDisplayFrame),
@@ -3973,6 +3989,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(mLayers[0].mLayerFE, prepareClientCompositionList(Eq(ByRef(layer0TargetSettings))))
@@ -4092,6 +4109,7 @@ TEST_F(GenerateClientCompositionRequestsTest, handlesLandscapeModeSplitScreenReq
            kOutputDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(leftLayer.mOutputLayer, requiresClientComposition()).WillRepeatedly(Return(true));
@@ -4109,6 +4127,7 @@ TEST_F(GenerateClientCompositionRequestsTest, handlesLandscapeModeSplitScreenReq
            kOutputDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(rightLayer.mOutputLayer, requiresClientComposition()).WillRepeatedly(Return(true));
@@ -4142,6 +4161,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            false /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    LayerFE::LayerSettings mShadowSettings;
@@ -4187,6 +4207,7 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
            kDisplayDataspace,
            true /* realContentIsVisible */,
            false /* clearContent */,
            false /* disabledBlurs */,
    };

    EXPECT_CALL(mLayers[0].mOutputLayer, requiresClientComposition()).WillOnce(Return(false));
+5 −3
Original line number Diff line number Diff line
@@ -627,7 +627,7 @@ const char* Layer::getDebugName() const {
// ---------------------------------------------------------------------------

std::optional<compositionengine::LayerFE::LayerSettings> Layer::prepareClientComposition(
        compositionengine::LayerFE::ClientCompositionTargetSettings& /* targetSettings */) {
        compositionengine::LayerFE::ClientCompositionTargetSettings& targetSettings) {
    if (!getCompositionState()) {
        return {};
    }
@@ -649,8 +649,10 @@ std::optional<compositionengine::LayerFE::LayerSettings> Layer::prepareClientCom

    layerSettings.alpha = alpha;
    layerSettings.sourceDataspace = getDataSpace();
    if (!targetSettings.disableBlurs) {
        layerSettings.backgroundBlurRadius = getBackgroundBlurRadius();
        layerSettings.blurRegions = getBlurRegions();
    }
    return layerSettings;
}

+7 −1
Original line number Diff line number Diff line
@@ -5796,7 +5796,10 @@ status_t SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
    const auto display = renderArea.getDisplayDevice();
    std::vector<Layer*> renderedLayers;
    Region clearRegion = Region::INVALID_REGION;
    bool disableBlurs = false;
    traverseLayers([&](Layer* layer) {
        disableBlurs |= layer->getCurrentState().sidebandStream != nullptr;

        Region clip(renderArea.getBounds());
        compositionengine::LayerFE::ClientCompositionTargetSettings targetSettings{
                clip,
@@ -5809,6 +5812,7 @@ status_t SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
                clientCompositionDisplay.outputDataspace,
                true, /* realContentIsVisible */
                false, /* clearContent */
                disableBlurs,
        };
        std::vector<compositionengine::LayerFE::LayerSettings> results =
                layer->prepareClientCompositionList(targetSettings);
@@ -5823,11 +5827,13 @@ status_t SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
                    settings.backgroundBlurRadius = 0;
                }
            }

            clientCompositionLayers.insert(clientCompositionLayers.end(),
                                           std::make_move_iterator(results.begin()),
                                           std::make_move_iterator(results.end()));
            renderedLayers.push_back(layer);
        }

    });

    std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers(