Display 展示第 B 帧数据,CPU/GPU 收到 VSync Pulse 信号马上处理即将展示A 帧的数据 , 由于计算太多 , 导致没有在一个 VSync 间隔内处理完 。
需要展示的A 帧数据没有处理好,Display 继续展示第 B 帧数据(此时屏幕显示是异常的) 。由于系统中只存在一块内存给 CPU/GPU 处理绘制 , 所以在这个 VSync 间隔内 CPU 不处理任何事 。…上图中一个很明显的问题是,只要出现一次Jank 就会影响下一次的VSync(cpu 不能工作) 。
Triple Buffering 异常情况Triple Buffering 的引入 。
文章插图
VSync机制出现triple buffering
Display 展示第A 帧数据,CPU/GPU 收到VSync Pulse 信号马上处理B 帧的数据,但是由于计算太多,导致没有在一个VSync 间隔内处理完 。由于第B 帧数据没有准备好,Display 继续展示第A 帧数据(此时屏幕显示是异常的) 。此时虽然B 被gpu 在使用 , 但是cpu 可以处理Buffer C(因为有3个缓冲) 。
Display 展示第B 帧数据,gpu 继续处理上一步骤的C,cpu 则处理A 。后续过程出错的情况被降低了…
获取数据并计算结果1.运行命令"adb -s "deviceName" shell dumpsys gfxinfo "packageName 获取基础数据 , 我们会获得很多数据 , 这里截取需要进行分析的部分:
文章插图
注:如果运行完命令发现无上图中的4个参数 , 则很可能是手机的“GPU呈现模式分析”未打开;
在手机的开发者选项中,找到“GPU呈现模式分析”,选择“在adb shell dumpsys gfxinfo中”,如果是华为或荣耀的手机,则选择“在屏幕上显示为线型图”:
文章插图
文章插图
2.如上图信息表示了每一帧在安卓系统中的四个阶段:
Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间
Prepare: 准备时间
Process:表示渲染引擎执行显示列表所花的时间 , view越多,时间就越长
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间,其实是实际显示帧数据的后台缓存区与前台缓冲区交换后并将前台缓冲区的内容显示到屏幕上的时间
将上面的四个时间加起来就是绘制一帧所需要的时间,如果超过了16.67就表示掉帧了
说明Android 定义了流畅度的数据标准,以 60FPS 为标准(FPS 为每秒绘制的帧数),帧数过小就会出现卡顿感 。
每一帧在安卓系统中分4个阶段,4个阶段的总和超过16.67(1秒60帧,算下来平均1帧的间隔就约是16.67ms)就认为丢帧 。
这个定义在 Android6.0 以前是一定的,但是现在已经没有固定的标准了,因为目前安卓系统有3层缓存机制,加上硬件上的进步,即使超过16.67,也不一定会出现卡顿感 。所以这个数据在测试时作为一种对比和相对衡量标准 , 也可根据需求自定义标准 。
计算结果通过以上数据 , 就可以获取到每一帧的时间、总帧数;从而就可以计算出 jank 数、vsync 数,进而就可以得到最终的 FPS 和丢帧率数据 。
当然,手工计算无疑效率低,出错率大,所以这里的计算过程最好还是以脚本形式,让代码帮我们去计算,具体代码计算原理与专项自动化过程后续探讨 。
获取更多相关资料:请添加vx,ceshiren001
https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=toutiao×tamp=1653268551&author=MM
- 日照apple直营店「7月23日Apple授权专营店Chuangel日照首家门店盛大开业」
- 苹果日本首家AppleStore零售店拆除在即iPhone12低至百元成弃机
- 好用的公务员考试app 备考公务员的软件
- 面试该不该问休假制度 上班不是做慈善
- 欧洲进入冰川时代仅用六个月速度为预计二十倍
- 时间和空间的维度 时间和空间的关系
- 公交车实时查询app哪个好 实时公交查询软件哪个好用
- 上海apple售后服务中心,上海苹果官方售后维修中心点
- 卸妆软件makeapp,彩妆验真app
- 苹果AppleStore在线商店遭遇iPhone14/Pro预购问题