zoukankan      html  css  js  c++  java
  • 谁懂这篇文,玩游戏还会卡顿?

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

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

    ** 卡顿分析**

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

    下面的这些内容可能会造成卡顿:

    • 内存问题:内存抖动、full gc

    • cpu:计算耗时

    • gpu:布局复杂、overdraw

    内存

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

    • 内存抖动(Memory Churn),创建大量的对象,在短时间内马上释放。

    • 产生大量对象会占用Young Generation的内存区域, 如果剩余空间不足,就会触发GC。同时,大量对象的叠加也会增加Heap的压力,从而触发更多的GC操作。

    CPU

    UI渲染由CPU和GPU分工完成,CPU负责布局元素的运算(比如Measure, Layout)。GPU负责栅格化处理(将UI元素绘制到屏幕上)。

    UI布局层次太深, 或者自定义控件的onDraw函数中存在复杂运算, 就需要CPU负荷工作,从而影响整个绘制过程。

    GPU

    过度绘制会导致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
    

    ** _
    来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
    QQ交流群:484590337
    公众号 TestingStudio
    点击获取更多信息

  • 相关阅读:
    系统实践2-2:查看dockerfile-032092135mysql容器的配置信息
    系统综合实践1
    SDN——实验脚本7-2:hardtimeout.json
    SDN——实验脚本7-1:odlnorth.py
    实验 7:OpenDaylight 实验——Python 中的 REST API 调用
    预习非数值数据的编码方式
    预习原码补码
    C语言ll作业01
    C语言寒假大作战04
    C语言寒假大作战03
  • 原文地址:https://www.cnblogs.com/hogwarts/p/15821292.html
Copyright © 2011-2022 走看看