【游戏测试】客户端性能 - drawcall 工具链

2024-03-25 23:08

本文主要是介绍【游戏测试】客户端性能 - drawcall 工具链,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文由资深游戏测试开发工程师 陈子昂,发表于TesterHome社区,点击原文链接可与作者交流。

一般 drawCall 可以理解成是调用次数,到底是调用了什么,一般性能测试里面会关注哪些。
提交给程序,Good 程序会说:这个地方可能是真有问题,我有空时看看。
Bad 结果 程序:这真没法修,一定让我对着这个修,我就原地下线了。
那么应该怎么做,本文会去掉公式和一些学术词汇。

简述下基本概念

移动端目前主流还是 OpenGL,drawCall 是 OpenGL 的绘制次数,也是优化参考指标,可以占到 4 分之一。
每次 Cpu 演算好,预设好顶点数据,在绘图前,会把顶点数据,位置,法线,颜色,纹理坐标,切线通知 Gpu 进行渲染绘制
drawcall 数量越多就分别进行对不同的顶点数据进行上面一样的渲染绘制的次数越多,次数等于 drawcall 数量。
drawcall 数越多,Cpu 不会处理不过来(有些文章会说堵在 Cpu,于是 Cpu 笑了),这样 Gpu 渲染承担的就更多。
drawcall 会对物件进行分类,不同分类相似度高的,drawcall 会缓存一部分,因为可以批量处理。

切入点

我们说下 drawcall 过高,可以找到一处切入点的

1.设置场景内粒子,但是只有发射,没有销毁。

游戏测试会怎么做,首先编写好用例,tag=客户端性能测试
关键性:执行反复操作一个特定事务,操作行为一般为 准备就绪-A-B-A-B,不会掺杂到其他的操作。
事务特定性注意是不能用打开关闭背包这种,需要对场景进行实际操作的,如果 2D 游戏,去通过打开关闭把背景界面降低到下一层做遮挡也是可以的。

3D 游戏事务实例:

准备就绪-移动到水波淋漓的湖边(A可见水波淋漓的湖边),B-丢出了一个特效技能比如6级不规则体冰球,A-可见水波淋漓的湖边,B-丢出了一个特效技能6级不规则体冰球。

操作方式:
绑定自动化测试框架优于人工测试,原因是机器每次的执行步骤是严格一致的,而人不一定会严格按照操作步骤。
启动一个新的进程对自动化测试框架做监听服务,由这个进行收集 drawcall,最好的方式是由该进程是一个接收数据的进程,程序 rpc 用字节流形式进入接收数据的管道。

准备就绪环境 - 最好是有一个 mock 服务,因为 gm 指令可以移动到指定位置,但是造号正常情况下需要先过引导,达成技能冰球条件,比如满足某个等级冰球。
在跑自动化的时候,可以通过 mock 服务 (聚合多个接口,支持组合条件生成的创号规则) 返回造号成功后,自动衔接自动化进行采集。
程序或者调用引擎收集方式都应该可以获得以下数据。

{"type":"湖面","triangles":200,"Instance":2,"total_triangle":400}  
{"type":"冰球","triangles":1200,"Instance":2,"total_triangle":2400}  

1 个湖面会有好多个湖面,1 个冰球也会不止 1 个 type=冰球的,所以上面数据是一个对象,应该是一个对象数组的形式,数组的个数也就是 drawCall 次数。

数据敏感度:
1.多次操作可以关注 Instance 实例数。
2.类型是否合理,如果视野内湖面很大,但是冰球数很多,也是需要记录的
以上自动化脚本是可以预设的,数据敏感度的断言也是一样的。

自动化采集的话,会在同一个位置做二次复查,才会定位 Bug,这个作用是查看复现步骤。

Bug 产出:数据敏感度部分 +drawcall 持续增长 就是该工具 Bug 产出。

那个场景有一些动图(2D 看场景背景图比如一些特效,3D 要看当前摄像机镜头,测试时请先固定摄像机镜头),并且渲染范围比较大,则对性能影响更大。

所需基建能力
1.录屏方案:安卓录制屏幕的,因为 adb 会占用 adb forward,并且只能 3 分钟一个视频,如果其他录制方案的,记得端口号和 adb 用同一个。
2.多媒体处理能力:ffmpeg 去开发根据视频长度去抽帧,作用很大,最大作用不是按一帧一张事后拆不用堵塞 IO。
3.logcat 日志,不同版本的内容数量有差别。

产出打法
1.开始记录监听的地方,开始录制屏幕 (需要提高分辨率的),完成后,最后在使用多媒体处理能力基建,drawcall 高的地方提供一组照片。
logcat 日志加上面的,可以做操作复现。
程序会获得对应 Bug 单子:里面附加可见测试用例,drawcall 高的地方有一组图片和 logcat 日志。

2.根据上面的html
{"type":"湖面","triangles":200,"Instance":2,"total_triangle":400}[]数组

和另外一个数组,统计出一个完整的数据
测试用例总会有个名字的

sessionId = 用例名操作1次(事务的一半)
sessionId:{"type":"湖面",“image":"素材的位置","drawCall_nums":50,"Instance_nums":10,
}

drawCall_nums=上面同一个类型数组总数,Instance_nums 是实例总和
drawCall_nums 和 type 不合理的数据是通过公式计算出来的。

多个 sessionId 就能根据一次的结果去分析到 drawCall_nums 和 Instance_nums 的上升和下降。所以这里看到需要预约一个标准,也可以找程序要一个标杆场景,如果比这个还要高的肯定是要修复的。

3.历史数据,每个阶段跑一下,看趋势。
4.补充信息

根据到这个排查出的结果,去游戏内复现后找到具体函数执行的,看 Profiles,等于是通过多组自动化行为去达到扫描和分工合作(一个人使用,一个人去编辑器版本那边拿补充信息)。

尾声

事务该如何找和有啥其他技巧,请等待下个文章: 客户端性能热力图


以上是今天的分享,你学废了吗~
想学习更多干货知识和前沿技术?
想结识测试行业大咖和业界精英?
>> 欢迎关注2022 MTSC大会(第十届中国互联网测试开发大会)

这篇关于【游戏测试】客户端性能 - drawcall 工具链的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/846545

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

国产游戏崛起:技术革新与文化自信的双重推动

近年来,国产游戏行业发展迅猛,技术水平和作品质量均得到了显著提升。特别是以《黑神话:悟空》为代表的一系列优秀作品,成功打破了过去中国游戏市场以手游和网游为主的局限,向全球玩家展示了中国在单机游戏领域的实力与潜力。随着中国开发者在画面渲染、物理引擎、AI 技术和服务器架构等方面取得了显著进展,国产游戏正逐步赢得国际市场的认可。然而,面对全球游戏行业的激烈竞争,国产游戏技术依然面临诸多挑战,未来的