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

帧缓存的分配

帧缓存实际上就是一块内存。在 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.lryc.cn/news/511197.html

相关文章:

  • 基于顺序表实现队列循环队列的处理
  • 磁珠选型规范
  • linux 点对点语音通话及直播推流实践一: linux USB声卡或耳机 基本配置
  • 3DMAX镂空星花球建模插件FloralStarBall使用方法
  • window 安装 nodejs
  • Autoware Universe 安装记录
  • 每天40分玩转Django:Django部署概述
  • 使用VS Code开发ThinkPHP项目
  • 基于深度可分离卷积的MNIST手势识别
  • Linux服务器pm2 运行chatgpt-on-wechat,搭建微信群ai机器人
  • Word批量更改题注
  • Springboot配置嵌入式服务器
  • 正交三角函数全面阐述
  • 《Vue3 四》Vue 的组件化
  • linux中,mysql数据库分片(分库分表)
  • springboot503基于Sringboot+Vue个人驾校预约管理系统(论文+源码)_kaic
  • Docker应用-项目部署及DockerCompose
  • 从0入门自主空中机器人-2-1【无人机硬件框架】
  • Kafka高性能设计
  • Redis字符串底层结构对数值型的支持常用数据结构和使用场景
  • uniapp 微信小程序 数据空白展示组件
  • 在vscode的ESP-IDF中使用自定义组件
  • 目标检测,语义分割标注工具--labelimg labelme
  • 发明专利与实用新型专利申请过程及自助与代办方式对比
  • Datawhale AI冬令营(第二期)动手学AI Agent task2--学Prompt工程,优化Agent效果
  • 基于python对网页进行爬虫简单教程
  • 【JavaEE进阶】@RequestMapping注解
  • 【WebAR-图像跟踪】在Unity中基于Imagine WebAR实现AR图像识别
  • 向bash shell脚本传参
  • Oracle中listagg与wm_concat函数的区别