干货 | 谁懂这篇文,玩游戏还会卡顿?

简介: ![](https://ceshiren.com/uploads/default/original/3X/5/4/547024bf804094aeeaa8f2ff2bed19df06f60c2a.jpeg)玩游戏的时候最怕的就是卡顿。排位赛的紧急关头,明明马上就能上一段位,却因为卡顿导致给对方送人头。还把对手送上了王者。引起队友骂声一片。作为测试工程师的你,可以忍?卡顿测试也是专项测试里的
更多技术文章分享和免费资料领取
https://qrcode.testing-studio.com/f?from=Aliyun&url=https://ceshiren.com/t/topic/16586

玩游戏的时候最怕的就是卡顿。排位赛的紧急关头,明明马上就能上一段位,却因为卡顿导致给对方送人头。还把对手送上了王者。引起队友骂声一片。作为测试工程师的你,可以忍?

卡顿测试也是专项测试里的一种,更多精彩测试内容,可下方关注公众号

Android系统每隔16ms会发出VSYNC信号重绘我们的界面(Activity)。App需要在16ms内完成下一次要刷新的界面的相关运算,以便界面刷新更新,如果无法在16ms内完成运算,就会发生卡顿,影响用户体验。
下面的这些内容可能会造成卡顿:

  • 内存问题:内存抖动、full gc
  • cpu:计算耗时
  • gpu:布局复杂、overdraw

就是执行GC操作时,需要暂停线程的任何操作,GC操作完成,其他操作才能继续,频繁的GC会导致界面卡顿,频繁GC有两个原因:

  • 内存抖动(Memory Churn),创建大量的对象,在短时间内马上释放。
  • 产生大量对象会占用Young Generation的内存区域, 如果剩余空间不足,就会触发GC。同时,大量对象的叠加也会增加Heap的压力,从而触发更多的GC操作。

UI渲染由CPU和GPU分工完成,CPU负责布局元素的运算(比如Measure, Layout)。GPU负责栅格化处理(将UI元素绘制到屏幕上)。
UI布局层次太深, 或者自定义控件的onDraw函数中存在复杂运算, 就需要CPU负荷工作,从而影响整个绘制过程。
过度绘制会导致gpu负荷,每屏的每一帧,像素点应该只被绘制一次,如果重复绘制像素点,就是过度绘制。

Android可以查看过度绘制:“设置”→“开发者选项”→“调试GPU过度绘制(toggle GPU overdraw)”,打开后再访问App会出现下图:

此时界面可能会有五种颜色标识:

  • 原色:没有overdraw
  • 蓝色:1次overdraw
  • 绿色:2次overdraw
  • 粉色:3次overdraw
  • 红色:4次及4次以上的overdraw

卡顿的关键因素是无法在16ms内绘制一帧,sdk自带的systrace工具可以分析每一帧的绘制情况,并且给出补救措施和建议。

需要安装sdk,在sdk目录下存在systrace.py:

python{sdk目录}/platform-tools/systrace

注意:运行此工具需要python2.7。
如果运行中出现如下错误,安装对应的依赖即可:

No module win32con
pip2 install pypiwin32
No module six
pip2 install six

首先连接一个Android设备:192.168.181.102:5555
在命令行输入:

python systrace.py -e 192.168.181.102:5555

在设备上进行操作在命令行:按下enter,完成录制。此时会生成一份html报告,整个过程如下:

点击生成的html报告:

参数解析:

1.帧点:绿色表示16.6ms内,黄、红色超过16.6ms
2.任务状态灰:休眠;蓝色:可运行;绿色:运行;橙色:不响应信号
3.函数调用

在报告的页面有快捷键操作:

  • w:放大
  • s:缩小
  • m:找到下一帧,显示时间

如果一个帧的绘制时间超过0.7s,用户会明显感觉到卡顿,称之为冰冻帧,比如上面红色的帧点。如果帧的绘制时间刚好超过0.6ms,称之为掉帧,比如上面黄色的帧点,但部分掉帧影响不大,主要危险来自于冰冻帧。

也可以用adb自带的工具对帧进行分析,但数据不如systrace精准:

adb -s devicesname shell dumpsys gfxinfo |less

内容全面升级,5 个月 20+ 项目实战强化训练,资深测试架构师、开源项目作者亲授 BAT 大厂前沿最佳实践,带你一站式掌握测试开发必备核心技能(对标阿里P6+,年薪50W+)!直推 BAT 名企测试经理,普遍涨薪 50%+!

⬇️ 点击“阅读原文”,提升测试核心竞争力!
原文链接

⬇️ 点击“下方链接”,提升测试核心竞争力!

更多技术文章分享和免费资料领取
https://qrcode.testing-studio.com/f?from=Aliyun&url=https://ceshiren.com/t/topic/16586
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
2月前
|
人工智能 数据安全/隐私保护
你试过一秒钟出现在世界各地的感觉吗?
【8月更文挑战第13天】你试过一秒钟出现在世界各地的感觉吗?
|
数据格式
教你一招,瞬间制作无数个座位牌!
先作好心理准备,真的很简单,不要有心理负担,请跟着我的步骤动手操作起来。
234 0
|
开发者
做的游戏没人玩,还要不要继续做下去了
初入一个新的领域,想着自己一下子就能把事情做得很好,这是一种贪婪的妄念。这怎么可能呢?即使是天才,也需要天赋加上日积月累的练习,最终才能够把一件事情做得很好,达到一定的高度。而你竟然认为自己做的第一款游戏就能够大受欢迎,就能做得很好。这样想是不是有点儿不切实际? 第一次写字,第一次画画,第一次骑自行车,第一次游泳……总会是笨拙不堪的,第一次做的游戏同样也是这样,所以,这个问题也就变成了一个很普适的问题。
98 0
|
JavaScript 小程序 Java
当年那个手搓CPU的老哥回来了!
当年那个手搓CPU的老哥回来了!
|
弹性计算 安全 程序员
无影云桌面超级舒爽体验——再也不用担心晚上睡觉的风扇声音了
大家都知道,程序员的开发环境一开一大堆,你又没法关机,因为关机再开至少半小时后能开始工作,麻烦的不行,而且晚上不关机那风扇的声音嗡嗡的~难受的不行,现在云影云桌面来啦,解决这个问题实在是舒爽。
1675 1
无影云桌面超级舒爽体验——再也不用担心晚上睡觉的风扇声音了
|
Java 开发工具 Android开发
干货 | 谁懂这篇文,玩游戏还会卡顿?
干货 | 谁懂这篇文,玩游戏还会卡顿?
|
小程序
我写小程序像菜虚鲲——3、你能17张牌把我秒杀,我当场把电脑屏幕吃掉(中)
本节来肝下「微信小程序中布局」相关姿势点。希望你学完本章后,可以:根据设计师给的设计稿,堆砌控件。
149 0
|
小程序 前端开发 容器
我写小程序像菜虚鲲——3、你能17张牌把我秒杀,我当场把电脑屏幕吃掉(下)
本节来肝下「微信小程序中布局」相关姿势点。希望你学完本章后,可以:根据设计师给的设计稿,堆砌控件。
126 0
|
编解码 小程序 前端开发
我写小程序像菜虚鲲——3、你能17张牌把我秒杀,我当场把电脑屏幕吃掉(上)
本节来肝下「微信小程序中布局」相关姿势点。希望你学完本章后,可以:根据设计师给的设计稿,堆砌控件。
135 0
|
开发工具
电脑屏幕太小不够用?这有妙招!
为什么需要分屏功能?其实需求场合有很多。比如,我现在屏幕很大,但我们的代码一般是左对齐,右边很空,这样我们就可以通过分屏来充分利用右边的屏幕。再如,我现在想同时查看多个文档,除了打开多个终端外,我们还可以通过分屏来达到我们的目的。
184 0
电脑屏幕太小不够用?这有妙招!