Streamline是一款由ARM公司制作的终极性能测试利器,可以快速定位手游性能问题,甚至可以直接追溯代码。但Streamline需要自行搭建,确实让不少同行止步,无法体会产品的优势。所以,云测为大家整理了如何快速搭建Streamline,方便各位使用体验。
ARM Streamline™ 性能分析器是 ARM DS-5™ 工具链的一部分,它使软件开发人员能够充分利用基于 ARM 处理器的系统上的可用资源,以创建高性能和高能效的产品。它配有直观的图形用户界面,可显示从 CPU 和 GPU 性能计数器到源代码热点再到实际功耗等信息,这样,开发人员就可方便地缓解性能瓶颈,改进代码并行度,延长电池寿命并增强用户体验。
一、如何部署?
Streamline使用了内核级的硬件性能计数器来精确记录系统资源。必须启用某些Linux内核配置选项后,才能在Android系统上运行Streamline。所以需要下载当前测试手机相对应的Linux内核源码,进行重新编译,然后制作boot.img,并刷到对应的手机中,过程还是非常复杂的,有兴趣的朋友可以百度,这些不再详述。
三、使用StringLine分析性能瓶颈?
Ø CPU瓶颈
如果CPU占用较高:也就是“CPU Activity”一直处于较高状态,可以检查“Function”界面,查看哪些函数占用CPU较高,然后先优化这些函数。
尤其需要检查是否大量使用了浮点运算函数
从图中可以看出,在上图游戏中,_addsf3和_mulsf3两个函数占用了大量的CPU时间,而这两个函数主要就是与浮点运算相关的。所以CPU的主要瓶颈在于浮点数的运算。
Ø GPU瓶颈
当CPU占用不高时,依旧感觉比较卡时,比如function里面,idle进程占用率最高,说明cpu不是瓶颈,这时可以考虑瓶颈是否在GPU,通过事件“GPU Fragment”可以看出当前GPU的状态。
1. 检查是否存在过度绘制(overdraw),在Streamline中加入下面两个事件
l Mali GPU Fragment Processor 0: Active Clock Cycles
l Mali GPU Fragment Processor 0: Fragment passed z/stencil
overdraw = "Fragments Passed Z/stencil count" / "Device Resolution"
如图,overdraw =8573446/800*480
=22.3
重绘次数一般在3左右是比较合理的,而上面达到了22.3,说明游戏存在过度绘制,需要优化。
PS:过度绘制可以通过Android4.0以上的手机直接查看,设置->开发者选项->显示GPU过度绘制。
2. 检查纹理是否被压缩,在Streamline中加入下面两个事件
l Compressed texture cache hit count
l Compressed texture cache miss count
如果两个参数一直为0,说明纹理没有被压缩
3. 检查程序的纹理缓存命中率,在Streamline中加入下面两个事件
l Mali GPU Fragment Processor X: Texture cache hit count
l Mali GPU Fragment Processor X: Texture cache miss count.
一般情况下纹理丢失率是命中率的10%,如果高于10%,说明纹理过大,导致纹理命中率降低。
如果看完介绍,仍然觉得搭建和使用过程比较复杂。可以尝试使用我们WeTest推出的自动化性能测试,上白天云端真机库,独家引擎识别技术。
通过对分场景的CPU、FPS的实时跟踪统计,可以基本满足快速定位问题,而同行们只需在WeTest(http://wetest.qq.com/cloud/)的前台上传APK包即可。