本帖最后由 Android_Robot 于 2016-9-7 17:48 编辑
初探百度Android性能测试之流畅度测试(二)
2.4 数数:如何得到流畅度(SM: SMoothness)
接着上面的结论,如果在这样的机制下每次Loop运行之前进行通知,记个数就好了。
很幸运我们在新的Android的那一套机制中找到了一个画图的打杂工Choreographer这个对象。根据Google的官方API文档描述中,它是用来协调animations、input以及drawing时序的,并且每个Loop共用一个Choreographer对象。
下图为Choreographer的定义和结构。 结论
通过如上原理分析可以得出结论:
1) Android 4.1引入了VSync机制后,可以通过其Loop来了解当前App最高绘制能力。
固定每隔16.6ms执行一次(这个值是一个静态变量,会根据系统版本不同而采用不同的值,目前测试版本是16.6ms这样最高的刷新的帧率就控制在60FPS以内);
如果没有以上事件的时候同样也会运行这样一个Loop;
这个Loop在1s之内运行了多少次,即可以表示当前App绘制的最高的能力,也就是Android App卡顿的程度;
另外,在一次Loop时如果执行时间超过了16.6ms,那么用多于16.6ms的时间除以16.6ms,即是当前App的丢帧(SF: Skipped Frame)。
2) 可以在Choreographer的回调FrameCallback中,按秒计数表示当前App的流畅程度,即流畅度SM(SMoothness)。
采用这样方式就可以在App内部观测当前App的流畅度了。并且在丢帧的地方打印traceView,就可以知道丢帧的大概原因,大概位置。定位代码问题。
其他精华资源推荐:
|