乐趣区

关于软件测试:干货-谁懂这篇文玩游戏还会卡顿

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

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

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
退出移动版