手游性能测试指南_手游性能指标-程序员宅基地

技术标签: Android逆向  手游性能测试  FPS  glDrawElements  opengl  glDrawArrays  

1、前言

  随着手游3D类型游戏增多,对机器资源占用越发高,但用户手中硬件的提升是一个不可控且缓慢的过程,为了保证在尽量广泛的机型上流畅运行,提高游戏本身的潜在用户群体,所以手游客户端性能审核工作就越发重要,如何做客户端性能审核,如何快速,专业,准确的做客户端性能审核是我们需要重点关注、且持续建设的内容。

  什么是客户端性能审核?

  客户端性能审核主要针对不同主流机器(一般来自适配TOP10)根据不同配置划分高、中、低机型后,通过在各机型下模拟玩家核心体验场景、进行性能参数收集、评价该游戏的性能表现,并且进一步深入分析造成低性能表现原因的审核过程(见图1-1),通常我们会通过基础性能审核和精准定位两套方案流程来保证整个审核过程,而本文的撰写目的是为了通过清晰的阐述展示性能审核的思路和常用手段。

见图1-1

  文章导航:
  性能瓶颈分析思路
  基础性能采集工具AIO介绍
  常见性能瓶颈定位介绍

   2、基础审核方案

  2.1 性能基础参数

图2-1

  图2-1流程是数据正确输出到前台显示的步骤,其经历CPU处理、内存管理、GPU处理,显存管理等阶段,若过程出现性能不佳,只有可能是中间的某一环节异常导致,而客户端性能审核(第一步)就需要定位具体是哪个环节异常。过程中需要统计的性能参数如图2-2

