观测方法执行的时间,点击cpu界面的clock图标(Start Method Tracking), 一段时间后再点击一次, trace文件被自动打开,
非独占时间: 某函数占用的CPU时间,包含内部调用其它函数的CPU时间。
独占时间: 某函数占用CPU时间,但不含内部调用其它函数所占用的CPU时间。
分析TraceView数据
打开后的profiling数据显示为上下两部分,Timeline区域和Profile区域:
上面的timeline区域是你测试的应用中每个线程的执行情况,每个线程占一行;并且一条timeline上的每一块都表示一个执行的method;每个method用不同的颜色表示。
下面的profile区域是按照每个方法所占的incl CPU time %进行排序将它们显示出来。其中每个函数显示的数值包括以下几种:
- Incl Cpu Time(%): Include意味着不仅仅是本身执行所占的时间(比),还包括其调用的函数(嵌套)的执行占用时间(比)
- Excl Cpu Time(%): 的
- Incl Real Time: 同1类似
- Excl Real Time:同2类似
- Calls + Recur Calls / Total:它表示这个方法执行的次数,这个指标中有两个值,一个Call表示这个方法调用的次数,Recur Call表示递归调用次数
- Cpu Time / Call:每次调用执行该函数所用的cpu time。
- Real Time / Call: 同6类似
所以我们在实际的分析过程中,可以从某一项入手,比如先看第一项Incl Cpu Time(默认是按照这一项将所有的方法排序的,当然我们也可以点击其他项,从而使用其他项排序),然后从上到下,也就是观察占用CPU最多的几个函数,看看哪一个是我们可以控制并且有可能可以优化的。在观察某一个函数的时候,可以将其点开,查看它的所有child,重点观察占用比例最高的一两个,然后点击进去一步步的跟踪。其中或许还要观察其他参数,比如calls + Recur Calls / Total看看是否有多余的调用等。总之只要细心还是很容易找到可以优化的点的。
我们如何判断可能有问题的方法?
通过方法的调用次数和独占时间来查看,通常判断方法是:
- 如果方法调用次数不多,但每次调用却需要花费很长的时间的函数,可能会有问题。
- 如果自身占用时间不长,但调用却非常频繁的函数也可能会有问题。
原文链接:http://www.jianshu.com/p/216b03c22bb8