蓝盟IT外包,优化iOS刷新监测:从理论到实践全面解析

发布者:上海IT外包来源:http://www.lanmon.net点击数:1159


什么是帧率
在详细调查ProMotion画面的变化之前,让我们先回顾一下大家熟悉的概念。
什么是帧率?
众所周知,显示器并不真正显示动态画面。 所有动画效果都是由高速播放一帧静止图像欺骗人类视觉而引起的假象。 帧率最基本的定义是画面内容的变化频率,是物理意义上的指标。 这种变化的频率由以下两个值决定:
帧率更新:由画面硬件规格所控制,传统显示装置一般为59.94Hz,其中确定了帧率的上限。
帧速率:帧速率下限由大于CPU-GPU的渲染管线的执行速率控制。
理想地,期望通过使渲染的帧速率与刷新的帧速率完全匹配,或者渲染的帧速率等于刷新的帧速率的整数倍,来防止实际显示的内容出现异常。 但现实中两者往往不一致。 卡顿就是其中之一:
卡顿
如果大于CPU-GPU的渲染管线遇到瓶颈,且一帧的渲染时间长于屏幕刷新间隔,则上一帧的屏幕将需要几帧时间。 如果这个停留时间太长,用户会感知到画面更新的延迟,这叫做纸箱。 这也是iOS开发过程中面临的主要性能问题之一。
实际帧速率
帧速率与刷新率不同,它与显示的内容相关。
显示静止图像时,理想情况下只需进行一次渲染。 尽管屏幕仍然以60Hz或更高的频率刷新,但显示的“帧缓冲区”(FrameBuffer  )不会更改。 用户感知到的实际帧速率仍然接近0。
如果展示固定帧速率的要素,例如24FPS的电影视频,则用户感知的实际帧速率当然也为24FPS左右。
虽然显示了超高帧速率的内容,例如CS:GO在不锁定帧的情况下运行200 FPS以上,但由于显示设备的刷新率限制,用户感知到的帧速率仍然不会超过硬件帧速率的上限。
什么是动态刷新率
促销本质上是自适应同步显示标准的实现。
ref  :https://en.Wikipedia.org/wiki/variable  _ refresh  _ rate
根据苹果官方文档,ProMotion屏幕支持的刷新率是可变的。
具体来说,对于iPhone来说:
the  iphone  13 proandiphone  13 promaxpromotiondisplayscanpresentcontentonthedisplayusingthefollowingrefreshratesandtimings  3360120Hz(8ms  )、80Hz  )、12ms  )、60Hz  )、48Hz  (,40Hz  )、25ms  )、33ms  )、24Hz  )、41ms  )、20Hz  )、50ms  )。
对iPad  Pro来说:
theipadpro’spromotiondisplaycanpresentcontentonthedisplayusingthefollowingrefreshratesandtimings  3360
120Hz(8ms  )、60Hz(16ms  )、40hz  (30hz  )、33ms  )、24hz  (41 ms  ) )。
这实际上是Apple针对VESA定制的一种自适应同步技术标准的实现,在游戏行业已经实施了很多年,同样的实现还有AMD的自由同步和Nivida的g  -同步。 这种新的显示技术具有以下优点:
减少可感知的纸箱
对于具有固定刷新率的屏幕,在一帧的渲染过程中花费时间,并且在VSync信号到来之后渲染完成时,当前内容保持在屏幕上,并且在渲染该帧并将其显示给用户之前,VSync信号将再次显示
自适应同步技术可以避免这种情况,并通过在帧渲染完成后尽快进行演示来缩短图形卡的长度。
降低移动设备的屏幕功耗
在具有固定刷新率屏幕的设备上,当显示低帧速率内容(如静止内容和视频)时,GPU的渲染频率低于实际频率。 但是,刷新率固定的屏幕仍然以最高速率刷新,反复展示以前的内容,引起额外的功耗。
在这种情况下,升级屏幕可以主动降低刷新率,减少屏幕功耗。 这对移动设备特别重要。
动态刷新率的表示
The  iPhone  13 Pro,the  iPhone  13 Pro  Max,andtheipadpropromotiondisplaysarecapableofdynamicallyswitchingbetween  360Faster  refresh  rates  up  to  120Hz
sowerrefreshratesdownto  24h  zor  10hz
已知升级画面的刷新帧率不是恒定的,根据当前显示内容的种类和状态实时动态地切换画面的刷新帧率。 为了更好地理解这种动态帧速率的表示形式,笔者分别
无iphonexr-promotion
有iphone  13预升级的默认锁定频率
中测试了几个典型的渲染场景,发现在具有ProMotion屏幕的设备上运行App时,不同场景的不同统计口径的帧率指标确实出现了有趣的变化。
具体来说,笔者分别处于以下场景。
测试场景
静态页面
无静态UIView、动画/视频等元素
幻灯片中的页面
包含静态Cell的UITableView只观察幻灯片中的表示
核心动画的默认刷新率动画
显示基于CABasicAnimation的简单位移动画
酷睿动画120 Hz高刷新率视频
只在ProMotion设备上测试,根据CABasicAnimation实现的简单位移动画,同时使用cadisableminimumframedurationonphone和preferredFrameRateRange  (以下将具体说明此限制)
Metal渲染30Hz/60Hz视频
使用基于MTKView的渲染播放器播放分别具有30Hz/60Hz源帧频的视频文件
使用以下统计口径的帧频指标进行了测试。
测试指标
CADisplayLink计算帧率
iOS中的主要帧率统计手段。
根据CADisplayLink.h头文件,CADisplayLink是classrepresentingatimerboundtothedisplayvsync。 在回调中比较当前帧/上一帧的时间戳时,将计算上一帧的渲染时间(ts  ),其倒数(1/ts  )为当前实时帧速率。
xcode  GPU报告帧速率
大于xode-showdebugnavigator在FPS上显示的帧速率。 这只能计算当前APP应用程序(如游戏渲染/视频播放)直接在OpenGL  ES或Metal中绘制的帧速率,而不能计算核心动画的帧速率(众所周知)基础核心动画fps
在“instruments  core  animation  fps”工具中显示的帧速率。 它统计了核心动画的帧速率,即Render  Server  backboardd绘制的频率。 此工具当前有错误,无法显示超过60 FPS的帧速率。
文/蓝盟IT外包
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部