图2-2

  android平台详细采集指标

  基础指标:
  • FPS帧率:应用程序每秒钟显示的帧数
  • CPU占用率:应用程序占用的CPU资源情况
  • 内存:应用程序存放到系统内存中占用情况,目前主要采集PSS
  • 显存:应用程序存放到显卡存储区域的资源数据占用情况,目前主要采集VBO
  • GPU占用率:应用程序占用GPU资源情况
  • 手游特有指标:
  • 流量:单位时间内通过网络端口传输的数据总量
  • 电量:单位时间内应用程序消耗的电荷数量

  2.2 基础采集工具介绍

  统计上述参数,市面上有很多工具,各种试用体验不爽后我们开发了AIO,优劣对比如下,


  • 工具展示



  • 工具框架


  • 工具特色

  1)真实帧率,渲染数据采集

  采集原理


  原理说明

  FPS获取:HOOK到libEGL.so中的eglSwapBuffers函数,并获得两次调用的时间差,用1000除以时间差值,即为帧率。

  Draw call获取:HOOK到opengl库中,统计glDrawElements,glDrawArrays函数执行次数,即每帧中上述函数的执行次数

  Primitive获取:HOOK到opengl库中,统计glDrawElements,glDrawArrays函数中的顶点数,通过其绘制原理进行换算成图元,获取到primitive总数

  VBO获取:HOOK到opengl库中,统计glBufferData、glBufferSubData函数参数的size大小,统计获取得到VBO大小

  2)精准流量,支持UDP消息统计

  采集原理


  原理说明

  pcap是基于libpcap实现的一个网络数据流量统计模块。libpcap是unix/linux平台下的网络数据包捕获函数库,大多数网络监控软件都以它为基础。Linux下著名的tcpdump就是以它为基础的,通过其可以捕获到链路层的数据帧,通过包解析去头给予应用层的流量大小统计,同时工具可支持对比链路层统计流量大小和应用层流量大小,差异太大一般是由于数据量小的包太多从而判断应用本身是否存在需要合并包。

  工具兼容和性能

  兼容机型支持情况
  • 兼容机器要求:需root权限
  • 兼容android系统:4.X系统,5.0系统暂不支持
  • 已测兼容机型:
  • 小米系列:MI 1S MI 2S MI3 MI4 HM NOTE
  • 三星系列:N9008V N9006 GT-I9300 N9008 I9508
  • VIVO: X5L

  工具测试2小时性能情况

  CPU和内存如图消耗很低,且2小时间无明显波动或持续增长趋势,工具本身性能影响低


  2.3 瓶颈识别

  (1)FPS瓶颈识别


  GPU相关异常信息,请关注是否绘制对象是否超量,或可尝试单帧分析定位瓶颈

  CPU相关异常信息,请关注逻辑函数相关异常,可尝试函数耗时定位分析

  VBO上传值超标,可优化相关使用场景,尝试定位当时场景单帧定位问题根因

  (2)内存瓶颈识别

  1)场景内存PSS峰值上限评估,4核 2G机器<=300M 2  2核 1G机器<=200MB 单核 768M 机器<=150M

  2)内存泄露评估,场景设计超1小时以上采集,内存无明显不释放表现趋势

  (3)流量瓶颈识别

  目前识别方式10分钟消耗流量不超过500KB

  (4)显存、电量瓶颈识别

  目前暂无特定阈值要求,只做统计参考

   3、审核精准定位方案

  虽然定位思路可通用于各应用,但由于引擎、代码逻辑上会有差异,定位细节上会存在不同,以下精准定位详解主要针对Unity3D引擎应用。

  3.1定位方法

  (1)CPU瓶颈定位

  定位参数
  • 函数级CPU占用率统计,执行耗时统计
  • 函数级GC大小统计,执行耗时统计

  采集工具

  U3D profiler


  常见判断准则
  • GC关注---任何一次性GC ALLOC大于2KB的选项
  • GC关注---每一帧都GC ALLOC大于20B的选项
  • CPU占用关注---CPU占用超过33ms以上的选项
  • CPU占用关注---CPU占用超过50ms以上,但占比小于10%的函数列表重点关注
  • CPU占用关注---CPU占用TOP选项

  (2)GPU瓶颈定位

  定位参数
  • Draw call 耗时
  • Shader复杂度
  • 绘制对象属性
  • 采集工具

  Adreno profiler


  常见判断准则
  • 渲染关注---Draw call 耗时TOP
  • 渲染关注---Draw call 次数不超过250,图元不超过4W
  • 渲染关注---shader的复杂度Instructions 条目(主流的GPU每帧处理计算条目平均50~10)
  • 渲染关注---shader中纹理采样次数建议不超过2
  • 渲染关注---整体场景透明物件占比不超过30%
  • 渲染关注---深度查看over draw具体情况

  (3)内存瓶颈定位

  定位参数
  • 资源的重复情况
  • 资源的大小是否超阈值
  • 资源是否存在泄漏

  采集工具

  U3D profiler


  常见判断准则
  • 内存阈值关注---ManagedHeap.UsedSize建议不超过20M
  • 内存阈值关注---总体Mone建议不超过40M
  • 内存阈值关注---Reserved Memory建议不超过150M
  • 内存阈值关注---2D纹理建议不超过50M
  • 内存阈值关注---Mesh大小建议不超过20M
  • 内存阈值关注---AnimationClip大小建议不超过15M
  • 内存阈值关注---AudioClip大小建议不超过15M
  • 资源属性关注---Texture2D、AnimationClip、Mesh、AudioClip是否存在重复对象
  • 资源属性关注---Texture2D是否存过大1024的对象
  • 资源泄漏关注---SerializedFile等函数加载后是否有释放(u3d profiler不太方便定位)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/justFWD/article/details/78710117

智能推荐

记录一次异机恢复问题:RMAN-06025 no backup of archive log …… found to restore-程序员宅基地

文章浏览阅读1.3k次。记录一次故障处理:RMAN-06025 no backup of archive log …… found to restore_rman-06025

html按钮调用python_javascript – Flask – 在按钮OnClick事件上调用python函数-程序员宅基地

文章浏览阅读955次。您可以在AJAX的帮助下完成此操作…下面是一个调用python函数的示例,该函数在不重定向或刷新页面的情况下打印hello.在app.py下面的代码段.//rendering the HTML page which has the [email protected]('/json')def json():return render_template('json.html')//background ..._flask 在click时javascript调用python函数

sguap 遇到的异常以及处理方法_sg-uap : warn jobloglistener:144 - taskdispatch: 【-程序员宅基地

文章浏览阅读5.7k次。一、org.springframework.web.client.ResourceAccessException: I/O error: Connection timed out: connect; nested exception is java.net.ConnectException: Connection timed out: connect问题原因:sguap部署时,默认数据库为Or_sg-uap : warn jobloglistener:144 - taskdispatch: 【jobloglistener】没有定义

近期的工作生活-程序员宅基地

