SF: Fix lifecycle of LayerBE
Use shared_ptr to make sure that the LayerBE object pointed to
by CompositionInfo is not destroyed prior to BE processing
of CompositionInfo structure
Bug: 112259502
Test: cts -m CtsViewTestCases
SurfaceFlinger_test
vrflinger_test
Change-Id: Iac647ed3fdc8d41a8c0e00930e89734d0a84eb14
diff --git a/services/surfaceflinger/LayerBE.cpp b/services/surfaceflinger/LayerBE.cpp
index eea4ebd..b936b3f 100644
--- a/services/surfaceflinger/LayerBE.cpp
+++ b/services/surfaceflinger/LayerBE.cpp
@@ -26,10 +26,17 @@
LayerBE::LayerBE(Layer* layer, std::string layerName)
: mLayer(layer),
mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2) {
- compositionInfo.layer = this;
+ compositionInfo.layer = std::make_shared<LayerBE>(*this);
compositionInfo.layerName = layerName;
}
+LayerBE::LayerBE(const LayerBE& layer)
+ : mLayer(layer.mLayer),
+ mMesh(Mesh::TRIANGLE_FAN, 4, 2, 2) {
+ compositionInfo.layer = layer.compositionInfo.layer;
+ compositionInfo.layerName = layer.mLayer->getName().string();
+}
+
void LayerBE::onLayerDisplayed(const sp<Fence>& releaseFence) {
mLayer->onLayerDisplayed(releaseFence);
}