summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Patrick Williams <pdwilliams@google.com> 2022-11-17 17:19:38 +0000
committer Patrick Williams <pdwilliams@google.com> 2022-11-17 17:36:36 +0000
commit4da6085e6680c42a67bd816156f097f0a1195d77 (patch)
tree772dacb1b6d51cf54f7d3e2bea824ad0314781ec
parent0e33fae84f0aa2532dfe56fd27e8c90cd322e48f (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.cpp9
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp17
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