Season 5 的最后一期,Android M 中新增了GPU渲染分析工具
光头哥,我们下一季再见!
PS. 光头哥的大名是 Colt McAnlis
Video Link


Why GPU Profile Tool

用户在使用app时,并不关心你的代码内部使用了多么NB的算法、多么碉堡的框架,用户最直观的体验是——你的app有没有卡顿、会不会丢帧。同网站一样,app加载的时间越长,用户流失也就越严重。因此,找到画面卡顿的原因便格外重要。


GPU Profiling Tool Before M

在笔者的Meizu手机上(Android 5.0),可以在开发者选项中开启“GPU呈现模式分析”来查看CPU绘制情况。现在笔者打开微信朋友圈的一个链接(html5页面)

结合说明,可以初步判断那一条暴增的曲线是由于Process过程所致。


Strongerrrrrrr!

Android M 为我们提供了更为强大的GPU渲染分析工具,可以细化到以下8个维度,注意到1、2、4也就是上一节图中的三个维度(Process、Execute、Update),它们保持了与历史相同的颜色!

下面我们着重分析一下另外的五项指标。


Sync & Upload

  • 这项指数衡量了bitmap被同步到GPU的耗时,越大的图像,数值越高,通常处理高像素的图片时会导致飙升。
  • 减少同时展示的图片数量,或者对图片进行预处理,降低图片尺寸可以有效降低数值。

Measure / Layout

  • 过高的指数,表明页面布局过于复杂(super complex view hierarchy)
  • 也可能是由于double taxation所致(关于double layout taxation请参阅Season 3 ep 8
  • 试着简化布局

Animation

  • 若GPU在动画上的负载过高,去检查你所使用到的自定义动画
  • 谨慎使用 PropertyAnimation

Input Handling

  • GPU消耗了多少时间用于处理用户输入
  • 或者说,在相应用户输入的callback中,GPU的消耗
  • 如果处理输入的逻辑过于复杂,使用Worker Thread

Misc / Vsync Delay

  • 如果你从日志中看到诸如“misc vsync … skipping … frames”的信息,That’s this thing!
  • 发生在相邻两帧之间的事情,都可以归类于此
  • 使用Worker Thread来处理耗时操作,避免丢帧

A Bigger Bar

上面提到了5个维度,加上之前的3个,一共是8个维度。要把这8个维度同时用柱状图展示出来可不是件容易的事,这对你的视力有着相当的要求。

方便的是,GPU工具里贴心地适当扩宽加重了那些可能有问题的标示,你会看到一个更醒目的柱状图展示。


Bye Bye! Colt McAlnis

See you in Season 6!


===Ending===