高可用流畅度方案
如果无法正常显示,请先停止浏览器的去广告插件。
1. Flutter 线上流畅度监控方案
叶然(阿詹)
阿里巴巴 - 智能信息事业群 - U4 内核研发团队
2. 目录
01 背景介绍
02 方案总览
03 指标建设
04 定位问题
05 总结与展望
3.
4. 背景介绍
5. 背景与现状
监控指标不准
•
线上指标和线下测试差异大,精度
不够,导致无法准确感知性能劣化,
只能关注指标的波动。
监控场景复杂
•
线上用户使用场景复杂,导致监控
到大量异常极值数据,难以分析。
版本迭代的质量难以把控
日常监控难以发现问题
缺乏有效定位手段
•
当指标出现波动时,无法定位或者
定位能力不够高效,只能定位少数
问题
人力成本巨增
对线上情况毫无掌控
6. 突破思路
精准指标
需求
帧率
发现问题
?不够
Hummer
引擎
卡顿
高效闭环方案
定位方案
定位问题 卡顿Trace
验证效果 卡顿聚合
7. 方案总览
8. 卡顿trace定位案例
流畅度分析模型
帧率监控
刷新率
1. 帧率分析
5.线下优化
场景
2.发现波动
卡顿监控
卡顿耗时
卡顿trace 卡顿数量
卡顿trace 卡顿率
4.trace定位
3.卡顿分析
聚合排名 卡顿场景
卡顿函数 卡顿间隔
9. 线上监控方案架构
平
台
侧
Itrace
大盘实时监控
多位度问题分析
数据可视化
自动诊断优先级
自动预警
用户路径
高可用插件
数据上报通道
客
户
端
Hummer 引擎
卡顿判定
帧率 API请求 白屏
首屏 资源加载 页面访问
异常 自定义监控
卡顿trace收集
首屏判定
首屏问题信息收集
业务代码
图片加载跟踪
黑屏检测
10. 流畅度指标建设
11. Flutter渲染流水线
Vsync
Ui
Dart
Layer Tree
Layer Tree
Layer Tree
Raster
Compositor|Skia
Layer Tree
Layer GL
Tree
Vulkan
系统
GPU
Vsync
12. 业界方案1
Vsync
Ui
Vsync
Dart
Raster
Compositor|Skia
系统
GPU
帧耗时数据
?延迟一秒返回
13. 业界方案2
Vsync
Ui
Raster
系统
Vsync
Dart
Frame_count
Compositor|Skia
Draw_count
帧率 = 60*(draw_count / Frame_count)
GPU
14. Vsync
实验室方案和hummer方案
Vsync
Dart
Ui
Raster
Compositor|Skia
系统
GPU
PRODUCER
BUFFER
QUEUE
CONSUMER
⚡Present fence
15. 帧率方案对比
业界方案1
01
官方Api(addTimingsCallback):❌准确性、延迟
02
03
04
业界方案2
60*满帧率: ❌准确性
业界线下方案
Dump SurfaceFlinger:✅准确度高❌不适用线上
Hummer方案
帧绘制开始时统计次数:✅较准确、适用线上、简单
16. 帧率建设
按照刷新率分类 场景分类 脏数据过滤
按主流刷新率对帧率分类 增加场景信息(滑动、动画) 过滤拖拽、慢滑、手指触屏所
造成的脏数据
- 01 -
- 02 -
- 03 -
按照动画为单位
计算fps
只统计连续刷帧的场景
-04 -
17. 卡顿trace定位案例
帧率的缺陷
波动不明显
•
当业务的水准较高时,帧率就会波
动不明显
关注卡顿变化
•
帧率
关注卡顿问题的增幅来发现问题
卡顿
18. 卡顿trace定位案例
流畅度分析模型
帧率监控
刷新率
1. 帧率分析
5.线下优化
场景
2.发现波动
卡顿监控
卡顿耗时
卡顿trace
卡顿trace
细致分析模型
4.trace定位
卡顿数量
3.卡顿分析
卡顿率
聚合排名 卡顿场景
卡顿函数 卡顿间隔
19. 卡顿方案对比
业界方案1
01
官方Api(addTimingsCallback):❌延迟
02
03
04
业界方案2
掉帧数: ❌过于严格,脱离体感
电影帧卡顿:当前帧耗时>前三帧耗时平均值的两倍
业界线下方案
当前帧耗时>两个电影帧(1000ms/24*2 =83ms)
电影帧卡顿:✅关注体感❌仅适用游戏场景
Hummer方案
更小的电影帧卡顿:✅关注体感,适用app场景
20. 帧耗时计算
Vsync
Ui
Raster
Vsync
Vsync
Raster_end
系统
帧耗时 = Ceil((Raster_end – Vsync) / Vsync_interval)* Vsync_interval
21. 卡顿方案优势
准确度高 卡顿和停顿的区别 贴近体感 丰富的卡顿信息
最接近实验室精度的监控方式 解决很多方法无法判定停顿的 考虑视觉暂留,更贴近用户体 提供卡顿时间、卡顿率、卡顿
感 间隔、线程耗时等数据
问题
- 01 -
- 02 -
- 03 -
-04 -
22. 定位卡顿问题
23. 卡顿定位方案对比
卡顿堆栈
卡顿trace
卡顿trace
卡顿堆栈
✅捕获准确 ❌难捕获 -> 频繁的捕获
✅好分析
✅极底比例采样,
性价比高 ❌难分析
❌需要大量抓取才能分析,
?不细致->✅细致 ✅细致
性价比低
24. 卡顿trace流程
App
•
利用官方已有的trace机
制,缓存业务和引擎层的
• 一帧的trace信息
性能优化(线程锁,文件
• 落盘)
判定卡顿,提取缓存的一
帧trace
• 监控平台
借助Perfetto 卡顿
• trace可视化
卡顿聚合
高可用
•
•
数据整理和计算
上报卡顿日志
25. 卡顿trace优势
数据可视化
自动诊断聚合
动态采样
用户无感
高效定位
26. 卡顿trace定位案例
卡顿trace实战
优化前 优化后
卡顿占比 35.39% 0.04%
帧率(滑动) 55.7 56.8
定位率
聚合后top2卡顿问题
卡顿问题定位
优化效果验证
27. Itrace界面
实时分析
指标大盘
28. 总结与展望
29. 方案特色
引擎的助力
引擎层的辅助信息
精准且贴近体感的指
标设计
深挖底层原理,从用户使用角
高效定位问题 方案闭环
卡顿trace和卡顿聚合 发现问题,定位问题,验证优
化
度思考
- 01 -
- 02 -
- 03 -
-04 -
30. 致力于打造业界领先的线上监控方案
首屏监控 白屏 内存分析
提高判定准确率 提高判定准确率 客户端
场景复现 引擎
占位图场景
轮播图场景
特殊图忽略
图片加载全链路分析 黑屏
服务端 判定
客户端 定位信息收集
引擎
31. 扫码回复「D2」
获取第十七届 D2 演讲 PDF 材料
U4内核技术 公众号
后续也将推送 D2 会后技术文章,敬请关注!!
32. 感谢大家观看