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

帧缓存的分配

帧缓存实际上就是一块内存。在 Android 系统中分配与回收帧缓存,使用的是一个叫 ION 的内核模块,App 使用 ioctl 系统调用后,会在内核内存中分配一块符合要求的内存,用户态会拿到一个 fd(有的地方也称之为 handle),然后接着调用 mmap ,就能把内核内存映射到用户态内存中,接着返回对应的用户态内存地址给 App。

我们知道一个普通的 fd,比如某个文件对应的 fd,如果把它从 A 进程传递到 B 进程,在 B 进程中,这个 fd 的值是没有意义的,索引不到对应的文件的。

ION 应该是在驱动中动了手脚,ION 分配的内存对应的 fd 可以从 A 进程传递到 B 进程,且在 B 进程中能够索引到内存,也就是也可以将 fd 传入 mmap 中获取到内存地址。

为什么需要这个 fd 可跨进程传递 的特性呢?因为在 Android 中,显示一帧画面需要涉及到多个进程,比如 App 进程、 Gralloc Hal 进程、HwComposer Hal 进程、SurfaceFlinger 进程,如果在不同的进程之间直接传递 buffer,开销过大,我们直接在不同进程之间传递 buffer 的索引 fd 即可,fd 是一个整型变量,大大减小了内存的开支。

在 Android 中,ION 被封装在了 Gralloc HAL 中,这是一个 AIDL HAL,Native App 可以直接访问这个 HAL。 Gralloc Hal 进一步去访问 ION 模块分配回收内存,ION 分配的是内核内存.


http://www.kler.cn/a/450351.html

相关文章:

  • 渗透Vulnhub-DC-9靶机
  • Unity3D用正则判断身份证号或邮箱
  • 从AI换脸到篡改图像,合合信息如何提升视觉内容安全?
  • Cherno C++学习笔记 P46 箭头运算符
  • SQL 实战:窗口函数的妙用 – 分析排名与分组聚合
  • 拦截器魔法:Spring MVC中的防重放守护者
  • shardingsphere分库分表项目实践3-分库分表算法原理
  • 并发编程(19)——引用计数型无锁栈
  • 【UI自动化】从WebDriver看Selenium与Appium的底层关联
  • 【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考
  • SQL面试题——奖金瓜分问题
  • ChatGPT与Postman协作完成接口测试(一)
  • 处理字体图标、js、html及其他资源
  • 精读 84页华为BLM战略规划方法论
  • 概率论得学习和整理32: 用EXCEL描述正态分布,用δ求累计概率,以及已知概率求X的区间
  • css一道光闪过动效
  • 鸿蒙开发-ArkTS的ContainerSpan组件
  • 二进制部署k8s
  • Vite +Vue3打包生产环境去除项目中的console.log
  • Linux C/C++编程-线程退出时的清理机会
  • 易语言 OCR 文字识别
  • LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)
  • 数据结构-串-顺序结构实现
  • 如何使用vscode解决git冲突
  • 【微信小程序】微信小程序中的异步函数是如何实现同步功能的
  • C# 异步编程与多线程简析