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

Commit 29da4c3b authored by Patrick Williams's avatar Patrick Williams Committed by Android (Google) Code Review
Browse files

Merge "Revert "SF: Use strong pointers to Layer when moving snapshot""

parents 35ebcac0 4da6085e
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -3973,17 +3973,14 @@ int Layer::getHwcCacheSlot(const client_cache_t& clientCacheId) {
}

LayerSnapshotGuard::LayerSnapshotGuard(Layer* layer) : mLayer(layer) {
    LOG_ALWAYS_FATAL_IF(!mLayer, "LayerSnapshotGuard received a null layer.");
    if (mLayer) {
        mLayer->mLayerFE->mSnapshot = std::move(mLayer->mSnapshot);
    LOG_ALWAYS_FATAL_IF(!mLayer->mLayerFE->mSnapshot,
                        "LayerFE snapshot null after taking ownership from layer");
    }
}

LayerSnapshotGuard::~LayerSnapshotGuard() {
    if (mLayer) {
        mLayer->mSnapshot = std::move(mLayer->mLayerFE->mSnapshot);
        LOG_ALWAYS_FATAL_IF(!mLayer->mSnapshot,
                            "Layer snapshot null after taking ownership from LayerFE");
    }
}

+5 −12
Original line number Diff line number Diff line
@@ -2190,14 +2190,13 @@ void SurfaceFlinger::composite(TimePoint frameTime, VsyncId vsyncId)

    refreshArgs.updatingOutputGeometryThisFrame = mVisibleRegionsDirty;
    refreshArgs.updatingGeometryThisFrame = mGeometryDirty.exchange(false) || mVisibleRegionsDirty;
    std::vector<sp<Layer>> layers;
    std::vector<Layer*> layers;

    mDrawingState.traverseInZOrder([&refreshArgs, &layers](Layer* layer) {
        auto strongLayer = sp<Layer>::fromExisting(layer);
        if (auto layerFE = layer->getCompositionEngineLayerFE()) {
            layer->updateSnapshot(refreshArgs.updatingGeometryThisFrame);
            refreshArgs.layers.push_back(layerFE);
            layers.push_back(std::move(strongLayer));
            layers.push_back(layer);
        }
    });
    refreshArgs.blursAreExpensive = mBlursAreExpensive;
@@ -2229,8 +2228,8 @@ void SurfaceFlinger::composite(TimePoint frameTime, VsyncId vsyncId)

    {
        std::vector<LayerSnapshotGuard> layerSnapshotGuards;
        for (auto& layer : layers) {
            layerSnapshotGuards.emplace_back(layer.get());
        for (Layer* layer : layers) {
            layerSnapshotGuards.emplace_back(layer);
        }
        mCompositionEngine->present(refreshArgs);
    }
@@ -3330,12 +3329,7 @@ void SurfaceFlinger::updateCursorAsync() {

    std::vector<LayerSnapshotGuard> layerSnapshotGuards;
    mDrawingState.traverse([&layerSnapshotGuards](Layer* layer) {
        auto strongLayer = sp<Layer>::fromExisting(layer);
        const LayerSnapshot* snapshot = layer->getLayerSnapshot();
        if (!snapshot) {
            LOG_ALWAYS_FATAL("Layer snapshot unexpectedly null");
        }
        if (snapshot->compositionType ==
        if (layer->getLayerSnapshot()->compositionType ==
            aidl::android::hardware::graphics::composer3::Composition::CURSOR) {
            layer->updateSnapshot(false /* updateGeometry */);
            layerSnapshotGuards.emplace_back(layer);
@@ -6479,7 +6473,6 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
    layers.reserve(layerCount);
    std::unordered_set<compositionengine::LayerFE*> filterForScreenshot;
    traverseLayers([&](Layer* layer) {
        auto strongLayer = sp<Layer>::fromExisting(layer);
        captureResults.capturedHdrLayers |= isHdrLayer(layer);
        // Layer::prepareClientComposition uses the layer's snapshot to populate the resulting
        // LayerSettings. Calling Layer::updateSnapshot ensures that LayerSettings are