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

Commit 505d7646 authored by Anton Ivanov's avatar Anton Ivanov
Browse files

BufferItemConsumer: initialize ConsumerBase in onFirstRef().

Bug: 393217449
Test: presubmit
Flag: EXEMPT_refactor
Change-Id: I10760c6ac2d4f9bd4f1205c3ee08dfa03b17d82a
parent 279ae4f2
Loading
Loading
Loading
Loading
+23 −18
Original line number Diff line number Diff line
@@ -54,33 +54,38 @@ sp<BufferItemConsumer> BufferItemConsumer::create(const sp<IGraphicBufferConsume

BufferItemConsumer::BufferItemConsumer(uint64_t consumerUsage, int bufferCount,
                                       bool controlledByApp, bool isConsumerSurfaceFlinger)
      : ConsumerBase(controlledByApp, isConsumerSurfaceFlinger) {
    initialize(consumerUsage, bufferCount);
}
      : ConsumerBase(controlledByApp, isConsumerSurfaceFlinger),
        mConsumerUsage(consumerUsage),
        mBufferCount(bufferCount) {}

BufferItemConsumer::BufferItemConsumer(const sp<IGraphicBufferProducer>& producer,
                                       const sp<IGraphicBufferConsumer>& consumer,
                                       uint64_t consumerUsage, int bufferCount,
                                       bool controlledByApp)
      : ConsumerBase(producer, consumer, controlledByApp) {
    initialize(consumerUsage, bufferCount);
}
      : ConsumerBase(producer, consumer, controlledByApp),
        mConsumerUsage(consumerUsage),
        mBufferCount(bufferCount) {}

BufferItemConsumer::BufferItemConsumer(const sp<IGraphicBufferConsumer>& consumer,
                                       uint64_t consumerUsage, int bufferCount,
                                       bool controlledByApp)
      : ConsumerBase(consumer, controlledByApp),
        mConsumerUsage(consumerUsage),
        mBufferCount(bufferCount) {}

BufferItemConsumer::BufferItemConsumer(
        const sp<IGraphicBufferConsumer>& consumer, uint64_t consumerUsage,
        int bufferCount, bool controlledByApp) :
    ConsumerBase(consumer, controlledByApp)
{
    initialize(consumerUsage, bufferCount);
void BufferItemConsumer::onFirstRef() {
    ConsumerBase::onFirstRef();
    initializeConsumer();
}

void BufferItemConsumer::initialize(uint64_t consumerUsage, int bufferCount) {
    status_t err = mConsumer->setConsumerUsageBits(consumerUsage);
    LOG_ALWAYS_FATAL_IF(err != OK, "Failed to set consumer usage bits to %#" PRIx64, consumerUsage);
    if (bufferCount != DEFAULT_MAX_BUFFERS) {
        err = mConsumer->setMaxAcquiredBufferCount(bufferCount);
void BufferItemConsumer::initializeConsumer() {
    status_t err = mConsumer->setConsumerUsageBits(mConsumerUsage);
    LOG_ALWAYS_FATAL_IF(err != OK, "Failed to set consumer usage bits to %#" PRIx64,
                        mConsumerUsage);
    if (mBufferCount != DEFAULT_MAX_BUFFERS) {
        err = mConsumer->setMaxAcquiredBufferCount(mBufferCount);
        LOG_ALWAYS_FATAL_IF(err != OK, "Failed to set max acquired buffer count to %d",
                            bufferCount);
                            mBufferCount);
    }
}

+6 −1
Original line number Diff line number Diff line
@@ -104,6 +104,8 @@ class BufferItemConsumer: public ConsumerBase
    status_t releaseBuffer(const sp<GraphicBuffer>& buffer,
                           const sp<Fence>& releaseFence = Fence::NO_FENCE);

    void onFirstRef() override;

protected:
    // This should only be used by BLASTBufferQueue:
    BufferItemConsumer(const sp<IGraphicBufferProducer>& producer,
@@ -119,13 +121,16 @@ protected:
private:
    friend sp<BufferItemConsumer>;

    void initialize(uint64_t consumerUsage, int bufferCount);
    void initializeConsumer();

    status_t releaseBufferSlotLocked(int slotIndex, const sp<GraphicBuffer>& buffer,
                                     const sp<Fence>& releaseFence);

    void freeBufferLocked(int slotIndex) override;

    uint64_t mConsumerUsage;
    int mBufferCount;

    // mBufferFreedListener is the listener object that will be called when
    // an old buffer is being freed. If it is not NULL it will be called from
    // freeBufferLocked.