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

Commit 55c05ad5 authored by Lucas Dupin's avatar Lucas Dupin Committed by Automerger Merge Worker
Browse files

Do not blur opaque layers am: 084a6d4d am: 6d6620e3

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/15687113

Change-Id: I8ea3c85c5bc08d51bec6d5038aeb9f9554b4de26
parents 60184f40 6d6620e3
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -778,6 +778,9 @@ compositionengine::OutputLayer* Output::findLayerRequestingBackgroundComposition
        if (compState->sidebandStream != nullptr) {
            return nullptr;
        }
        if (compState->isOpaque) {
            continue;
        }
        if (compState->backgroundBlurRadius > 0 || compState->blurRegions.size() > 0) {
            layerRequestingBgComposition = layer;
        }
+34 −0
Original line number Diff line number Diff line
@@ -3618,6 +3618,7 @@ struct OutputComposeSurfacesTest_SetsExpensiveRendering_ForBlur
      : public OutputComposeSurfacesTest_SetsExpensiveRendering {
    OutputComposeSurfacesTest_SetsExpensiveRendering_ForBlur() {
        mLayer.layerFEState.backgroundBlurRadius = 10;
        mLayer.layerFEState.isOpaque = false;
        mOutput.editState().isEnabled = true;

        EXPECT_CALL(mLayer.outputLayer, updateCompositionState(false, true, ui::Transform::ROT_0));
@@ -4191,6 +4192,37 @@ TEST_F(GenerateClientCompositionRequestsTest_ThreeLayers,
                                                                kDisplayDataspace));
}

TEST_F(OutputUpdateAndWriteCompositionStateTest, noBackgroundBlurWhenOpaque) {
    InjectedLayer layer1;
    InjectedLayer layer2;

    uint32_t z = 0;
    // Layer requesting blur, or below, should request client composition, unless opaque.
    EXPECT_CALL(*layer1.outputLayer, updateCompositionState(false, false, ui::Transform::ROT_0));
    EXPECT_CALL(*layer1.outputLayer,
                writeStateToHWC(/*includeGeometry*/ false, /*skipLayer*/ false, z++,
                                /*zIsOverridden*/ false, /*isPeekingThrough*/ false));
    EXPECT_CALL(*layer2.outputLayer, updateCompositionState(false, false, ui::Transform::ROT_0));
    EXPECT_CALL(*layer2.outputLayer,
                writeStateToHWC(/*includeGeometry*/ false, /*skipLayer*/ false, z++,
                                /*zIsOverridden*/ false, /*isPeekingThrough*/ false));

    layer2.layerFEState.backgroundBlurRadius = 10;
    layer2.layerFEState.isOpaque = true;

    injectOutputLayer(layer1);
    injectOutputLayer(layer2);

    mOutput->editState().isEnabled = true;

    CompositionRefreshArgs args;
    args.updatingGeometryThisFrame = false;
    args.devOptForceClientComposition = false;
    mOutput->updateCompositionState(args);
    mOutput->planComposition();
    mOutput->writeCompositionState(args);
}

TEST_F(OutputUpdateAndWriteCompositionStateTest, handlesBackgroundBlurRequests) {
    InjectedLayer layer1;
    InjectedLayer layer2;
@@ -4212,6 +4244,7 @@ TEST_F(OutputUpdateAndWriteCompositionStateTest, handlesBackgroundBlurRequests)
                                /*zIsOverridden*/ false, /*isPeekingThrough*/ false));

    layer2.layerFEState.backgroundBlurRadius = 10;
    layer2.layerFEState.isOpaque = false;

    injectOutputLayer(layer1);
    injectOutputLayer(layer2);
@@ -4249,6 +4282,7 @@ TEST_F(OutputUpdateAndWriteCompositionStateTest, handlesBlurRegionRequests) {

    BlurRegion region;
    layer2.layerFEState.blurRegions.push_back(region);
    layer2.layerFEState.isOpaque = false;

    injectOutputLayer(layer1);
    injectOutputLayer(layer2);