Untitled

// A buffer can be in one of five states, represented as below:
//
//         | mShared | mDequeueCount | mQueueCount | mAcquireCount |
// --------|---------|---------------|-------------|---------------|
// FREE    |  false  |       0       |      0      |       0       |
// DEQUEUED|  false  |       1       |      0      |       0       |
// QUEUED  |  false  |       0       |      1      |       0       |
// ACQUIRED|  false  |       0       |      0      |       1       |
// SHARED  |  true   |      any      |     any     |      any      |
// BufferState tracks the states in which a buffer slot can be.
struct BufferState {
    // All slots are initially FREE (not dequeued, queued, acquired, or shared).
    BufferState()
    : mDequeueCount(0),
      mQueueCount(0),
      mAcquireCount(0),
      mShared(false) {
    }

    uint32_t mDequeueCount;
    uint32_t mQueueCount;
    uint32_t mAcquireCount;
    bool mShared;

    inline bool isFree() const {
        return !isAcquired() && !isDequeued() && !isQueued();
    }

    inline bool isDequeued() const {
        return mDequeueCount > 0;
    }

    inline bool isQueued() const {
        return mQueueCount > 0;
    }

    inline bool isAcquired() const {
        return mAcquireCount > 0;
    }

    inline bool isShared() const {
        return mShared;
    }
}

BufferState 是在 BufferSlot.h 中声明的,它跟踪 buffer 的状态。状态并没有直接定义,而是用 mDequeueCountmQueueCountmAcquireCount 计算出来的。

之前没有共享 buffer 的时候定义过 BufferState 枚举,如下所示。

enum BufferState {
    FREE = 0,
    DEQUEUED = 1,
    QUEUED = 2,
    ACQUIRED = 3
};

mAcquireCalled