千家信息网

app渲染性能相对专项测试理论基础

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,渲染性能到底怎么表现?应用设计师们为了让应用呈现很棒的使用体验,对界面进行渲染,但是这些华丽的图片及转场,会使应用出现卡屏、运行不流畅的用户体验(比如切换界面、滑动滚动条等)。2.了解下渲染性能的原理
千家信息网最后更新 2024年11月23日app渲染性能相对专项测试理论基础
  1. 渲染性能到底怎么表现?

应用设计师们为了让应用呈现很棒的使用体验,对界面进行渲染,但是这些华丽的图片及转场,会使应用出现卡屏、运行不流畅的用户体验(比如切换界面、滑动滚动条等)。

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组件大量骚动





0