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

Commit 3e5c9ec6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "SF: Include fence returned from renderScreen into layers' release...

Merge "SF: Include fence returned from renderScreen into layers' release fence" into rvc-dev am: dd543193 am: 93a7e1f3 am: 6e550694

Change-Id: Ibc6bf79723a6f90dc7d448b62f94475c099d5bc6
parents 047a92a7 6e550694
Loading
Loading
Loading
Loading
+18 −10
Original line number Original line Diff line number Diff line
@@ -5822,6 +5822,7 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
    fillLayer.alpha = half(alpha);
    fillLayer.alpha = half(alpha);
    clientCompositionLayers.push_back(fillLayer);
    clientCompositionLayers.push_back(fillLayer);


    std::vector<Layer*> renderedLayers;
    Region clearRegion = Region::INVALID_REGION;
    Region clearRegion = Region::INVALID_REGION;
    traverseLayers([&](Layer* layer) {
    traverseLayers([&](Layer* layer) {
        const bool supportProtectedContent = false;
        const bool supportProtectedContent = false;
@@ -5840,19 +5841,19 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
        };
        };
        std::vector<compositionengine::LayerFE::LayerSettings> results =
        std::vector<compositionengine::LayerFE::LayerSettings> results =
                layer->prepareClientCompositionList(targetSettings);
                layer->prepareClientCompositionList(targetSettings);
        if (results.size() > 0) {
            clientCompositionLayers.insert(clientCompositionLayers.end(),
            clientCompositionLayers.insert(clientCompositionLayers.end(),
                                           std::make_move_iterator(results.begin()),
                                           std::make_move_iterator(results.begin()),
                                           std::make_move_iterator(results.end()));
                                           std::make_move_iterator(results.end()));
        results.clear();
            renderedLayers.push_back(layer);

        }
    });
    });


    std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers;
    std::vector<const renderengine::LayerSettings*> clientCompositionLayerPointers(
    clientCompositionLayers.reserve(clientCompositionLayers.size());
            clientCompositionLayers.size());
    std::transform(clientCompositionLayers.begin(), clientCompositionLayers.end(),
    std::transform(clientCompositionLayers.begin(), clientCompositionLayers.end(),
                   std::back_inserter(clientCompositionLayerPointers),
                   clientCompositionLayerPointers.begin(),
                   [](compositionengine::LayerFE::LayerSettings& settings)
                   std::pointer_traits<renderengine::LayerSettings*>::pointer_to);
                           -> renderengine::LayerSettings* { return &settings; });


    clientCompositionDisplay.clearRegion = clearRegion;
    clientCompositionDisplay.clearRegion = clearRegion;
    // Use an empty fence for the buffer fence, since we just created the buffer so
    // Use an empty fence for the buffer fence, since we just created the buffer so
@@ -5864,6 +5865,13 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea,
                                 /*useFramebufferCache=*/false, std::move(bufferFence), &drawFence);
                                 /*useFramebufferCache=*/false, std::move(bufferFence), &drawFence);


    *outSyncFd = drawFence.release();
    *outSyncFd = drawFence.release();

    if (*outSyncFd >= 0) {
        sp<Fence> releaseFence = new Fence(dup(*outSyncFd));
        for (auto* layer : renderedLayers) {
            layer->onLayerDisplayed(releaseFence);
        }
    }
}
}


status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea,
status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea,