问答 在安卓系统上如何测试帧率?有哪些方法?

池鱼 · 2021年04月20日 · 最后由 测试老憨 回复于 2021年06月05日 · 6182 次阅读

因为没做过安卓系统相关的测试的测试所以很懵。
通过合作公司的介绍使用了 FPS2D 作为测试工具,后面自己尝试了 PerfDog 工具测试。
介绍一下背景
跟这个单项测试已经有一个礼拜了,版本是合作公司给的,我们公司第一次做这种项目没有对这个方面很了解的大牛,所以合作公司说测试依据,我只能跟着依据做测试。
现在疑惑的问题是:
在测试中拿了相同 CPU 的手机做为对比机,对比机慢了 4 帧平均帧率显示 58

我们的产品慢了 4 帧平均帧率显示 60

合作公司的回复是
【你这样想,1 秒钟 60 张图片,平均值是 16.66MS 每张图,如果有一张图片传输用了 20.66ms,另一张图用了 12.66,其实这两张图的平均时间还是 16.66,就不会影响每秒传输的图片数量用户得到的还是 60 张图片
看整体的,因为他传输较快的那些帧,不足以平均掉这些传输较慢的帧的时间,导致平均时间大于 16.66】
脑子里困惑挺多的,
1.他们说的对吗?
2.帧率显示多少才是测试的正确结果?
3.系统的帧率怎么去验证?
4.测试视频播放的平均帧率是否可靠?
...
问题太多了,而且没有方向感

希望得到各位前辈对帧率测试的科普

共收到 20 条回复 时间 点赞

性能狗

看帧率显示不准的 你还要看 jank 值 就是大于 16.666ms 次数 还有个方差参考 这些指标都可以体现在 perfdog 里面 不要只关注单一指标

高速相机可以测帧率

如果一秒钟 60 帧,前 50 秒跑了 10 桢,后 10 秒跑了 50 桢,这基本就是卡顿了

理论上讲应该是平缓 平均的,你好长时间都没有走动,这就是卡顿

CloudHuan 回复

你好,我想问一下 16.66 这个数据怎么看?

甬力君 回复

谢谢

秦岭 回复

谢谢,这个理论我差不多清楚了,就是不明白怎么拿数据去证实这个还有问题。

池鱼 #20 · 2021年04月20日 Author
CloudHuan 回复

我现在明白怎么计算 Jank 的值,但是不知道这个值要怎么去确认是否有问题

池鱼 回复

建议看下 Perfdog 官方对于自身提供的各种性能指标的说明,说的很详细了。

1.他们说的对吗?——从帧率的计算角度,这个有一定道理。不过不知道你这里说的 慢了 4 帧 是什么概念,所以不好说对不对。

2.帧率显示多少才是测试的正确结果?——不知道你这里慢了 4 帧是啥,所以也不好说

3.系统的帧率怎么去验证?——可以用 perfdog ,自带的开发者工具有个 GPU 呈现模式分析,也可以用下。参考这个文章:https://www.jianshu.com/p/ffba2bdd85f5 ,官方文档(需特殊手段哈):https://developer.android.com/topic/performance/rendering/inspect-gpu-rendering?hl=zh-cn

4.测试视频播放的平均帧率是否可靠?——个人理解,一般视频播放的帧率取决于视频,而非应用。只要解码器性能足够,一般是比较平稳的。我们日常测试流畅度、卡顿啥的主要看列表滑动和动画,且更关注的是卡顿(Jank,具体定义参照 perfdog 文档),因为平均帧率代表的是平均数,而大家更为敏感的是卡顿(突然卡一下,帧率突升突降这种),卡顿指标才能体现出来。

陈恒捷 回复

大佬,测出来列表问题,开发说接口慢怎么办啊,接口又说我们没什么问题,请看性能测试数据

秦岭 回复

额,不知道你列表问题具体是什么问题,接口慢是做什么用的接口慢,可以说具体点么?就这么一句很笼统的描述,没法回答你。

陈恒捷 回复

比如说类似于短视频的列表,不断快速下滑顿视频列表,接口其实是翻页时请求下一页,会卡顿明显,此时反馈给客户端开发,前端说这是请求接口,他返回慢我也没办法。
找服务端,服务端又说他接口没问题,不信请看性能压测

感觉你这里边很多原理和概念都没理清楚
要去分两种情况去了解帧率怎么算出来的,一种是手机动画方面的,也就是手机上一些跳转,刷新这些,它只在需要绘制的时候有有效的帧率。另外一种,是类似游戏,音视频,是长期绘制产生的帧率。
前一种平均帧率,使用起来其实没太大用处,主要还是看最大卡顿 jank(因为很多算法会把静态时候的帧率平均到里边)。后一种平均帧率有用,它反应是整体流畅,精细度。
你截图说的像前一种,你合作公司回复的像是后一种,如果他说的前一种,我觉得则是不正确的,因为手机刷新率如果为 60hz,正常每个画面可供显示的时间为 16.7ms,如果一个画面耗时超过了 16.7ms,则这一帧会占用掉下一个或者下 N 个的栅格时间,后续的会直接废弃掉,直到这一个画面显示完成,不存在平均这种说法。
如果是后一种,也是有些欠妥的,视频数据也不是以帧来传输的
总的一句,具体情况具体分析,前提是把概念理清楚

这个说法非常错误

建议看看渲染原理:详细内容见:Android 流畅度评估及卡顿定位、优化

从图中可以看出,按照刷新率 60FPS 的屏幕举例,当某帧渲染超过 16.66ms 时,屏幕是不会立马绘制当前帧的,会等待下一帧绘制完成,才会显示当前帧。这样这一秒,最高就只有 59FPS 了。

其次,在描述流畅度或帧率相关问题时,用帧。用图会让不懂的人更加误解。

秦岭 回复

先确认下你的卡顿定义是?是用性能测试工具发现总是会存在 Jank(也叫丢帧,对应上面图里红色底色框这个情况,主观感受就是一快一慢,不跟手),还是别的情况?

理论上,接口属于异步 IO 操作,应该是不影响 UI 渲染本身流畅度的。可以找一些淘宝之类的列表页在弱网下看看,拉到底翻页时,如果接口响应慢只会导致在底部停在 loading 状态,并不会引起滑动时卡顿的。你可以体验下,看淘宝的商品列表页是否存在你说的 “卡顿”

陈恒捷 回复

好的,我再理下,谢谢大佬

在路上 回复

谢谢 !瞬间就清晰了

池鱼 #18 · 2021年04月23日 Author
剪烛 回复

是的,一开始的时候就是懵的,不理解就开始测试了,只能被对方牵着鼻子走,谢谢大佬的指点😎

啊啊啊啊啊啊啊啊啊

秦岭 回复

是不可以做个加载时长的测试,从刷新到数据渲染完成整个的耗时,一般是分为两个阶段,骨架图 - 色块 - 数据渲染完成,骨架图展示阶段是受接口影响的,看看到底是接口还是客户端的耗时高

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册