蓝盟IT外包,读直播的纸箱来优化那些事情

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

蓝盟IT小贴士,来喽!
1 .什么是纸箱
纸箱,顾名思义,用户的体验界面不顺畅。 据了解,手机屏幕会以一定的频率更新。 理论上,24帧的屏幕更新似乎是一致的。 但实际上,这只是针对普通视频。 在强大的交互和敏感的场景(如游戏)中,至少60帧和30帧的游戏可能会感到不舒服。 如果对或30帧进行大量动画化,则会产生明显的挫败感;如果手动画从90帧到120帧,则会感觉非常精细。 这也是最近制造商以高品牌为中心的理由。
对用户来说,从体验角度来看,纸箱大致分为以下几类。
这些体验对用户来说可以说非常糟糕。 引起感觉烦躁,用户不希望停留在我们的APP上。 可以说顺畅的体验对用户来说非常重要。
2 .为什么会发生纸箱
用户体验到的卡顿问题原因很多,往往是复合型问题,所以为了聚焦,这里只考虑真正意义上的丢帧卡顿。
2.1无法缠绕的同步
屏幕刷新率通常为60帧,并且必须在16ms内完成所有操作,以避免变为纸箱。 但是这里有几个基本问题需要澄清:
为什么是16ms?
需要在16ms内完成什么?
系统如何保证任务在16ms内完成?
16ms内没有完成的话,一定会变成纸箱吗?
现在先回答第一个问题。 为什么是16ms? 早期的Android没有同步机制,CPU和GPU的合作也很混乱。 这也导致了有名的tearing问题,即CPU/GPU会因错误而导致画面被撕裂,该错误会更新CPU/GPU直接显示的画面。 后续的Android引入了双缓冲机制,但切换buffer也需要适当的时间,也就是屏幕扫描完成前一帧后的时间。 这就是引入vsync的原因。
由于以前普通屏幕的刷新率为60fps,每个vsync信号的间隔也为16ms,但随着技术的更迭和厂商对潮流的追求,出现了90fps和120fps的手机,相应的间隔也为11ms和8ms。
既然有同步,谁在消费同步? 其实安卓的VSYNC消费者有两种,也就是说支持两种VSYNC信号。 分别是VSYNC-app和VSYNC-sf,对应的也是上层的view描绘和surfaceFlinger的合成。 具体稍后详细说明。这里有几个有趣的地方。 有些制造商有vsync  offset的设计。 在APP和科幻的vsync信号之间存在偏移。 这也在一定程度上提高了APP和科幻的协同效应。
2.2 View流转的一生
在谈论下一个部件之前,引入以下话题。
view如何显示在屏幕上?
我很熟悉view渲染的三个过程,但view渲染不仅如此。
这里列出了常见的硬件加速过程
Vsync调度:很多同学的认知误区之一是认为Vsync每16ms一次,但实际上Vsync需要调度,没有调度就没有回调
消息调度:主要是doframe的消息调度,当消息被阻止时,它直接变成纸箱;
输入处理:触摸事件处理;
动画处理:运行和渲染动画生成器动画;
view处理:主要是view相关的遍历和三个过程
measure、layout、draw  :执行view三个进程;
显示列表更新:视图硬件加速后的draw  op;
OpenGL命令转换:将绘图命令转换为OpenGL命令;
命令缓冲区交换: OpenGL命令交换在GPU内部执行;
GPU处理: GPU对数据的处理过程;
层合成:表面缓冲器合成画面显示缓冲器流程;
光栅化:将矢量图转换为位图;
显示:显示控制;
缓冲器切换:切换画面上显示的帧的缓冲器;
谷歌将此过程分为其他时间/VSync延迟、输入处理、动画、测量/布局、绘制、同步和上传、命令问题、交换缓冲区。 也就是说我们经常使用的GPU严格模式,其实道理是一样的。 到此为止,我们也回答了第二个问题。 需要在16ms内完成什么?
文/上海蓝盟  IT外包专家
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部