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

Commit 40a3a5a9 authored by David Sodman's avatar David Sodman
Browse files

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
parent b8aaea16
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -26,10 +26,17 @@ namespace android {
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);
}
+2 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@ struct CompositionInfo {
    HWC2::Composition compositionType;
    sp<GraphicBuffer> mBuffer = nullptr;
    int mBufferSlot = BufferQueue::INVALID_BUFFER_SLOT;
    LayerBE* layer = nullptr;
    std::shared_ptr<LayerBE> layer;
    struct {
        std::shared_ptr<HWC2::Layer> hwcLayer;
        sp<Fence> fence;
@@ -83,6 +83,7 @@ public:
    friend class SurfaceFlinger;

    LayerBE(Layer* layer, std::string layerName);
    explicit LayerBE(const LayerBE& layer);

    void onLayerDisplayed(const sp<Fence>& releaseFence);
    Mesh& getMesh() { return mMesh; }