通过打印DISPLAYLIST调试图形性能

在这调试工具,尤其是动画的性能问题时,我们通常采用traceview或systrace进行分析。这两个工具各自有适合的问题类型:

如果是程序逻辑导致图形缓慢,则逐步缓慢的数据库访问,进程间通讯等的,那么traceview + dmtracedump是最有效的。
如果是由于绘画本身导致动画缓慢,那么问题就复杂一些了,原因可能是各式各样的:

  1. 第一种可能就是我们的view-hierachy太复杂,通过hierachy-viewer这个工具,或者打开开发者选项中的“ Show GPU overdraw”可以检查出大部分的重绘。
  2. 第二种可能是在GUI重置每一个框架的之后花了太多的时间去重建显示列表。这点可以通过systrace的结果看到。解决的方法是在动画播放的过程中将不变的部分的layer_type设置成为硬件层,通知gui可以将这个部分缓存成一个纹理,而不必进行重建显示列表,再重新渲染。最佳,应该尽量使用Android提供的视图anim属性来进行动画的播放,GUI的框架对这些“动画属性”进行特殊的优化,可以保证在动画中这些属性的时候不必重新对整个视图重建显示列表和重新渲染。
  3. 如果前两种方式都没能找到/解决问题,看到的systrace现象是在getDisplayList并没有花太多的时间,大部分的时间花在了drawDisplayList,或者eglSwapBuffer上(TBDR类型的GPU?)。那我们就需要将displayList的内容打印出来看下了。

转储DisplayList并非是默认打开的,工程师需要手动将g_HWUI_debug_display_list设置成1,并重编hwui lib,并push到手机中。在运行动画的过程中,打开logcat,并过滤OpenGLRenderer关键字即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值