GPU呈现模式分析),属于GPU Profile工具中的一种。Profile GPU Rendering tool的目的是为了帮助开发者更好的找出应用程序中渲染相关的问题,找到应用程序中的性能瓶颈,进而对代码进行优化,提升用户体验。
在国产手机厂商的各大ROM还未像今日这样完善与功能丰富之前,给自己的手机换上一个第三方的ROM,几乎是大家乐此不疲的做法。而换上的第三方ROM(或者自己的官方ROM)是否流畅。大家几乎都会查看自己手机的GPU呈现模式分析图(不同厂商的叫法可能不同,有的被翻译为GPU显示配置文件)。
究其原因,是因为GPU呈现模式分析是用来体现一个说不清的东西——流畅度。GPU呈现模式分析的作用就是给一台手机到底是流畅还是卡顿,做了比较直观且定性的定义——绿线之下为流畅,绿线之上则是不满60帧即相对卡顿。
目前,安卓以满帧60fps计算。在一秒内绘制60帧,即为理想渲染速度。可以算出每帧的渲染时间在0.016667S(16ms)左右。
开启开发者选项后,我们就可以在开发者选项中开启GPU呈现模式分析。
在开启之后,我们就可以在屏幕的下方看到出现的连续柱状图。每一根都是由红、黄、蓝三色组成一条竖线,每个竖线代表了在一秒内,GPU的渲染情况。除此之外,还有一根绿色的横线。这就是前文中提到的代表60fps的标准线。红黄蓝竖线形成的竖线低于这条绿色的横线,则代表手机运行流畅。但高于这条绿线,却不一定表示着手机卡顿。具体原因会在下文中分析到。
首先来说这三个颜色的线都代表着什么:
红色:代表了执行时间,这部分时间是Android进行2D渲染视图的时间。当红色条很高的时候,则代表当前显示画面的视图可能过于复杂。但是在实际使用中,比如在刷淘宝时,红色条会突然跳的很高。这是因为这类购物APP往往会有很多的缩略图需要加载。但是此时页面的划动依旧是流畅的,缩略图可能会受制于网络的情况等了零点几秒才加载出来,这导致了红色条会偏高。但并不意味着你的手机“卡”住了。这也是前文所说的高于绿线并不一定代表着你的手机卡顿了。只不过是因为手机的网络情况受限,图片加载慢导致了柱状图高于绿线的情况发生,但是此时手机依旧是“跟手”的。并不会有丢帧的情况产生。
橙色:橙色部分代表的手机的处理时间。或者说是CPU告诉GPU渲染一帧的地方,这是一个阻塞调用。CPU会一直等待GPU收到指令的回复。如果陈色的柱很高,则代表着给了GPU太多的工作了。
当我们理解了各条线所代表的意义之后,再看"玄学曲线"就不难理解了。蓝色柱状条的参考意义在一般情况下相对比较大,当蓝色条过高的时候,手机会丢帧。而在打开淘宝等需要加载很多缩略图的APP的时候,红色条会变高,但此时若是蓝色条不高,手机则依旧是"跟手"的,直观上并不会有卡顿产生。
总结一下:
Profile GPU Rendering tool被隐藏开发者选项中并不是没有原因的,这只是是开发者用来查看程序渲染性能的工具。被用来测试手机流畅度并不是很合适,当柱状图高于绿线的时候并不代表着手机一定卡顿!
Marshmallow)之后,GPU的渲染过程相对之前的三步被拆分成了八部。
(1)Swap Buffers:表示处理任务的时间,也可以说是CPU等待GPU完成任务的时间,线条越高,表示GPU做的事情越多;
(2)Command Issue:表示执行任务的时间,这部分主要是Android进行2D渲染显示列表的时间,为了将内容绘制到屏幕上,Android需要使用Open GL ES的API接口来绘制显示列表,红色线条越高表示需要绘制的视图更多;
(3)Sync & Upload:表示的是准备当前界面上有待绘制的图片所耗费的时间,为了减少该段区域的执行时间,我们可以减少屏幕上的图片数量或者是缩小图片的大小;
(4)Draw:表示测量和绘制视图列表所需要的时间,蓝色线条越高表示每一帧需要更新很多视图,或者View的onDraw方法中做了耗时操作;
(5)Measure/Layout:表示布局的onMeasure与onLayout所花费的时间,一旦时间过长,就需要仔细检查自己的布局是不是存在严重的性能问题;
(6)Animation:表示计算执行动画所需要花费的时间,包含的动画有ObjectAnimator,ViewPropertyAnimator,Transition等等。一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查动画执行的过程中是不是触发了读写操作等等;
(7)Input Handling:表示系统处理输入事件所耗费的时间,粗略等于对事件处理方法所执行的时间。一旦执行时间过长,意味着在处理用户的输入事件的地方执行了复杂的操作;
(8)Misc Time/Vsync Delay:表示在主线程执行了太多的任务,导致UI渲染跟不上vSync的信号而出现掉帧的情况;