写点什么

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

  • 2022 年 9 月 23 日
    北京
  • 本文字数:1273 字

    阅读完需:约 4 分钟

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


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

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 win32conpip2 install pypiwin32No module sixpip2 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
复制代码

更多学习资料戳下方!!!

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=infoQ&timestamp=1662366626&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
干货 | 谁懂这篇文,玩游戏还会卡顿?_测试_测吧(北京)科技有限公司_InfoQ写作社区