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

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

3天内不再提示

VSync offset定义的方法

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

VSync-offset/duration

虚拟化后的VSync还有一个好处,就是可以对VSync进行一些定制操作,offset就是其中之一。

接下来就是offset的定义,offset 分为两大类,即phase-app和phase-sf:

phase-app:VSync-app与hw_vsync的相位差;

phase-sf:VSync-sf与hw_vsync的相位差;

还是以trace为例,可以看到,每一个vsync-app都比对应的TE信号晚了1.2ms,因此这份trace中的app-offset为+1200000(ns为单位)

图片

同样的,每一个vsync-sf都比对应的TE早了3.6ms,因此sf-offset即为-3600000.

图片

综上,offset表示着vsync-app及vsync-sf与hw_vsync的相位差,这个值通过dump sf就可以获取。

图片

Offset 的一个比较难以确定的点就在于 Offset 的时间该如何设置,其优缺点是动态的,与机型的性能和使用场景有很大的关系。

如果 Offset 配置过短,那么可能 App 收到 Vsync-App 后还没有渲染完成,SurfaceFlinger 就收到 Vsync-SF开始合成,那么此时如果 App 的 BufferQueue 中没有之前累积的 Buffer,那么 SurfaceFlinger 这次合成就不会有 App的东西在里面,需要等到下一个 Vsync-SF 才能合成这次 App 的内容,时间相当于变成了 Vsync 周期+Offset,而不是我们期待的Offset。

如果 Offset 配置过长,就没有办法起到其原有的作用了。

图片

另外,稍微错开app和sf的VSync是有好处的,因为错开后整个系统同一时间抢占CPU的task会减少,理论上会有点优化。一般安卓对不同帧率有不同的offset默认配置。

Android S及之后的版本,Google引入了duration的概念,部分程度上代替了offset。

duration的定义相对明确

app duration:app绘制一块buffer到sf消费这块buffer的时长(vsync-app与对应vsync-sf的间隔);

sf duration:sf消费一块buffer到这块buffer上屏的时长(vsync-sf到TE的间隔);

也就是说,app duration和sf duration之和,即为某一帧从开始绘制到刷新在屏幕上的总时长。

图片

这种表示相对直观,因此在S版本及之后,google默认采用配置duration的方式来决定vsync相位差,但这并不代表offset被弃用,这两个值是相互影响的,修改其中一个值,另外一个值也会出现变化。具体的换算关系为

app phase=n * vsync period - (app duration + sf duration)

sf phase = m * vsync period - sf duration

从duration的概念可以看出,duration越短,给到app绘制和sf合成的时间就越有限,那么绘制线程和sf线程所需的CPU,GPU频率就越高,功耗就越高。

duration的长短会影响一个buffer从绘制到上屏的生命周期,进而影响到跟手性,duration越短,跟手性越强。其次,duration的配置会影响bufferqueue里预先加载的buffer块数量,进而影响sf占用的内存大小,duration越长,buffer块数量越多,sf占用内存越大。另外,厂商对CPU和GPU的调频策略也会受到duration的影响,贸然改短duration可能会导致特定场景的频率异常升高。

讲了这么多,总结起来Andriod中VSync模块的架构就是下图这样:

HW_VSync是由屏幕产生的脉冲信号,用来控制屏幕的刷新。

VSync-app与VSync-sf统称为软件VSync,它们是由SurfaceFlinger通过模拟硬件VSync而产生的VSync信号量,再分发给app和sf用来控制它们的合成节奏。

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

    关注

    12

    文章

    3935

    浏览量

    127321
  • 软件
    +关注

    关注

    69

    文章

    4907

    浏览量

    87366
  • 线程
    +关注

    关注

    0

    文章

    504

    浏览量

    19674
收藏 人收藏

    评论

    相关推荐

    AD698里面的Gain Error、Output Offset和PSRR Gain等参数是如何定义的?

    各位工程师好,我在对AD698进行测试。请问AD698里面的Gain Error、Output Offset和PSRR Gain等参数是如何定义的?为什么Gain Error、Output Offset单位是% of FS,PS
    发表于 07-04 07:59

    PGA308为什么加两个offset,Coarse offset及Fine offset?用一个offset不能调零吗?

    PGA308为什么加两个offset,Coarse offset及Fine offset?用一个offset不能调零吗?
    发表于 08-22 07:22

    FPGA时序约束OFFSET

    时钟period约束,对接口上升沿定义全局OFFSET IN约束,对接口下降沿定义全局OFFSET IN约束。对于时钟period约束,首先要定义
    发表于 09-05 21:13

    OFFSET约束问题

    嗨,大家好,据我所知,OFFSET约束强加于所有输入PAD。在我的设计中,使用了两个时钟输入。因此,PAD上的输入信号应分组为:1.需要OFFSET约束时间值#1,参考时钟输入#12.需要
    发表于 05-29 13:51

    请问设置OFFSET的约束定义是什么?

    大家好,我在GMII接口中为以太网千兆位的Rx部分设置约束时遇到问题。首先,我需要找到信号的实际细节:我附上了IEEE规范的细节。设置时间为2.0ns,保持时间为0.5ns。其次,我需要找到如何定义
    发表于 07-30 11:05

    VSYNC、HSYNC、DOTCLOCK是如何计算的?

    与 LCDIFv2。 这是唯一的变化吗-VIDEO_MUX->VID_MUX_CTRL.SET = VIDEO_MUX_VID_MUX_CTRL_PARA_LCD_SEL_MASK;VSYNC、HSYNC、DOTCLOCK 是如何计算的?
    发表于 03-14 09:42

    CDMA Access pn offset与距离的公式测定

    CDMA Access_pn_offset与距离的公式测定:本文测定了Motorola CDMA系统中Access_pn_offset与距离的关系,解决了长期以来困扰无线工程师的CDMA距离判定问题。一、绪论    在移动
    发表于 07-27 21:53 40次下载

    Timing Groups and OFFSET Const

    Timing Groups and OFFSET Constraints: •Use the Constraints Editor to create groups of path
    发表于 01-11 08:55 4次下载

    DC Offset Auto-Calibration of

    ABSTRACTThe TRF371x family provides an automatic calibration circuit to minimize the DC offset
    发表于 07-08 16:23 17次下载

    OFFSET约束的写法(OFFSET IN和OFFSET OUT)

    1. OFFSET约束的写法 Offset 约束定义了外部时钟pad和与之相关的输入、输出pad之间的相对关系。这是一个基础的时序约束。Offset
    发表于 02-08 13:22 2200次阅读
    <b class='flag-5'>OFFSET</b>约束的写法(<b class='flag-5'>OFFSET</b> IN和<b class='flag-5'>OFFSET</b> OUT)

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

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

    VSync的起源是什么

    VSync的起源 显示屏上一帧画面的显示过程,是像素自上而下逐行扫描的过程,如果在上一帧的扫描还没有结束的情况下,屏幕又开始扫描下一帧的像素,那么就会出现如下图中撕裂(tearing)的情况。 这个
    的头像 发表于 11-21 16:01 1247次阅读
    <b class='flag-5'>VSync</b>的起源是什么

    Andriod中Vsync的背景

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

    VSync的虚拟化与同步

    VSync的虚拟化 由上面的介绍可以知道,VSync其实起源于显示屏,但是想想如果每个App和SurfaceFlinger都去从硬件驱动中直接监听VSync,那未免有点太复杂了,而且耦合性太高,不行
    的头像 发表于 11-21 16:23 685次阅读
    <b class='flag-5'>VSync</b>的虚拟化与同步

    Andriod中VSync的分发

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