Android绘制检测工具 -- TraceView
TraceView 是 Android 自带的工具, 可以在 DDMS 中找到. 最终的分析结果会导出为 .trace 格式的文件. 文件获取有以下方式:
获取方式
手动检测:
- 在 DDMS 中选择进程.
- 点击 Start Method Profiling 开始记录.
- 操作完成后点击 Stop Method Profiling 结束记录.
代码检测 (需要权限
WRITE_EXTERNAL_STORAGE
):- 在开始监控的地方调用
Debug.startMethodTracing("name")
. - 在结束监控的地方调用
Debug.stopMethodTracing()
. - 在 sd 卡中生成 name.trace 文件.
- 在开始监控的地方调用
通过 DDMS 打开 trace 文件, 下面会有一个表格展示每个函数的各项数据, 分别介绍一下各个数据的含义.
分析表格
以下面这个函数块为例子:
void main() { --- 10s
A(); --- 1s
B(); --- 5s
XXX; --- 4s
}
Incl Cpu Time %
: 表示每个函数运行所占 Cpu 时间的百分比, 包括该函数内所调用的其他函数的时间.如果记录的正好是 main() 的执行周期, 那么 main() 的百分比就是 100%. 以 100% 为总和来计算, 每个函数执行的时间所占百分比就是其
Incl Cpu Time %
的值.void main() { --- 100% A(); --- 10% B(); --- 50% XXX; --- 40% }
Incl Cpu Time
: 表示每个函数运行所占的 Cpu 时间, 包括该函数内调用的其他函数的时间.Excl Cpu Time %
: 表示每个函数运行所占 Cpu 时间的百分比, 不包括该函数内所调用的其他函数的时间.Excl Cpu Time
: 表示每个函数运行所占的 Cpu 时间, 不包括该函数内调用的其他函数的时间.Incl Real Time %
: 表示每个函数运行所占实际时间的百分比, 包括该函数内调用其他函数的时间.Cpu Time Real Time 进程运行在 Cpu 上的时间 从进程开始到进程结束的整个时间, 包括 I/O 的等待时间 Incl Real Time
: 表示每个函数运行所占的实际时间, 包括该函数内调用其他函数的时间.Excl Real Time %
: 表示每个函数运行所占实际时间的百分比, 不包括该函数内调用其他函数的时间.Excl Real Time
: 表示每个函数运行所占的实际时间, 不包括该函数内调用其他函数的时间.Calls + Recur Calls / Total
: 对于父函数而言, 会显示调用次数 + 递归调用次数
. 对于子函数而言, 会显示该子函数被父函数调用的次数 / 该子函数总共被调用的次数
.以下面的表格为例子.
Name Calls + Recur Calls / Total 说明 main() 10 + 0 main() 是父函数, 被调用了10次, 被递归调用了0次. A() 1 / 3 A() 是子函数, 被 main() 调用了1次, 被其他函数调用了3次. Cpu Time / Call
:Incl Cpu Time
/Calls
, 表示每个函数在 Cpu 上的执行时间.Real Time / Call
:Incl Real Time
/Calls
, 表示每个函数运行的实际时间.
特点
TraceView 的思路是把一段时间内所有的函数都记录下来, 因为记录的东西太多, 所以记录的结果比不开启 TraceView 要慢一些.