CPU¶
Tracer是trace cpu工具的统称,可用来分析卡顿、启动、渲染问题,帮忙我们快速找出慢函数。
术语¶
- wall duration:函数执行时间(包含等待时间),函数wall时间 = 运行时间+其他时间(阻塞(io、加锁)、就绪等情况)
- wall self time:函数执行时间(不包含等待时间)
- cpu duration:cpu执行时间 = cpu在用户态运行时间+cpu在内核态运行时间
- cpu self time
Tracer¶
各家公司的Android trace分析工具¶
tracer | 类型 | 图表类型 | 性能损耗 |
---|---|---|---|
微信的TraceCanary | … | … | … |
facebook的profilo | sample和instrument | … | sample和instrument性能损耗小,但是instrument存在兼容性问题 |
uber的Nanoscope | instrument | Call Chart | 在ArtMethod执行入口和执行结束位置增加埋点代码,性能损耗小 |
字节btrace | sample | Call Chart | … |
android的traceview | instrument 和 sample | Call Chart | instrument traceview基于android runtime函数调用的event,性能损耗大;sample traceview提供的sample类型采集trace,性能损耗比instrument小 |
android的systrace | sample | Call Chart | systrace 封装linux的ftrace,性能损耗小 |
android的simpleperf | sample | Frame Chart | 部分功能封装systrace ,利用 CPU 的性能监控单元(PMU)提供的硬件 perf 事件,性能损耗小 |
android的Perfetto(支持Android 10+,欲取代systrace) | sample | Call Chart | … |
ps:instrument类型的trace工具,既可以通过命令行脚本start/stop录制下trace文件,也可以通过代码中的Debug#startMethodTracing/stopMethodTracing录制下两函数范围内的trace文件。sample类型的trace工具,仅通过命令行脚本start/stop录制下埋了Trace#beginSection/endSection的trace文件。
systrace:java代码使用Trace#beginSection/endSection, cpp代码使用ATrace_beginSection/ATrace_endSection
sample traceview: java代码调用Debug#startMethodTracingSampling/stopMethodTracing
instrument traceview: java代码使用Debug#startMethodTracing/stopMethodTracing
Android Studio CPU Profile vs. Perfetto¶
Android Studio CPU Profiler整合了systrace(命令行:py -2 systrace.py --help
) 、traceview、simpleperf , Perfetto支持Android 10+,欲取代systrace,使用 perfetto 格式存储 trace 信息。 采集 system trace 原先用 systrace.py脚本,在 android 10+之后 支持System tracing utility(android手机设置中开发者模式提供的“系统跟踪”功能)和 adb shell perfetto 两种方式
React Native框架提供的trace¶
lang | trace类 |
---|---|
javascript | Systrace.js(systrace工具埋入trace数据) |
cpp | … |
java | SystraceMessage.java/Systrace.java |
OC | … |