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

Commit 67ece918 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Make ConsumerProxy hold weak ref to GraphicBufferSource" into qt-dev

parents 9341f1c6 768fc2d6
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -282,24 +282,36 @@ private:
};

struct GraphicBufferSource::ConsumerProxy : public BufferQueue::ConsumerListener {
    ConsumerProxy(const sp<GraphicBufferSource> &gbs) : mGbs(gbs) {}
    ConsumerProxy(const wp<GraphicBufferSource> &gbs) : mGbs(gbs) {}

    ~ConsumerProxy() = default;

    void onFrameAvailable(const BufferItem& item) override {
        mGbs->onFrameAvailable(item);
        sp<GraphicBufferSource> gbs = mGbs.promote();
        if (gbs != nullptr) {
            gbs->onFrameAvailable(item);
        }
    }

    void onBuffersReleased() override {
        mGbs->onBuffersReleased();
        sp<GraphicBufferSource> gbs = mGbs.promote();
        if (gbs != nullptr) {
            gbs->onBuffersReleased();
        }
    }

    void onSidebandStreamChanged() override {
        mGbs->onSidebandStreamChanged();
        sp<GraphicBufferSource> gbs = mGbs.promote();
        if (gbs != nullptr) {
            gbs->onSidebandStreamChanged();
        }
    }

private:
    sp<GraphicBufferSource> mGbs;
    // Note that GraphicBufferSource is holding an sp to us, we can't hold
    // an sp back to GraphicBufferSource as the circular dependency will
    // make both immortal.
    wp<GraphicBufferSource> mGbs;
};

GraphicBufferSource::GraphicBufferSource() :