之前我基本上都是用systrace分析Android性能问题,但是最近发现常常发生trace无法抓完整的问题,我开始使用新的perfetto工具,写一个文章记录一下。
adb shell am start com.android.traceur/com.android.traceur.MainActivity
你会看到如上的界面,介绍各个选项的作用:
Record trace
开启和关闭trace功能
Trace debuggable applications
开启和关闭支持debuggable的应用的自定义trace
Categories
选择Trace Categories
Restore default categories
回复默认的Trace Categories
Per-CPU buffer size
每一个CPU的buffer大小,一般情况下不用改大 ,如果发现Trace有丢失
或者在userdebug手机上抓取trace,最好增大一下,避免trace的丢失。
Clear saved traces
清除手机里已经存储的trace文件
Long traces
一般我们抓的trace,都只会记录开启Record trace之后30s的trace。
对于需要长时间跟踪的,可以开启这个选项
并且配置下方的Maximum long trace size和Maximum long trace duration
我们一般可以用默认的设置,根据自己的需要调整
在30秒内复现性能有问题的场景
Screenshot_2020-11-03-03-00-27-183.jpg
adb pull data/local/traces
用Chrome打开如下网址,并点击左上角的Open trace file就可以分析了。 快捷键的方式基本和Systrace的查看方式差不多。
https://ui.perfetto.dev/#!/viewer
我在Activity的onResume中sleep 3s,当然实际问题会比这个复杂的多。
@Override
protected void onResume() {
super.onResume();
try {
Thread.sleep(3000);
} catch (Exception e) {
}
}
可以很明显的发现在activityResume Sleep了3s,因为你会发现activityResume上面一段是空白的,而不是绿色,说明线程处于休眠的状态,对照代码,就可以很快发现BUG在哪里。
1.界面漂亮,我最喜欢使用漂亮的UI 2.流畅,打开较大的trace文件比systrace优秀太多 3.Binder跨进程点击跳转,跟踪方便,不需要类似systrace的头发丝一样的跟踪Binder跳转 4.支持置顶你感兴趣的线程,放在一起分析更容易 5.看线程被谁唤醒非常方便
有时候还是要跳出舒适的旧事物去接受新事物,可能结果就是真香。