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

Commit 60fb5c10 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

SF: Only update layer snapshots if there is something to draw

Avoid doing unnecessary work when preparing composition state.
Fixing a regression from the recent frontend refactors.

Bug: 246680021, 245680157, 238781169
Test: simpleperf with bouncy ball
Change-Id: I3f0bf29bf10ae3ec2d84b851f409ced023410e45
parent ea28fbe0
Loading
Loading
Loading
Loading
+5 −6
Original line number Diff line number Diff line
@@ -2179,8 +2179,8 @@ void SurfaceFlinger::composite(TimePoint frameTime, VsyncId vsyncId)
    std::vector<Layer*> layers;

    mDrawingState.traverseInZOrder([&refreshArgs, &layers](Layer* layer) {
        layer->updateSnapshot(refreshArgs.updatingGeometryThisFrame);
        if (auto layerFE = layer->getCompositionEngineLayerFE()) {
            layer->updateSnapshot(refreshArgs.updatingGeometryThisFrame);
            refreshArgs.layers.push_back(layerFE);
            layers.push_back(layer);
        }
@@ -6447,6 +6447,10 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
    std::vector<Layer*> renderedLayers;
    bool disableBlurs = false;
    traverseLayers([&](Layer* layer) FTL_FAKE_GUARD(kMainThreadContext) {
        auto layerFE = layer->getCompositionEngineLayerFE();
        if (!layerFE) {
            return;
        }
        // Layer::prepareClientComposition uses the layer's snapshot to populate the resulting
        // LayerSettings. Calling Layer::updateSnapshot ensures that LayerSettings are
        // generated with the layer's current buffer and geometry.
@@ -6472,11 +6476,6 @@ ftl::SharedFuture<FenceResult> SurfaceFlinger::renderScreenImpl(
                isHdrLayer(layer) ? displayBrightnessNits : sdrWhitePointNits,

        };
        auto layerFE = layer->getCompositionEngineLayerFE();
        if (!layerFE) {
            return;
        }

        std::optional<compositionengine::LayerFE::LayerSettings> settings;
        {
            LayerSnapshotGuard layerSnapshotGuard(layer);