安卓开发详解—GPU呈现模式分析

2017-12-30 12:02:06来源:https://www.jianshu.com/p/84e7ce86c119作者:Cyunrei人点击

分享

前言

各位在看测试者对手机进行评测时或许会见过“安卓玄学曲线”,所谓中的安卓玄学曲线真名为“Profile GPU Rendering”。大多数情况下,在系统“开发者选项中被称为“GPU显示配置文件”或“GPU呈现模式分析”。






这曲线显示了GPU的某些运行模式,据说可以通过玄学曲线来判断手机的流畅性,或者直白点说能够通过它判断“卡不卡”。可实际这些曲线,真有判断卡不卡的作用吗?若确实如此我们又应该如何分析这些曲线?


正文

进入方式:设置-->开发者选项-->显示CPU使用情况


在Android6.0之前,GPU的玄学曲线主要为黄色、红色、蓝色(Swap Buffers,Command Issue,Draw)三类。






在玄学曲线中柱状图每一根代表一帧,其高度表示“渲染这一帧耗时”,这些“柱”的高短、颜色、长度都会随着手机屏幕界面的变化而改变。

安卓系统以每秒60帧为满帧,以每帧16毫秒时为满帧,即1秒÷60帧得计算结果。按照这个规定,速度快于16ms为流畅,因此GPU呈现模式分析下会有一条绿线来判断是否流畅,这条绿线就是16毫秒(ms)时的线,即低于绿线为流畅。


GPU在绘制视图的时候需要听从CPU的指示,这些指令会会在某处形成一个列表供GPU抽取并进行视图的渲染绘制。


Command Issue(红色):表示执行任务的时间,是Android进行2D渲染显示列表的时间,为了将内容绘制到屏幕上,Android需要使用Open GL ES的API接口来绘制显示列表,红色线条越高表示需要绘制的视图更多;比如我们在遇到多张图加载的时候,红色会突然跳的很高,此事滑动页面也就流畅,要等几秒图片才能加载出来,并不是卡住。


Swap Buffers(黄色):表示处理任务的时间,即CPU等待GPU完成任务的时间,线条越高,表示GPU做的事情越多。若橙色部分过高,说明GPU目前过于忙碌。


Draw(蓝色):表示测量和绘制视图列表所需要的时间,蓝色线条越高表示每一帧需要更新很多视图,或者View的onDraw方法中做了耗时操作。它越长说明当前视图比较复杂或者无效需要重绘,表现为卡顿。
理想的流畅状态是三色都低于绿线以下。


自从安卓6.0之后,玄学曲线进行了改版,增加至8条数据。新版本GPU呈现分析曲线新增加了(Sync&Upload,Measure&LayoutAnimation,Input Handling,Misc/Vsync Delay)五大步骤数据。






Sync & Upload(浅蓝色):表示的是准备当前界面上有待绘制的图片所耗费的时间,为了减少该段区域的执行时间,我们可以减少屏幕上的图片数量或者是缩小图片的大小。

下面这几种统称为绿色,随着后面标注的数字颜色逐渐加深。


Measure/Layout(绿色1)表示布局的onMeasure与onLayout所花费的时间,一旦时间过长,就需要仔细检查自己的布局是不是存在严重的性能问题;。


Animation(绿色2):表示计算执行动画所需要花费的时间,包含的动画有ObjectAnimator,ViewPropertyAnimator,Transition等等。一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查动画执行的过程中是不是触发了读写操作等等。


Input Handling(绿色3):表示系统处理输入事件所耗费的时间,粗略等于对事件处理方法所执行的时间。一旦执行时间过长,意味着在处理用户的输入事件的地方执行了复杂的操作。


Misc Time/Vsync Delay(绿色4):表示在主线程执行了太多的任务,导致UI渲染跟不上vSync的信号而出现掉帧的情况。


后记

实际上,玄学曲线时让开发者了解Android界面中渲染问题,从而进行调整和优化,为用户提供更好体验所设计。若强行将玄学曲线与手机流畅度挂钩是不合理的。




微信扫一扫

第七城市微信公众平台