文章浏览阅读1.2k次。坦诚地说每周想去更新博客,但是工作、生活、家庭各方面因素被搁置了,撰写前两个博客专栏“FPGA基础知识”和“FPGA 20个例程”时也酝酿准备了很久,把市面很多教程和视频都研究了一遍,也查阅了很多经典FPGA设计书籍,最后的最后更结合了实际项目经验,CSDN也收到了很多留言和私信等。这几个月因为忙于单位的新项目所以很久没有更新博客了,面对新的需求和新的挑战也需要不断学习新的知识,甚至推翻老的惯性思维,这时想到一个老同事说过:研发如果不能迎难而上,那基本不太会有什么提高了。

关于JavaBean获取中文乱码问题_javabean get中文字符串-程序员宅基地

文章浏览阅读3.8k次,点赞2次,收藏7次。最近重新学习了一下JavaWeb的一些基础知识,今天在学习JavaBean时遇到了一个中文的乱码问题。当JavaBean获取表单中的数据有中文时就会出现乱码的现象。原因大概是因为MyEclipse对Java文件的默认编码是iso8859-1,而我们在jsp中的编码设置一般为utf-8,所以在获取中文时必然会出现乱码的现象。其实解决的方法很简单,只需要我们在Getter方法中用getBytes(_javabean get中文字符串

GSL Non-Complete Primer-程序员宅基地

文章浏览阅读163次。Bo Schwarzstein http://jedimaster.cnblogs.com/ 6/21/2008 写在狗屎一样的中国高等教育之前 摘要GNU Scientific Library(以下简称GSL)是来自开源社区的重磅礼物,历史悠久功能强大,集成了最基础的同时也是最重要的科学计算算法如BLAS、Monte Carlo积分等。本文讲解了其基本使用方法..._c++ ordinary differential equation

随便推点

论文笔记:Towards accurate multi-person pose estimation in the wild(G-RMI)-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏12次。作者提出了_towards accurate multi-person pose estimation in the wild.

单词分析(2020省赛)--java-程序员宅基地

文章浏览阅读124次。题目描述小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这 个字母出现的次数。输入描述输入一行包含一个单词,单词只由小写英文字母组成。对于所有的评测用例,输入的单词长度不超过 1000。输出描述输出两行,第一行包含一个英文字母,表示单词中出现得最多的字

习题10-4 递归求简单交错幂级数的部分和 (15point(s)).c_double fn( double x, int n );-程序员宅基地

文章浏览阅读132次。本题要求实现一个函数,计算下列简单交错幂级数的部分和:f(x,n)=x−x​2+x​3​​−x​4+⋯+(−1)​n−1​​x​nf(x,n)=x− x_​{2} +x​_3​​ −x​_4 +⋯+(−1)​^{n−1}​​ x_​nf(x,n)=x−x​​2+x​3​​​−x​4​+⋯+(−1)​n−1​​x​​n​​函数接口定义:double fn( double x, int n )..._double fn( double x, int n );

system generator学习(三)之black box的使用_system generator blackbox模块-程序员宅基地

文章浏览阅读2.3k次。1、建立模型 将black box模块拖入新建MDL文件中,出现要添加的硬件描述文件的对话框把生成的m文件改为dout_port.setType('Fix_26_13');意思是输出带13位小数的26位定点数,并添加下行代码调用如下图搭建完模型运行后发现并不知道要怎么改。。挖个坑放在这里——————————————————————————————发现是# ** Warning: There ..._system generator blackbox模块

OpenSSL新手自学:如何生成RSA私钥并用于数字签名_rsa_padding_mode:pss-程序员宅基地

文章浏览阅读1.4k次。参考: https://paulyang.cn/2016/11/28/rsa-padding.html 作者: 杨洋https://infohunter.github.io/2016/11/28/rsa-padding.htmlopenssl 更新工具包, 使用pkeyutl取代rsautl之后才开始支持使用PSS padding scheme进行数字..._rsa_padding_mode:pss

在Matplotlib图中插入LaTex公式_matplotlib latex-程序员宅基地

文章浏览阅读1.5w次。Matplotlib可以无缝的处理LaTex字体,在图中加入数学公式from matplotlib.patches import Polygonimport matplotlib.pyplot as pltimport numpy as np# 定义一个求积分的函数def func(x): return 0.3* (x**2) + (0.1*x) + 1# 定义积分区间a, b =_matplotlib latex

推荐文章

热门文章

相关标签