VSync是什么
VSync是Vertical Synchronization的简称,通常称作垂直同步。这实际上是一种时间上的中断机制。在Android操作系统中,每秒钟会设定60个Vsync的时间点,每个时间点大约是16.67毫秒。可以将其比喻为一个精确的时钟,为系统的绘图等操作提供了稳定的节奏。CPU与GPU的运作流程,恰似遵循着时钟节拍翩翩起舞的舞者。
这种定时中断机制非常重要,它负责协调设备各部件的绘图过程,确保各项操作能在恰当的时刻进行,从而使系统运行更加井然有序。比如,在玩游戏或观看视频时,它能确保画面更加流畅地呈现。
处理时间与VSync
通常情况下,CPU与GPU的运行速度快,若低于一个VSync周期,画面渲染便能顺畅进行。然而,若CPU与GPU的运行速度减缓,或是主线程中的任务过于繁重,便可能出现问题。例如,在某一测试中观察到,当CPU与GPU的处理时间超过一个VSync周期,第二个VSync到来时,仍在处理A区域的绘制,这会导致后续渲染出现延迟。
由于当前应用每秒最多只能渲染60帧,每帧的平均绘制时间需控制在16.67毫秒以内。若超过这个时限,画面可能会出现不流畅。在日常生活中,若App画面突然出现卡顿,那很可能是因为处理时间超出了规定范围。
FPS与流畅度
一般我们认为帧率越高,应用运行越顺滑。尽管理论上应用每秒最多只能显示60帧,但实际情况并不总是这样。比如,在测试输入法按键反应速度时,从按下键到候选词显示完毕,用时50毫秒,只需3帧就能完成。这样算下来,帧率只有3帧每秒,看似很低,但在实际测试中并未出现卡顿现象。
由于输入法仅需在1秒内显示3帧,每帧耗时50毫秒,因此其最高帧率仅为3帧每秒。另外,在使用输入法时,它往往处于不动状态,界面不更新图像,导致帧率降至1帧每秒。然而,这并不意味着App界面不够流畅。因此,用帧率来评估相对静止的App流畅度并不精确。
VSync的运行机制
VSync机制允许用户通过Loop来掌握App的最大绘图性能。即便没有绘图活动,Loop依然会运作。它在每秒内运行的频率,可以显示出App的绘图极限,同时也能揭示App的卡顿情况。
Android系统中存在一个名为Choreographer的对象,它会在接收到Vsync信号后,通过postCallback方法触发的回调函数来通知用户。这种通知会在每个Loop周期开始前进行。我们只需计算一秒内接收到的通知次数。这就像一个定时闹钟,它会在规定时间提醒我们,帮助我们了解App的绘制动态。
流畅度测试方法
腾讯推出的测试软件GT能够检测App的运行流畅度。用户只需打开软件的主界面,运行待测的App,操作结束后点击“SM”按钮,即可查看包括运行次数、平均数值、最低值等在内的评测数据。这些数据能够直接展示App的流畅度状况。
测试这款新出的视频播放软件,我们采用了GT工具。通过分析测试结果,我们可以了解软件在图像渲染等性能上的表现。如果数据不尽如人意,我们便可以据此对代码进行优化,或对功能进行调整。
过度绘制问题
屏幕上的某个像素在同一帧内被重复绘制,这种现象称为过度绘制。在复杂的UI层级中,即便某些不可见的UI元素也在进行绘制,也容易发生这种情况。比如,当我们看到某个App的界面有多个背景图叠加时,其中一些隐藏的背景图仍在绘制,这会导致资源的不必要消耗。
过度绘制会加重系统负担,这会降低GPU的处理速度,最终使得App运行变得不顺畅。因此,开发者需要改进UI布局,减少对不可见UI的无效渲染,以此来提升App的运行效率和流畅性。
在使用App的过程中,你是否遇到过看似帧数不高却并不卡顿的现象?不妨点个赞、转发这篇文章,并留下你的看法一起讨论。