0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

VSync的虚拟化与同步

麦辣鸡腿堡 来源:OPPO内核工匠 作者:Phil 2023-11-21 16:23 次阅读

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就可以完成校准动作。

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3927

    浏览量

    127169
  • 硬件
    +关注

    关注

    11

    文章

    3265

    浏览量

    66140
  • 监测
    +关注

    关注

    2

    文章

    3547

    浏览量

    44460
收藏 人收藏

    评论

    相关推荐

    什么是虚拟同步发电机?虚拟同步发电机有什么作用?

    究竟什么是虚拟同步发电机?虚拟同步发电机有什么作用?主要应用于哪些领域?
    发表于 06-30 08:02

    【资料分享】究竟什么是虚拟同步发电机??

    储能虚拟同步发电机主要用于大规模新能源的集中并网,提供虚拟惯量,进行需求侧的调频、提升系统抗扰动能力;亦可作为储能变流器使用,消纳电网中多余的可再生并网能源实现平滑输出或平抑尖峰、低谷负荷,优化
    发表于 06-30 07:39

    什么是虚拟同步

    虚拟同步机是基于微网技术提出的一种电力电子技术,传统的电力电子发电设备多采用PQ控制,动态响应快,缺少类似同步电机的阻尼特性,从而引起电网波动等问题。故为了迎合电网特性,使得逆变器具有同步
    发表于 06-30 06:43

    虚拟机及虚拟技术

    虚拟机及虚拟技术给计算机应用注入了新的研究与开发点,同时也存在诸多不利因素。本文综述了虚拟机及虚拟
    发表于 09-07 10:15 13次下载

    浅谈云计算与虚拟的关系及虚拟的类型

    说到虚拟,一般是指将物理的实体,通过软件模式,形成若干虚拟存在的系统,其实真是运作还是在实体上,只是划分了若干区域或者时域划分。而云计算的基础是虚拟
    发表于 11-09 16:18 1757次阅读

    虚拟技术有哪些

    本视频主要详细介绍了虚拟技术有哪些,分别有CPU虚拟、网络虚拟、服务器
    的头像 发表于 01-02 16:25 3.9w次阅读

    华为宣布开源数据虚拟openLooKeng

    日前,记者从华为官网了解到,华为正式宣布开源数据虚拟引擎openLooKeng,其开源社区官网也同步上线。
    的头像 发表于 07-03 11:25 1769次阅读

    I/O软件模拟虚拟和类虚拟

    I/O虚拟是SmartNIC/DPU/IPU中最核心的部分,AWS NITRO就是从I/O硬件虚拟化开始,逐渐开启了DPU这个新处理器类型的创新。而Virtio接口,已经是事实上的云计算虚拟
    的头像 发表于 10-13 11:09 2591次阅读

    简述Vsync信号和View绘制流程之间的关系

    vsync是有两个信号的, 一个是vsync-app用于生成当前帧的数据;(CPU计算和GPU渲染) 一个用于消费数据(合成图像到Display上,vsync-surface) 。
    的头像 发表于 02-02 11:18 825次阅读

    并网逆变器学习笔记之虚拟同步机控制(VSG)

    参考博士论文《基于虚拟同步机的微网逆变器控制策略研究_刘芳》 虚拟同步机控制综述  1 欧洲VSYNC方案 根据频率偏差和频率变化率生成一次
    发表于 03-02 15:32 5次下载
    并网逆变器学习笔记之<b class='flag-5'>虚拟</b><b class='flag-5'>同步</b>机控制(VSG)

    虚拟技术是什么 虚拟技术介绍

      虚拟(Virtualization)是一个广义的术语,简单来说,是指计算机相关模块在虚拟的基础上而不是真实的独立的物理硬件基础上运行,这种把有限的固定的资源根据不同需求进行重新规划以达到最大
    发表于 07-19 11:26 1次下载

    VSync的起源是什么

    问题最初是在PC上被重视和解决的,GPU厂商开发出了一种防止屏幕被撕裂的技术方案,全称Vertical Synchronization(中文名垂直同步,简称VSync)。基本思路就是在屏幕刷新之前向外提供一个信号,主机端根据此信号选择合适的策略完成画面的刷新,避免数据
    的头像 发表于 11-21 16:01 1184次阅读
    <b class='flag-5'>VSync</b>的起源是什么

    Andriod中Vsync的背景

    Android的显示系统一直使用双缓冲和VSync来防止屏幕画面发生撕裂现象,这也是其他系统的常规操作。Android的不同之处是将VSync运用到绘制系统中,作为黄油计划(Project
    的头像 发表于 11-21 16:13 312次阅读
    Andriod中<b class='flag-5'>Vsync</b>的背景

    Andriod中VSync的分发

    App与SurfaceFlinger是不同的进程,它们之间传递VSync的话涉及到进程间通信,而且VSync频率很高,App很多,所以VSync的分发效率要很高才行。Linux进程间通信方式总共
    的头像 发表于 11-21 16:32 833次阅读
    Andriod中<b class='flag-5'>VSync</b>的分发

    VSync offset定义的方法

    VSync-offset/duration 虚拟后的VSync还有一个好处,就是可以对VSync进行一些定制操作,offset就是其中之一
    的头像 发表于 11-21 16:57 1009次阅读
    <b class='flag-5'>VSync</b> offset定义的方法