因此可以看出 SW vsync/App vsync 并不是直接由HW vsync产生的,而是由SW vsync产生的,HW vsync作为SW vsync的参考,动态的更新SW vsync里的模型参数,这样让SW vsync能与HW vsync更加的精确吧。 那么为什么SurfaceFlinger要用SW vsync而不是直接用HW vsync呢? 猜想可能是因为HW vsync每隔固定时间由显示屏产...
SF需要合成界面的时候,发送请求Vsync信号请求给EventThread(SF),EventThread(SF) 再向DispSyncThread线程发送请求,DispSyncThread线程收到请求后,延迟offset2后将VSync-SF发送给EventThread(SF) 并唤醒, EventThread(SF)在收到Vsync-SF后唤醒SF,SF开始合成新界面。整体框架如下所示: 2 SurfaceFlinger使用VSync流程 ...
每个DispSyncSource对象与一个EventThread相关联,DispSync的VSync事件会通过DispSyncSource传递到EventThread::onVSyncEvent,再通过EventThread::Connection向外分发。 基于DispSync的VSync架构如下所示: DispSync借助硬件VSync(HW_VSYNC)训练了一个模拟的VSync模型(SW-VSYNC)。 模拟的VSync模型为驱动APP绘制的VSync...
先来直接看下Surfaceflinger的onVSyncReceived函数: voidSurfaceFlinger::onVSyncReceived(inttype, nsecs_t timestamp) {boolneedsHwVsync =false; {//Scope for the lockMutex::Autolock _l(mHWVsyncLock);if(type ==0&&mPrimaryHWVsyncEnabled) {needsHwVsync=mPrimaryDispSync.addResyncSample(timestamp);/...
android 4.1一个很大的更新是 Project Butter,黄油计划,为了解决用户交互体验差的问题(Jelly Bean is crazy fast)。 主要包括两部分:Vsync和Triple Buffering。(以下surfaceflinger简写为SF) Vsync,垂直同步,…
比如perfetto中surfaceflinger的VSYNC脉冲经典图如上图所示的,看到一个的小方块,上升下降的方波形,那么通过看这些方块了解真实的vsync信号到来呢? 大部分同学常规方法: 第一种方法: 方波方块确定vsync,这个很多同学不了解原理的或者属于自己看trace同学,看到一个方块的脉冲,然后测量一下方块刚好耗时是16ms左右,任务一个...
主要包括两部分:Vsync和Triple Buffering。(以下surfaceflinger简写为SF) Vsync,垂直同步,HWC利用硬件或者软件产生的持续Vsync信号去触发SF和UI去做绘图相关的工作,让绘图工作充分利用每个Vsync信号间隔的时间; Triple Buffering,虽然有Vsync,细想肯定还是无法避免Jank,三缓冲会将Jank几率降到最小,当然如果出现第一次...
2)通过rejecter来判断申请的buffer是否满足surfaceflinger的要求。 3)释放之前的buffer 具体流程可以参考如下: @step2:SurfaceFlinger:invalidateLayerStack来更新各个区域。 回到顶部 9.2 preComposition 合成前的准备 首先来看2个Vsync Rate相关的代码: virtualvoidsetVsyncRate(uint32_t count)virtualvoidrequestNextVsync(...
surfaceflinger中类的关系 下面照着这张图,梳理下android 4.4 SF中Vsync相关类之间的联系,surfaceflinger简写为SF: 1. Vsync的硬件模型类,DispSync,其对应的thread保存在mThread中,thread是一个DispSyncThread类型; 2. DispSyncThread的mEventListeners是个EventListener类型的Vector; ...
整体来看,Vsync的流程可以分为SurfaceFlinger 层的Vsync信号产生流程,App层的监听流程和触发流程。 Vsync信号的产生流程,主要包括sufacefinger对HAL层注册回调以及处理,并开启一个EventThread来分发Vsync信号 App在展示UI的时候,注册监听获取Vsync的通知 Vsync在surfaceflinger产生后,并不会直接上报,而是在等待UI层的通知...