一文读懂直播卡顿优化那些事儿 如何解决直播卡顿( 五 )


SF & GFXInfo
RFPS
相对帧率
数据获取时间周期内 , (理论满帧-实际掉帧数)/ 数据获取间隔时间
GFXInfo
Stutter
卡顿率
卡顿比 。当发生 jank 的帧的累计时长与区间时长的比值 。
SF
Janky Count
普通卡顿次数
单帧绘制耗时大于 MOVIE_FRAME_TIME 时 , 计一次 janky 。
SF
Big Janky Count
严重卡顿次数
单帧绘制耗时大于 3*MOVIE_FRAME_TIME 时 , 计一次 big janky 。
SF
4. 如何优化卡顿4.1 常用的工具4.1.1 线上工具名称
释义
正式包慢函数
相对于灰度包 , 过滤了比较多监控 , 对性能损耗比较小 , 但是需要手动打开 , 单点反馈中不能保留反馈现场
灰度包慢函数
灰度上全量打开 , 针对版本间的数据对比和新增卡顿问题解决比较有效
ANR
ANR 的及时响应和处理
4.1.2 线下工具工具名
备注
Systrace
暂不赘述
perfetto
加强版 systrace , 可定制 , 可以参考官方文档
Rhea
最常用也是最好用的工具 , 方便发现下下问题和归因 , 和 perfetto 一起使用绝配 , 感兴趣的同学可以移步 github 搜索 btrace
profiler
Androidstudio 自带工具 , 比较方便 , 但是数据准确度不高
sf / gfxinfo
主要用于脚本和工具
4.2 常用的思路

这里主要针对 UI 卡顿和 UI/流相互影响打来的卡顿 。
对于 UI 卡顿来说 , 我们手握卡顿优化的 8 板大斧子 , 所向披靡:
  1. 下线代码;
  2. 减少执行次数;
  3. 异步;
  4. 打散;
  5. 预热;
  6. 复用;
  7. 方案优化;
  8. 硬件加速;
总体思路就是「能不干就不干、能少干就少干、能早点干就早点儿干、能晚点儿干就晚点儿干、能让别人干就让别人干、能干完一次当 10 次就只干一次 , 实在不行 , 再考虑自己大干一场」 。
这里例举出一些常见的优化思路 , 注意这一定也不可能是全部 , 如果有其他好的优化思路 , 我们可以一起交流 。
4.3 一些做过的事儿4.3.1 解决 UI 卡顿引起的流卡顿直播对于 SurfaceView 的切换是一个长期的专项 , 分为多期逐步将 SurfaceView 在直播全量落地 , 场景覆盖秀场直播、聊天室、游戏直播、电商直播、媒体直播等 , 业务上对于渗透率和停留时长有比较显著的收益 , 同时功耗的收益也很可观 。
这里是一个权衡的问题 , SurfaceView 的兼容性问题 pk 带来的收益是否能打平 , 一般来说 , 越是复杂的业务场景 , 收益约大 。
4.3.2 解决 message 调度FWatchDog 是基于对 MessageQueue 的调度策略和同步屏障原理 , 以均帧耗时为阈值判定丢帧后主动在 MessageQueue 中插入同步屏障 , 保证渲染异步 message 和 doframe 的优先执行 , 达到一种渲染插帧的效果 , 同时具备 ANR 自动恢复同步屏障的能力 , 保障打散的有效 。
所以 FWatchDog 和打散是好的搭档 , 能产生 1+1 大于 2 的效果 。
4.3.3 减少执行次数一个典型的应用场景就是滑动场景的 GC 抑制 , 能够显著提高用户上下滑的使用体验 。这个场景相信每个业务都会存在 , 特别是存在大量遍历的逻辑 , 优化效果明显 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: