diff options
| author | 2022-11-17 17:19:38 +0000 | |
|---|---|---|
| committer | 2022-11-17 17:36:36 +0000 | |
| commit | 4da6085e6680c42a67bd816156f097f0a1195d77 (patch) | |
| tree | 772dacb1b6d51cf54f7d3e2bea824ad0314781ec | |
| parent | 0e33fae84f0aa2532dfe56fd27e8c90cd322e48f (diff) | |
Revert "SF: Use strong pointers to Layer when moving snapshot"
This reverts commit 5c259c0e07395b7d80a43a36d500ba6412606689.
Reason for revert: b/258572995 - performance regression
Change-Id: I7b8225fe6cf3a2dfa71c55ef213d081daa105cc3
| -rw-r--r-- | services/surfaceflinger/Layer.cpp | 9 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 17 |
2 files changed, 8 insertions, 18 deletions
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index e3fe7a7f64..8e612317e5 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -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."); - mLayer->mLayerFE->mSnapshot = std::move(mLayer->mSnapshot); - LOG_ALWAYS_FATAL_IF(!mLayer->mLayerFE->mSnapshot, - "LayerFE snapshot null after taking ownership from layer"); + if (mLayer) { + mLayer->mLayerFE->mSnapshot = std::move(mLayer->mSnapshot); + } } 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"); } } diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 992760fea5..7f3f46bfaf 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -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 |