systrace主要用来分析析能问题:应用响应速度慢、动画播放不流畅、卡顿或耗电量过高表示应用存在性能问题。
共有三种方法,一是android studio、二是命令行、三是prefetto。
抓取trace
命令行
atrace -h 可以看到命令的用法
atrace --list_categories 会列出要trace的项目
自动抓6秒
adb shell atrace view am wm freq idle sync sched aidl gfx -a com.test.anddemo -t 6 > anddemo.trace
持续抓取log
adb shell atrace --async_start view am wm freq idle sync sched aidl gfx dalvik binder_lock binder_driver -a com.test.anddemo
停止抓取Trace文件,并取取出trace
adb shell atrace --async_stop -o /sdcard/b.trace
adb pull /sdcard/b.trace
直接用python脚本(SDK 33版本以前有)抓取并用转成html
python /xxx/Android/sdk/platform-tools/systrace/systrace.py -t 10 -o trace.html
/systrace.py 在34版本的 SDK已经被删除了,不推荐了,但如果搞老系统还是得用
android studio profiler
用android studio的profile,参考 记录轨迹 | Android Studio | Android Developers
prefetto命令行和网页
(android 10,SDK29 以后才支持)
prefetto命令行也可以抓取,直接用 https://ui.perfetto.dev/ 实际也是用了这个命令
1、关掉所有自动连接adb的软件 如android studio
2、刷新https://ui.perfetto.dev/record 就是首页上点了 record new trace后的页面
3、点add ADB device
4、修改抓取配置,如点CPU tab页面下的所有开关。
5、点Start Recording
这个工具比较复杂,不过Android后续主支持这个工具和android studio了 ,参考
【快速入门】Perfetto - Android性能追踪、系统分析工具上手文档 - 知乎
设备系统上操作抓取
设备上手操作开关来抓取。参考 捕获设备上的系统跟踪记录 | App quality | Android Developers
系统设置->开发人员选项->系统跟踪->录制 (最下面有个启用通知栏开关) 测试程序复现性能bug 停止录制,然后再
adb pull /data/local/traces/ .
检测自己怀疑的代码块
代码中加入抓指定trace点,注意抓时命令行要带-a 这个app的包名
Trace.beginSection("test_secton")
...//要分析的代码块
Trace.endSection();
抓取的trace中会单独有这个slice,用来分析代码块的性能。
打开trace文件
1、Android studio profiler
用android studio的profile,参考 记录轨迹 | Android Studio | Android Developers
把b.trace文件导出到电脑,然后使用sdk(33版本以前有)下的systrace.py程序将分析结果生成html文件,命令如下:
python systrace.py --from-file ~/b.trace -o ~/b.html
然后用chrome浏览器里,chrome://tracing/,load .trace转成的.html即可
prefetto
https://ui.perfetto.dev/ open trace file,打开.trace文件。
分析systrace
主要看每个16.7ms内的main线程的任务是不是没有完成。是什么原因导致没有完成。
看是否有丢帧、帧延迟,找出影响的代码块,对其进行优化。
参考 Android Systrace 基础知识 -- Systrace 简介 · Android Performance