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

Commit 4da6085e authored by Patrick Williams's avatar Patrick Williams
Browse files

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

This reverts commit 5c259c0e.

Reason for revert: b/258572995 - performance regression

Change-Id: I7b8225fe6cf3a2dfa71c55ef213d081daa105cc3
parent 0e33fae8
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -3974,17 +3974,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);
    }
@@ -3351,12 +3350,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);
@@ -6503,7 +6497,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