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

Commit a65a16e7 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

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

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

            renderedLayers.push_back(layer);
        }
    });

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

    clientCompositionDisplay.clearRegion = clearRegion;
    // 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);

    *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,