渲染性能到底怎么表现?
应用设计师们为了让应用呈现很棒的使用体验,对界面进行渲染,但是这些华丽的图片及转场,会使应用出现卡屏、运行不流畅的用户体验(比如切换界面、滑动滚动条等)。
2.了解下渲染性能的原理
系统会在每16ms内对你的活动进行重新绘制,这意味着你必须在16ms内完成屏幕的更新(包括计算、绘图等操作),也就是16ms一帧。但是如果你超过了一帧超过16ms(比如32ms),就会导致丢帧现象,也就是32ms内,你依然停在之前那个画面,这样的丢帧就会导致界面出现卡顿。
3.渲染性能与GPU、CPU的关系
当你的应用需要将按钮,输入框等绘制到屏幕时,需要在CPU上将他们转换成像素和纹理,然后送至GPU(图形处理器)进行光栅化,然后呈现到屏幕上。
以上方法速度较慢,我们可以通过Opengles Api 加快速度,Opengles Api可以将上传的内容留在GPU,然后下次你要绘制时,只要参考GPU中已经存在的网格,告诉Opengles Api怎么绘制就行了。
5.android绘图基本过程
android系统在你需要为应用绘图之前,都会将xml的文件转为为GPU可接受的文件,然后在屏幕上渲染。但是,这要借助内部对象displaylist(显示列表),它包括了GPU需要渲染的所有信息,还包括open GL ES 渲染所需要的所有命令。
首次绘图,会先生成一个显示列表,然后再提交命令至GPU,来执行显示列表。
如果将来还像渲染这个视图,比如只是在屏幕上换了位置,我们只需要再次执行显示列表。
如果将来我们的视图发生改变,之前的显示列表可能不在有效,我们就需要重新生成显示列表,然后再次去执行,然后在屏幕上显示。
当视图、布局发生改变时,会产生额外的步骤,比如按钮大小发生改变,或是布局位置发生变化,那么父容器都将启动相关视图进行位置的重新计算和编排,这就会导致额外的渲染。如果有大量的视图需要更改,这就会导致大量的性能问题,所以,你需要的就是布局失效最小化。
6.了解下VSYNC
VSYNC:即垂直同步,理解之前,我们先弄懂下两个概念。
刷新频率:即显示器每秒的刷新速度(次数)。
帧频:GPU每秒可以绘制的帧数。
GPU获取数据进行绘制,然后在屏幕上显示。
如果帧频大于显示器刷新频率,就会造成画面撕裂等问题。
以上问题的愿意在于,GPU绘制的每一个新的帧会覆盖上一个帧,从顶部开始。现在,当屏幕刷新时,它不知道缓冲是从什么时候开始的,因此他可能从GPU当中获取的帧是未完成的。这就意味着有着上一帧的一半和当前帧的一半,解决这个问题就要采用双缓冲技术,实际上,GPU将帧绘制到内存后(也称为后台缓冲),还会复制一份到内存副区域(帧缓冲区)。当他绘制第二帧到内存的时候,帧缓冲区不收影响。当屏幕刷新时,他会从帧缓冲区刷新,这就要用到VSYNC了。VSYNC避免了屏幕刷新时,从后台缓冲区复制到帧缓冲区。
所以,帧频大于屏幕刷新频率是理想的,但是如果帧频小于屏幕刷新频率,就会出现问题。这样会导致刷新时,屏幕左右两侧的帧显示的一样。
例如,当帧频大于屏幕刷新频率时,应用是流畅的,当帧频突然小于刷新频率时,就会出现卡顿、延迟等现象。
7.导致超出16ms的原因
1.重新绘制视图层级的内容,这会浪费CPU资源。
2.over draw(过度绘制)
3.一次又一次的运行大量画面,导致CPU和GPU组件大量骚动
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。