Android系统DRM显示框架 - 显示相关fence

目录

1. dma-fence

2. 显示fence特性

3. 第N帧显示过程中各fence的作用序列

1. dma-fence

        以高通平台Android系统为依据,介绍内核dma-fence实现机制及dma-fence在Android显示框架内中的作用。

        Android 的“显式同步(Explicit Sync)”依赖内核中 dma‑fence 实现,其抽象与 Android Sync 文档一致:sync_timeline / sync_pt / sync_fence。sync_timeline 是单调递增的时间轴,厂商需要为每个驱动实例(如 GL 上下文、显示控制器 DPU、2D blitter 等)提供各自的 timeline;sync_pt 是时间轴上的一个点(Active/Signaled/Error);sync_fence 是若干点的集合,只有当全部点触发时 fence 才算触发,且可作为 sync_file(fd) 在内核/用户态与跨进程间传递。

        驱动在提交一个异步作业时,会在其 timeline 上生成一个点(sync_pt)并把它加入一个 fence(或把 fence 与其它点进行 merge);完成时调用 dma_fence_signal() 触发该点(或整条 fence),从而唤醒等待该 fence 的下游用户或子系统。fence 也可以通过 merge 把多个设备的依赖“合并成一个 fd”,只有当全部子依赖 signal 后,合并后的 fence 才变为已触发

        Android显示框架内显示buffer在CPU、GPU、DPU之间的同步就是通过dma-fence机制实现。

2. 显示fence特性

        Android显示框架中有三种fence:acqiure-fence、release-fence、present-fence用来确保显示资源在不同硬件、不同状态之间的同步。

        在 Android 显式同步中,生产者想要重用(覆盖写)一个 buffer,必须先等到消费者返回的 release fence(out-fence)signal;消费者要读取一个buffer时,需要等待生产者返回acquire fence(in‑fence) sinal ;这正是“生产-消费”双向契约的核心:in‑fence 解决“先写后读”,out‑fence 解决“先读后写”。

        在 DRM/KMS框架中:release fence 在 vblank/page‑flip 发生、旧帧退出扫描时 signal;而 present fence 要等到整帧扫描完成才 signal——二者时间点不同,但是高通 sde 的实际代码逻辑中 release fence 和 present fence 都是在 vblank/page-flip 中断中被 signal 的,可以认为是同时产线的。显示 buffer 是否可再次使用与“旧帧是否已不再被读”直接相关,因此看 release fence。present fence逻辑上用于说明当前帧是否已经刷新到显示屏幕,用于应用层控制、判定帧刷新操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值