卡顿:
界面呈现是指从应用生成帧并将其显示在屏幕上的动作。如需确保用户能够流畅地与您的应用互动,您的应用呈现每帧的时间不应超过 16ms,以达到每秒 60 帧的呈现速度(为什么是 60fps?)。如果您的应用存在界面呈现缓慢的问题,系统会不得不跳过一些帧,这会导致用户感觉您的应用不流畅。我们将这种情况称为卡顿
Systrace:
Systrace 是 Android4.1 中新增的性能数据采样和分析工具。它可帮助开发者收集 Android 关键子系统(如 SurfaceFlinger/SystemServer/Kernel/Input/Display 等 Framework 部分关键模块、服务,View系统等)的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。
AndroidStudio CPU Profiler
Systrace 的功能包括跟踪系统的 I/O 操作、内核工作队列、CPU 负载以及 Android 各个子系统的运行状况等。
接下来,抓取下游戏的卡帧的情况,编译一个渠道包的debug版本,运行设备是android 12 oppo k7上抓取system trace:
打开调试模式,链接上设备,先在cup profiler中选择system trace recording 开始抓取系统trace
等待一段时间后,点击stop 按钮,停止抓取。
注意点,每个版本的卡顿帧率在studio上展示不同,详情阅读界面卡顿检测
打开Systrace,如下所示:
Display 下方看到 Janky frames 轨道。默认情况下,性能分析器只会将卡顿帧显示为有待调查的候选对象。在每个卡顿帧中,红色部分突出显示了相应帧超出其渲染截止时间的时长。时长超过 16 毫秒的事件会以红色表示。
选中Janky frames 中红色方块,按下M键+双击鼠标,如下所示:
红色框框,空白处是有关线程的执行情况,比如app主线程和renderThread和GPU complection。
总结:CPU Profiler 在这些场景中要如何使用呢?基本的思路是:首先就要抓 System Trace,先用System Trace 分析、定位问题,如果不能定位到问题,再借助 Java Method Trace 或 C/C++ Function Trace 进一步分析定位
perfetto 更强大的记录
类似systemtrace ,用在更复杂的耗时分析。
使用文档: https://perfetto.dev/docs/quickstart/android-tracing#perfetto-cmdline
资料参考:
- 浏览 Systrace 报告:https://developer.android.com/topic/performance/tracing/navigate-report?hl=zh-cn#analysis
- 界面卡顿profiler cpu分析:https://developer.android.com/studio/profile/jank-detection?hl=zh-cn
- 渲染速度缓慢:https://developer.android.com/topic/performance/vitals/render?hl=zh-cn
- Android卡顿掉帧问题分析之实战篇:https://www.jianshu.com/p/f1a777551b70
- Android流畅度评估及卡顿优化:https://ontheway.cool/skills/android/android-fluency-quality-manage.html#_3-%E4%B8%BB%E8%A6%81%E5%8D%A1%E9%A1%BF%E5%8E%9F%E5%9B%A0