uint8_t transform; uint8_t reserved[3]; };
……//省略部分代码
//双方同步
// these attributes are part of the conditions/updates volatile int32_t head; // server’s current front buffer
volatile int32_t available; // number of dequeue-able buffers volatile int32_t queued; // number of buffers waiting for post volatile int32_t reserved1;
volatile status_t status; // surface’s status code
// not part of the conditions volatile int32_t reallocMask;
volatile int8_t index[NUM_BUFFER_MAX]; int32_t identity; // surface’s identity (const) int32_t token; // surface’s token (for debugging) Statistics stats;
int8_t headBuf; // last retired buffer uint8_t reservedBytes[3]; int32_t reserved;
BufferData buffers[NUM_BUFFER_MAX]; // 16个数组元素 };
可见SharedBufferStack里面定义了几个结构体,用于保存矩形区域。如果我们把BufferData所保存的区域称为一块区域的话,那么SharedBufferStack里可以包含多达16
块区域。在Android系统里,一个Surface对应一个SharedBufferStack。而SharedClient则包含了31个SharedBufferStack:
// 32 KB max class SharedClient {
……//省略部分代码
// FIXME: this should be replaced by a lock-less primitive Mutex lock; Condition cv;
SharedBufferStack surfaces[ SharedBufferStack::NUM_LAYERS_MAX ];//31个数组元素 };
因此,上图展示了SharedClient中包含的31个Stack元素
每当client侧创建一个surface时,都要通过SharedBufferClient的dequeue从SharedBufferStack取出一个不用的slot。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Android的Graphic系统分析之skia(4)在线全文阅读。
相关推荐: