写点什么

百度 APP 流畅度全流程质量监控实践 流畅度现状分析(二)

  • 2020-01-07
  • 本文字数:1126 字

    阅读完需:约 4 分钟

百度APP流畅度全流程质量监控实践 流畅度现状分析(二)

业界流畅度监控方案调研(Android)


——

丨 1. 基础流畅度概念介绍

1.1 理想帧率:

60FPS,受限于显示器的刷新频率 60HZ

1.2 理想帧长:

1/60≈16.6ms

1.3 Vsync 机制:

VSync 可以简单的认为是一种定时中断,系统在每次需要绘制的时候都会发送 VSync Pulse 信号,cpu/gpu 收到信号后马上处理绘制。

丨 2. 业界方案调研

丨 3. 监控实现原理

3.1 统计帧长基于 VSYNC:统计帧长、SM、SF:

Choreographer 类就是接受系统垂直同步信号(VSync 信号),在每次接受 VSync 信号时顺序执行 View 的 Input、Animation、Draw 等 3 个操作,然后等待下一个信号,再次顺序执行 3 个操作。如果第二个信号到来时,Draw 操作没有按时完成,界面将不会更新,显示的还是第一帧的内容。这就表示丢帧了,丢帧是造成画面卡顿的原因。所以我们可以向 Choreographer 类中加入自己的 Callback,通过此 Callback 的 doFrame 函数我们可以统计一秒内帧绘制的次数(即流畅值 SM )、绘制耗时(两次 doFrame 之间耗时,即帧长)、丢帧 SF。

3.2 基于 Looper:

利用 UI 线程的 Looper 打印的日志匹配获取帧长。和 VSYNC 方案类似,只是当 UI 线程阻塞严重时,可能出现数据丢失。(对 UI 线程的影响也是一个待平衡点)

3.3 堆栈监控:

单开线程定期抓取堆栈,基于 Vsync 或者 Looper 机制监控到帧长超过指定阈值时,上传最近的堆栈。但由于单开线程实时抓堆栈,会导致应用本身性能退化,不适宜线上长期大面积使用。

3.4 监控注意事项(实测经验):

实际测试中发现,APP 静置时,尤其是网页静置时,SM 值亦可能出现变低如接近 30 的情况,SF 值、帧长均可能存在超过理想值的情况。原因是用户虽未对界面进行操作,亦可能在后台发生下载、屏幕显示区域之外的动画等行为,整体界面展现上表现不出卡顿,但可能会对用户肉眼感知不到的加载等造成影响。



——不同阶段、不同场景下,相同流畅度指标的绝对值,对用户实际体验的反应准确度有所不同,因此建议区分场景和阶段进行监控。

参考资料

——


萧竹:Android App 性能评测分析-流畅度篇


htkeepmoving:移动 APP 性能评测-流畅度评测


腾讯:【腾讯 TMQ】GT3.1 简化您的 App 性能测试(2)——原理讲解,溯本求源


微信读书:卡顿监控系统


腾讯 perfdog:PerfDog 性能狗帮助文档


whbsspu:为什么帧率达到 60fps 页面就流畅?


egos:Android 中 VSync 机制的介绍


markzhai’s home:BlockCanary — 轻松找出 Android App 界面卡顿元凶(AndroidPerformanceMonitor)


本文转载自百度 App 技术公众号。


原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMzk2ODI1NQ==&mid=2247483933&idx=1&sn=9bddb62fc031a540e3b893cc955652db&chksm=f94c530dce3bda1b69314e7f1cc0552b2a437c37c3fa341ea7084a286a9a0b15bb54dd893759&scene=27#wechat_redirect


2020-01-07 09:482477

评论

发布
暂无评论
发现更多内容

如何学习

石小天

学习 学习方法 如何学习 技术学习

文心一言 VS 讯飞星火 VS chatgpt (82)-- 算法导论8.1 1题

福大大架构师每日一题

福大大架构师每日一题

探索 React 初体验:从零开始构建你的第一个应用

麦田的守望者

Kafka为什么这么快?

越长大越悲伤

Java kafka

【INFINI Workshop 深圳站】8 月 31 日一起动手实验玩转 Easysearch

极限实验室

深圳 INFINI Labs Workshop 极限科技

工赋开发者社区 | 工业智能化背景下制造业大数据的应用

工赋开发者社区

5分钟搞懂K8S Pod Terminating/Unknown故障排查

俞凡

Kubernetes 最佳实践 云原生

Presto 设计与实现(九):SQL 词法分析

冰心的小屋

数据湖 词法分析器 presto 设计与实现

ARTS 打卡第 2 周

Johnson

AI arts

2023 ARTS 02

MiracleWong

ARTS 打卡计划

ARTS打卡第二周

穿过生命散发芬芳

ARTS 打卡计划

代码随想录Day61 - 完篇总结

jjn0703

ARTS 打卡 第二周

一期一会

pandas ARTS 打卡计划 职业发展 LLMs

ARTS 打卡 第一周,ARTS我来啦!

闫同学

ARTS 打卡计划

Zebec在Nautilus Chain 开启质押,ZBC 将极致通缩

鳄鱼视界

不只致富,更要守富

少油少糖八分饱

财富自由 搞钱 致富 守富

探索以太坊:智能合约、代币发行与去中心化应用

麦田的守望者

C++友元函数和友元类

芯动大师

工赋开发者社区 | 以智能制造为主攻方向,扎实推进新型工业化

工赋开发者社区

R语言之缺失值处理

timerring

R语言

Presto 设计与实现(十):SQL 语法分析

冰心的小屋

数据湖 语法分析器 presto 设计与实现

寻找注册配置中心最佳评测官,赢取丰厚奖品 | 测评开启,开发者请速速集结

阿里巴巴云原生

阿里云 微服务 云原生

关于RocketMQ的高可用

M

原创 RocketMQ 高可用

百度APP流畅度全流程质量监控实践 流畅度现状分析(二)_语言 & 开发_百度App技术_InfoQ精选文章