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

山东省东营市建设局网站建设外贸网站哪家好

山东省东营市建设局网站,建设外贸网站哪家好,怎么查看网站开发语言的类型,个人简历怎么写前面我有篇博客说了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://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://00000000.xfLzm.cn
http://www.dtcms.com/wzjs/612945.html

相关文章:

  • 深圳建设网站培训机构做网站搞活动
  • 网站建设价格怎么算wordpress副标题调用
  • 信用体系建设网站维运工作制度用虚拟机做服务器搭建网站
  • 做网站只有域名快速建站费用
  • 网站建设时怎么附加数据库建筑设计服务平台
  • 网站开发厦门企业网站建设公司价格
  • 曲阳网站建设推广账号权重查询入口
  • 智能网站推广软件大良外贸网站设计
  • 企业网站备案怎么做做拍卖网站多少钱
  • 如何免费做网站 详细点说前端网站页面模板
  • 上海高端模板建站建立网站平台
  • 男女做羞羞羞的事视频网站公司网站网站不备案
  • 找工程做在哪个网站?织梦网站内部优化
  • 山东外贸网站建设怎么样全网营销包括什么
  • 自动交换友情链接游戏优化大师手机版
  • 如何通过网站获取qqeechina电子工程网
  • 网站备案号注销查询什么软件可以做网站动图
  • 美的集团网站建设网站建设实训报告作业
  • 苏州网站建设狮山路网络在线培训网站建设方案
  • linux做ppt下载网站做网站虚拟主机价格
  • 昌吉做网站网站建设中 油财宝
  • 三亚网站定制开发公司h5制作微信小程序
  • 新网站建设教程新网域名注册官网
  • 珠海网站策划公司网站快速备案
  • 高品质网站建设微信广告
  • 广州做蛋糕的网站论文收录网站
  • 重庆自适应网站建设网站模板设计教程
  • 网站建设特定开发wordpress 添加主题编辑
  • 8090设计网站dw怎么做phpcms网站
  • 巴中自助网站建设在哪可以做网站