From【修改 smali 代码打印信息】:https://www.bilibili.com/video/BV1UE411A7rW?p=38
【Android】开发优化之 --- 调优工具:TrackView、Method Profiling:https://blog.csdn.net/fcly2013/article/details/38080333
TrackView、Method Profiling
Android SDK 自带的 tool TrackView 位于 sdk 的 tools 目录下。用法为:进入到 tools下,运行
traceview e:\loginActivityTracing.trace
即可。那 trace 文件怎么生成的呢。
有两种方式生成
1、使用代码生成,想调哪调哪。
只需要在需要调用的地方调用
Debug.startMethodTracing("loginActivityTracing");
和结束调用的地方调用
Debug.stopMethodTracing();
就会在 sd 卡的根目录生成 loginActivityTracing.trace 文件。
2、没有代码呢,可以使用 DDMS 来生成。
这是开始,然后同一个按钮再点一次就生成 .trace 文件并打开了。
执行之后可以看到这样一个图片:
TraceView 界面信息介绍
TraceView 界面包括 时间面板 和 方法面板
- (1) 时间面板 ( Timeline Panel ):时间面板展示了每个线程的执行情况,其中的[1]main即为ui主线程。移动到某个位置可以查看该点对应的方法的执行信息,点击方法面板则会选中相应的方法。可以左键按住不放选中区域放大局部精细查看,不同方法用不同颜色标注
- (2) 方法面板 ( Profile Panel ):方法面板展示了所有方法的执行情况,点击某个方法可以查看在对应线程上的执行时间区域,并会显示其父方法及子方法。每个方法包括如下信息列,可点击某列进行排序,从而确定产生性能问题的函数:Incl Cpu Time, Excl Cpu Time, Incl Real Time, Excl Real Time, Incl Cpu Time%, Excl Cpu Time%, Incl Real Time%, Excl Real Time%, Calls+RecurCalls/Total, Cpu Time/Call, Real Time/Call 。
所有的 Time 都是以毫秒计算。每列具体含义及作用如下:
- a. Incl表示将所有子函数耗时也计算在内,Excl则表示不包括子函数的调用时间。对比可以确定耗时操作发生是自身还是子函数中。
- b. Cpu Time表示占用cpu执行的时间,Real Time包括Cpu Time以及等待、切换的时间等,所以一般都大于Cpu Time。对比可以判断耗时操作是否在cpu执行段内。
- c. 上面四个指标对应的%表示函数在总时间的占比。方便查看某个函数的时间占比。
- d. Calls+RecurCalls/Total表示被外部调用次数+递归次数/总次数。可以查看调用次数是否符合自己预期。
- e. Cpu Time/Call, Real Time/Call表示总的Cpu Time及Real Time与总调用次数的比例。查看每次调用的耗时,一般可通过简单此项确定每个函数的性能。
常用字段的属性说明如下:
列名 描述
Name 该线程运行过程中所调用的函数名
Incle Cpu Time 某函数占用的CPU时间,包含内部调用其他函数的CPU时间
Excl Cpu Time 某函数占用的CPU时间,但不含内部调用其他函数所占用的CPU时间
Incl Real Time 某函数运行的真实时间,含调用其他函数所占用的真实时间
Excl Real Time 某函数运行的真实时间,不含调用其他函数所占用的真实时间
Call +Recur Calls/Total 某函数被调用次数以及递归调用占总调用次数的百分比
Cpu Time/Call 某函数调用CPU时间与调用次数的比,相当于该函数平均执行时间
Real Time/Call 某函数调用CPU的真实时间;