AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

百度 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:482052

评论

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

智慧公安重点人员管控系统搭建,助推公安智慧化发展

13828808769

区块链+ #区块链#

重点人员可视化管理平台搭建,公安指挥调度平台

打完新冠疫苗后要注意的两件事

石云升

28天写作 新冠疫苗 4月日更

制作颜色选择器(全)

空城机

JavaScript Vue 大前端 4月日更 颜色选择器

机器学习 | 数据缩放与转换方法(1)

披头

Python OpenCV 之图像乘除与像素的逻辑运算,图像处理取经之旅第 17 天

梦想橡皮擦

Python OpenCV 4月日更

“圈粉”行业龙头 数字人民币搅动投资江湖

CECBC

数字人民币

区块链BaaS平台,创造不一样的服务

电微13828808271

区块链+

大数据计算生态之数据计算(一)

小舰

4月日更

树莓派简介

IT蜗壳-Tango

IT蜗壳教学 4月日更

Redis split-brain 脑裂

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

区块链赋能文化旅游,推动旅游行业转型升级

13828808769

区块链 #区块链#

重构: 自己挖的坑自己填

夏兮。

Java 重构 测试 单元测试

架构训练营模块1作业-江哲

江哲

作业

Linux chmod命令

一个大红包

4月日更

Hive相关的总结

大数据技术指南

hive 4月日更

架构实战营-模块1-作业

泄矢的呼啦圈

架构实战营

配置化开发是否可行?

顿晓

重构 配置化开发 4月日更

智慧党建系统搭建,干部管理平台开发

聪明人的训练(三)

Changing Lin

4月日更

用 Sublime Text 编辑 Markdown

U2647

sublime-text markdown 4月日更

雄安区块链实验室副主任李军:把区块链植入数字雄安

CECBC

区块链

区块链技术推动自然资源领域信息化发展

13828808769

区块链+ #区块链#

从小白程序员到大厂高级技术专家我看过哪些书籍?

冰河

程序员 程序人生 冰河 推荐书单

Kafka的再平衡机制

五分钟学大数据

kafka 4月日更

基于角色访问控制RBAC权限模型的动态资源访问权限管理实现

crudapi

spring security 权限 rbac crudapi 角色

不想写代码偷懒之配置化

顿晓

大前端 配置化开发 4月日更

Kafka又出问题了!

冰河

kafka 消息队列 消息中间件 异步编程

【死磕JVM】给同事讲了一遍GC后,他要去面试,年轻人,就是容易冲动!

牧小农

JVM 垃圾回收 垃圾收集 垃圾回收算法

区块链BaaS平台+BI大数据系统

电微13828808271

区块链+

Java一套拳法刷掉n个遍历树的问题 John 易筋 ARTS 打卡 Week 43

John(易筋)

ARTS活动

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