uint64_t cache(const sp<GraphicBuffer>& buffer) {
std::lock_guard<std::mutex> lock(mMutex);
if (mBuffers.size() >= BUFFER_CACHE_MAX_SIZE) {
evictLeastRecentlyUsedBuffer();
}
buffer->addDeathCallback(removeDeadBufferCallback, nullptr);
mBuffers[buffer->getId()] = getCounter();
return buffer->getId();
}
- 如果
mBuffers
大小超过了 BUFFER_CACHE_MAX_SIZE
,则调用 evictLeastRecentlyUsedBuffer()
清除一个缓存。
- 调用
addDeathCallback()
监听 GraphicBuffer 的销毁,用于自动清除缓存。removeDeadBufferCallback
函数会调用 BufferCache::uncache() 清除缓存并通知 SurfaceFlinger。
- 缓存该 buffer,并返回
cacheId
。