当前位置: 首页 > news >正文

松江区做网站的公司设计师公司排名

松江区做网站的公司,设计师公司排名,电脑网站和手机网站的区别,wordpress 首页调用文章前面我有篇博客说了gralloc1_perform这个函数,主要是因为我知道有刷cache这个动作,但是不知道具体在哪里实现。但是gralloc1_perform这个接口是很老版本的gralloc用的。这篇博客概括一下最新版本的Gralloc接口。 Gralloc(Graphics Allocatio…

前面我有篇博客说了gralloc1_perform这个函数,主要是因为我知道有刷cache这个动作,但是不知道具体在哪里实现。但是gralloc1_perform这个接口是很老版本的gralloc用的。这篇博客概括一下最新版本的Gralloc接口。

Gralloc(Graphics Allocation)主要用于 GPU/CPU 共享图形缓冲区(buffer)。最新的 Gralloc 体系由 Allocator HAL 3.xMapper HAL 4.x 组成,分别负责 buffer 分配buffer 访问/管理


1️⃣ Gralloc 最新架构

模块作用
Allocator HAL 3.x负责 buffer 分配
Mapper HAL 4.x负责 buffer 访问、映射、缓存管理等

2️⃣ Allocator HAL 3.x(分配 Buffer)

接口类android.hardware.graphics.allocator@3.0::IAllocator

🔹 主要接口

函数作用
IAllocator::allocate()申请 buffer
IAllocator::dumpDebugInfo()获取 allocator 相关调试信息

🔹 代码示例

sp<IAllocator> allocator = IAllocator::getService();
if (allocator != nullptr) {hidl_vec<uint8_t> rawHandle;auto result = allocator->allocate(1, {/*请求参数*/}, [&](auto error, auto buffers) {if (error == Error::NONE) {rawHandle = buffers[0];}});
}

✅ 作用:向 Gralloc 请求 1 个 buffer 并返回 handle。


3️⃣ Mapper HAL 4.x(管理 Buffer)

接口类android.hardware.graphics.mapper@4.0::IMapper

🔹 主要接口

函数作用
IMapper::importBuffer()通过 native handle 获取 buffer
IMapper::freeBuffer()释放 buffer
IMapper::lock()申请 CPU 访问 buffer
IMapper::unlock()释放 CPU 访问权限
IMapper::flushLockedBuffer()刷新 CPU 缓存,确保数据写入内存
IMapper::invalidateLockedBuffer()失效缓存,确保读取最新数据

🔹 代码示例

// 1. 获取 Mapper 服务
sp<IMapper> mapper = IMapper::getService();// 2. Import Buffer
buffer_handle_t importedHandle = nullptr;
mapper->importBuffer(rawHandle, [&](auto error, auto buffer) {if (error == Error::NONE) {importedHandle = buffer;}
});// 3. Lock Buffer 进行 CPU 读写
void* data = nullptr;
mapper->lock(importedHandle, GRALLOC_USAGE_SW_WRITE_OFTEN, {}, [&](auto error, void* addr) {if (error == Error::NONE) {data = addr;}
});// 4. Unlock Buffer 释放访问权限
mapper->unlock(importedHandle, [&](auto error, auto releaseFence) {if (error != Error::NONE) {LOG(ERROR) << "Failed to unlock buffer";}
});

✅ 作用

  1. importBuffer() 获取 buffer

  2. lock() 获取 buffer 读写权限

  3. unlock() 释放权限


4️⃣ 旧版本 vs. 新版本

功能Gralloc 1.0(旧)Gralloc 3.x/4.x(新)
分配 Buffergralloc1_perform(GRALLOC1_PERFORM_ALLOCATE, …)IAllocator::allocate()
释放 Buffergralloc1_perform(GRALLOC1_PERFORM_FREE, …)IMapper::freeBuffer()
CPU 读写gralloc1_perform(GRALLOC1_PERFORM_LOCK, …)IMapper::lock() / IMapper::unlock()
缓存管理gralloc1_perform(GRALLOC1_PERFORM_FLUSH_CACHE, …)IMapper::flushLockedBuffer() / invalidateLockedBuffer()

5️⃣ 总结

  1. Gralloc 3.x/4.x 采用 IAllocator(分配)+ IMapper(管理)架构

  2. gralloc1_perform() 已被 IMapper::lock/unlock 替代

  3. 所有 buffer 访问(如 cache flush)必须使用 IMapper::flushLockedBuffer()

Gralloc 最新版本引入了更现代化的 HIDL 接口,相比旧的 gralloc1_perform 方式,更加模块化、安全、可扩展。🚀

如果追一下代码,会发现QtiMapper::flushLockedBuffer最终会调用到:

118  int DmaManager::CleanBuffer(void * /*base*/, unsigned int /*size*/, unsigned int /*offset*/,
119                              int /*handle*/, int op, int dma_buf_fd) {
120    ATRACE_CALL();
121    ATRACE_INT("operation id", op);
122  
123    struct dma_buf_sync sync;
124    int err = 0;
125  
126    switch (op) {
127      case CACHE_CLEAN:
128        sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_RW;
129        break;
130      case CACHE_INVALIDATE:
131        sync.flags = DMA_BUF_SYNC_START | DMA_BUF_SYNC_RW;
132        break;
133      case CACHE_READ_DONE:
134        sync.flags = DMA_BUF_SYNC_END | DMA_BUF_SYNC_READ;
135        break;
136      default:
137        ALOGE("%s: Invalid operation %d", __FUNCTION__, op);
138        return -1;
139    }
140  
141    if (ioctl(dma_buf_fd, INT(DMA_BUF_IOCTL_SYNC), &sync)) {
142      err = -errno;
143      ALOGE("%s: DMA_BUF_IOCTL_SYNC failed with error - %s", __FUNCTION__, strerror(errno));
144      return err;
145    }
146  
147    return 0;
148  }

这里就看到具体的ioctl操作了。

http://www.dtcms.com/a/552331.html

相关文章:

  • 网站支付链接怎么做郑州招聘网站有哪些
  • 会议网站游戏开发前景
  • 哪个网站可以做头像可信网站查询
  • 图书大厦网站建设报告网站建设公司费用
  • 江西的赣州网站建设创意网页设计模板
  • 网站建设编辑工作总结wordpress未收到验证
  • 专业网站建设好不好wordpress插件2018
  • vue 做网站注册网站账号违法吗
  • 温岭做网站的公司有哪些有了域名自己电脑怎么做网站
  • 自己做网站项目河南建设银行招聘网站
  • 百度网站的网址是什么怎么推广公司的网站
  • 国外网页素材网站网站常用的字段
  • 做网站的策划方案视频网站怎么做外链
  • 优秀的电商设计网站有哪些内容网站后台模板如何使用
  • 做标书要不要做网站陕西建设网官方网站
  • 科技网站模版全网营销推广方案
  • 百度怎样可以搜到自己的网站jsp网站开发难点
  • 南沙网站建设多平台网页制作
  • 网站策划书的要点网站建设找哪家好
  • 老网站绑定新网站如何做?济宁网站建设专家
  • 网站建设与规划企业年金离职的时候怎么办
  • 服装销售网站设计与制作电子商务网站建设的参考文献
  • 开源的网站开发软件广西壮族自治区教育厅官网
  • 手机网站html海珠哪家网站建设好
  • 28网站怎么做代理网站后台清除缓存在哪
  • 微信网站模板大全凡科h5制作
  • 网站备案到外链建设的方式有哪些
  • 怎么用dw网站怎么建设怎么去推广一个网站
  • 网站网页建设与制作怎么做账三元区建设小学网站
  • 电动车网站模板大石桥网站制作