安卓的fps测试,是我打开测试开发大门的一把钥匙。两年前的现在,安卓性能测试的相关资料甚少,以fps为例在网上也只有寥寥几篇文章讲述,但到了今年,已经有许多资料在各大技术论坛上供大家看到了。对于自己,一直想找一个机会把这一段技术探索写出来。所以,心动不如行动。
fps(frames per second),通常表示我们屏幕每秒展现的图片(帧)数,反映了一款应用在当前硬件下的性能消耗。比如我们抽CS的时候,就经常关注fps是否高,在高的情况下,就会有较好的流畅度。因此fps是应用性能测试中一个重要指标。
对于一个安卓app而言,为了测定fps数值,我们需要从安卓图形显示相关的模块入手。一个通用的方式是切入安卓的SurfaceFlinger服务,它是图形显示流程中软件层和硬件层的交互点,是极其关键的一环。SurfaceFlinger则是负责分析&合成各个app中的图层,而后将合成的图像数据交由硬件渲染。硬件渲染的机制复杂,因此安卓系统中,将硬件操作进行了抽象方便调用,我们将这一与SurfaceFlinger对接的层次,称之为硬件抽象层(HAL)。SurfaceFlinger与HAL在功能上有部分的耦合,一些Surface合成的工作,也会委托HAL进行。
那么我们该如何通过SurfaceFlinger获得fps数据呢?大体上,我们可以参考《Android性能测试之fps获取》一文。这种方式成功率高(虽然我家手机行不通),且不用root,较为方便
首先,通过adb,我们可以导出SurfaceFlinger服务的运行时信息。