Android Trace
“系统跟踪”就是记录短时间内的设备活动,并生成跟踪文件,该文件记录了系统报告,可以帮助开发者了结应用的性能。
生成 Trace 的几种方式
1. Adb 命令
适用于 Activity 冷启动,注意 Activity 的 android:exported="true"
, 并且应用是可调试的。
1 | adb shell am start -n com.android.chrome/.Home --start-profiler /data/local/tmp/sample.trace --sampling 1000 |
2. Debug Api 代码插桩
1 | Debug.startMethodTracing("sample.trace"); |
- 参数为空,则是默认路径
/sdcard/Android/data/<pkgName>/files/dmtrace.trace
; - 参数不以 “/” 开头,比如 sample.trace,则路径为
/sdcard/Android/data/<pkgName>/files/sample.trace
; - 参数以 “/“ 开头,比如 “/sdcard/sample.trace”,则为指定的路径。
Generate Trace Logs by Instrumenting Your App
3. Android Device Mointor 中的 DDMS 生成
4. Trace Api 代码插桩
1 | Trace.beginSection(""); |
5. 使用 Python 命令启动 Systrace
1 | python /sdk/platform-tools/systrace/systrace.py -o mynewtrace.html sched freq idle am wm gfx view binder_driver hal dalvik camera input res |
6. 开发者选项-System Tracing
Trace 分析工具
Android Studio
- Top Down:选项卡显示方法调用的列表,子节点显示子方法。
- Bottom Up:选项卡显示一个方法调用列表,子节点显示其父方法。
- Name:方法名,以及他们在上面图表中所对应的颜色。
- Inclusive CPU Time:CPU 在处理这个方法以及所有子方法(如被他调用的所有方法)的总耗时。
- Exclusive CPU Time:CPU 在处理这一个单独方法的总耗时。
- Inclusive/Exlusive Real Time:从方法的开始执行到执行结束的总耗时,和 Systrace 中的“Wall duration”类似
- Calls+Recursion:这个方法被调用的次数,以及被递归调用的次数。
- CPU/Real time per Call:在处理这个方法时的 CPU 耗时的平均值以及实际耗时的平均值。另外的列展示了这个方法所有调用的累计耗时
- **wall time(代码执行时间)与 cpu time(代码消耗 CPU 时间),锁冲突会造成两者时间差距过大。
- Wall Clock Time:程序执行时间。
- Thread Time:CPU 执行的时间。
Profile your app performance
Inspect traces
TraceView
Traceview 是一个性能测试工具,展示了所有方法的运行时间和调用栈。已废弃,推荐使用 AS 的 Profiler。
命令行运行 ~sdk/tools/monitor.bat
打开 Android Device Mointor,再打开 .trace 文件。
- Incl Cpu Time:方法在 CPU 中执行所有时间(包含其调用的方法所消耗的时间)
- Excl Cpu Time: 方法在 CPU 中执行的时间(不包含其调用的方法所消耗的时间)
- Incl Real Time:方法运行消耗的所有时间(包含子方法)
- Excl Real Time:方法运行消耗的时间(不包含子方法)
- Calls + Recur Calls/Total:方法调用、递归次数(重要指标,防止死循环)
- Cpu Time/Call:该方法平均占用 CPU 的时间(重要指标,可以看出单个方法占用 CPU 的平均时间,但是要防止在个别调用处出现长时间占用,然后被平均了)
- Real Time/Call:平均执行时间,包括切换、阻塞的时间(重要指标,可以看出单个方法执行的平均时间值,但是要防止在个别调用处出现长时间调用,然后被平均了)
时间都是以毫秒为单位。
官网分析步骤:
参考
[1] Generate Trace Logs by Instrumenting Your App
[2] Android Device Monitor
[3] Inspect trace logs with Traceview
[4] APP 性能优化与分析 CPU 篇(二)- Systrace
[5] debugging-tracing