// Utility class for managing GraphicBuffer references into renderengine
class Image {
public:
    Image(const sp<GraphicBuffer>& graphicBuffer, renderengine::RenderEngine& engine);
    virtual ~Image();
    const sp<GraphicBuffer>& graphicBuffer() { return mGraphicBuffer; }

private:
    // mGraphicBuffer is the buffer that was used to create this image.
    sp<GraphicBuffer> mGraphicBuffer;
    // Back-reference into renderengine to initiate cleanup.
    renderengine::RenderEngine& mRE;
    DISALLOW_COPY_AND_ASSIGN(Image);
};

Image 是 BufferLayerConsumer 内部类,有 GraphicBuffer 成员。

RenderEngine 引用是用于在构造函数中缓存 buffer,在析构函数中解绑 buffer。

BufferLayerConsumer::Image::Image(const sp<GraphicBuffer>& graphicBuffer,
                                  renderengine::RenderEngine& engine)
      : mGraphicBuffer(graphicBuffer), mRE(engine) {
    mRE.cacheExternalTextureBuffer(mGraphicBuffer);
}

BufferLayerConsumer::Image::~Image() {
    if (mGraphicBuffer != nullptr) {
        ALOGV("Destroying buffer: %" PRId64, mGraphicBuffer->getId());
        mRE.unbindExternalTextureBuffer(mGraphicBuffer->getId());
    }
}