VSync的虚拟化与同步

vsync的虚拟化
由上面的介绍可以知道,vsync其实起源于显示屏,但是想想如果每个app和surfaceflinger都去从硬件驱动中直接监听vsync,那未免有点太复杂了,而且耦合性太高,不行。那怎么办呢?
因此,最好是有一个模块去专门跟驱动沟通,再由它将vsync信号广播给大家,就像一个hub一样。但是vsync频率这么高,每次从kernel到userspace的消耗也不少,而且vsync是周期性的,很容易猜,所以没必要一直从kernel监听,但是系统是一直需要vsync来控制绘制合成的,所以有必要搞一个虚拟的vsync来模拟硬件vsync了。大概架构如下图:
其中surfaceflinger中的displayvsync(android s后改名为vsynccontroller)就是虚拟的vsync源,其需要两个参数来保证与硬件vsync的同步性,第一是参考点,第二就是周期。这些都可以开启硬件vsync同步解决。
vsync的同步
vsync虚拟化的实质就是在软件层面模拟硬件vsync,既然是软件模拟,那么就会存在误差,如果误差比较大,那么就需要开启硬件vsync同步来进行校准。那么就存在两个问题,怎么发现自己误差比较大?以及怎么来同步?
首先是如何发现误差比较大?答案是通过fence机制。surfaceflinger在每一帧交给hwc的时候,同时都会从hwc那里得到此帧的presentfence,它是在此帧开始刷新至屏幕的时候signal的。那驱动什么时候开始刷新一帧至屏幕呢,答案是屏幕vsync来的时候。所以这下就能串起来了。根据presentfence的signal时间就可以知道真实的vsync时间,那么之后的事情就简单了。
在hwcomposer::presentandgetreleasefences中获取presentfence,
获取到fence之后就会对齐进行监测
一旦不准就开硬件vsync来进行校准,通常情况下接收六次硬件vsync就可以完成校准动作。

2020最新世界机器人报告
精度和测量范围是红外温度传感器的重要性能指标
红外热成像市场陷入冰火两重天 红外热成像市场未来预测
DigiPCBA常见问题之DigiPCBA Viewer
下载速度不尽人意,华为云CDN来助力,尽享高速体验!
VSync的虚拟化与同步
存储大厂限量供货!NAND拟涨价15%
相位传感器的工作原理
变频器调速在水泥行业的应用
智能公交车防超载语音提示系统
比亚迪销量为什么火爆 股票三个月上涨50%
5G确实会对自动驾驶汽车的发展和应用至关重要
大棚智能农业气象站的功能特点
如何快速处理综合布线中复杂的故障
相复励发电机原理图
MAX5879高性能数模转换器(DAC)
半导体封装种类大全
NVIDIA致力于全面支持基于Arm的HPC和AI应用
数百个安卓应用程序中出现数据漏洞 对鸿蒙操作系统或许是个机会
MC33493/D OOK/FSK 928~902 MHz/434~315 MHz双频发射器