Gpu profile
打开工具
这个工具在设置-开发者选项-Profile GPU rendering选项,打开后选择on screen as bars。
视图解析
- 绿线:16ms线,任何超过这根线的都是对性格有损耗的。
- 蓝线:代表了view绘制出来可被机器识别的时间,或者说是创建和更新DisplayList的时间。这个过程其实分两步:
- 绘制出GPU可识别的格式
- 被系统送入缓存,作为DisplayList对象缓存
如果这条线过高,应该是view的draw方法过于复杂。
- 红线:是GPU将DisplayList对象会知道屏幕的时间。
- 黄线:处理时间,是CPU告诉GPU,它完成一帧的渲染了,这是个阻塞的过程,CPU需要等待GPU的回复,如果这个时间过长,则说明GPU的任务太重了。
这里如果过高,应该是同时间需要绘制的view太多了,整个屏幕视图过于复杂。
Android M的提升
上面将视图的展现过程分为3个部分,但是还是不够详细,为此,从M开始,这个步骤进行了细化:
- Swap Buffers:对应以前的Process过程;
- Command Issue:对应以前的Execute过程;
- Draw:对应以前的Update过程;
- Sync & Upload:通常表示的是准备当前界面上有待绘制的图片所耗费的时间,为了减少该段区域的执行时间,我们可以减少屏幕上的图片数量或者是缩小图片本身的大小。
- Measure & Layout:这里表示的是布局的 onMeasure 与 onLayout 所花费的时间,一旦时间过长,就需要仔细检查自己的布局是不是存在严重的性能问题。
- Animation:表示的是计算执行动画所需要花费的时间,包含的动画有 ObjectAnimator,ViewPropertyAnimator,Transition 等等。一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查动画执行的过程中是不是触发了读写操作等等。
- Input Handling:表示的是系统处理输入事件所耗费的时间,粗略等于对于的事件处理方法所执行的时间。一旦执行时间过长,意味着在处理用户的输入事件的地方执行了复杂的操作。
- Misc/Vsync Delay:这意味着我们在主线程执行了太多的任务,导致 UI 渲染跟不上 vSync 的信号而出现掉帧的情况。