写点什么

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

评论

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

《对线面试官》Java简历怎么写?

Java3y

Java 程序员 Java web 5月月更

Redis 内存优化在 vivo 的探索与实践

vivo互联网技术

数据库 redis 性能优化 内存优化

多平台快速开发的UI框架

源字节1号

OpenHarmony 3.1 Beta版本关键特性解析——分布式DeviceProfile

OpenHarmony开发者

OpenHarmony OpenHarmony 3.1 Release DeviceProfile

ONES 收购 SegmentFault 思否,共建高质量开发者社区

万事ONES

项目管理 程序员 研发管理 ONES

【C语言】计算器

謓泽

5月月更

OpenHarmony 3.1 Beta版本关键特性解析——ArkUI开发框架容器类API的介绍与使用

OpenHarmony开发者

OpenHarmony ArKUI 3.0 OpenHarmony 3.1 Release

What?构造的查询语句会导致堆栈溢出

华为云开发者联盟

neo4j 图数据库 堆栈溢出 查询语句 查询语言

MongoDB 入门教程系列之一:开发环境搭建以及 Node.js 和 Java 的读写访问

汪子熙

数据库 mongodb 分布式 分布式数据库mongodb 5月月更

WebAssembly技术_加载ffmpeg在Web端调用解码

DS小龙哥

5月月更

DevOps系列之 —— 持续规划与设计(一)敏捷项目管理理念与方法实践

若尘

DevOps 5月月更

Python 操作 Excel,从 xlwings 模块开始

梦想橡皮擦

5月月更

Java培训 判空的新写法

@零度

java8 JAVA开发 判空写法

大数据培训Flink怎样保证数据是一致性的

@零度

大数据 flink

springboot线程池的使用和扩展

程序员欣宸

Java 线程池 5月月更

thinkphp5的消息队列详细教程

CRMEB

Jeff Dean:深度学习的黄金十年

OneFlow

人工智能 深度学习 软件 硬件

内存不超过5M,datop 在识别冷热内存及跨 numa 访存有多硬核?| 龙蜥技术

OpenAnolis小助手

cpu 内存 datop 轻量级 muma

网站开发进阶(十九)计划任务功能——信息自动弹出

No Silver Bullet

5月月更 自动弹窗

springsecurity从当前请求对象中获取用户信息

急需上岸的小谢

5月月更

从研发效能的视角谈“故障复盘”

博文视点Broadview

[Day36]-[二叉树]-在每个树行中找最大值

方勇(gopher)

LeetCode 二叉树 数据结构算法

云原生 on nLive:云上 Nebula Graph

NebulaGraph

数据库 图数据库 原生云

数字化时代,国内SaaS行业的发展态势

小炮

SaaS

《手写 Mybatis》第7步:SQL执行器的定义和实现

小傅哥

小傅哥 mybatis 面试经验 源码学习 手写Mybatis

面试突击44:volatile 有什么用?

王磊

Java Java面试题 java常见面试题

跟我学Python图像处理丨获取图像属性、兴趣ROI区域及通道处理

华为云开发者联盟

Python OpenCV 图像处理 图像 ROI区域

Pipy for Next Web:静态内容服务与缓存加速

Flomesh

CDN加速 Pipy Headless CMS

web前端培训Vite的原理源码解析

@零度

前端开发 vite

网站开发进阶(二十五)JS实现将html表格导出为excel文件

No Silver Bullet

5月月更 表格导出

云图说 | 华为云医疗智能体EIHealth,AI赋能基因组研究

华为云开发者联盟

华为云 云图说 EIHealth 医疗智能体 基因组

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