性能测试基本知识
1、FPS/FrameTime
FPS:帧率,每秒的帧数,若游戏帧率是60帧,也就是一秒60帧。
FrameTime:帧的时间,单是ms-毫秒,1秒=1000ms。比如FrameTime平均是25ms,那FPS=1000/25
2.GameThread/RenderThread/GPU
FrameTime主要由GameThread/RenderThread/GPU的最大值决定
GameThread是逻辑线程,一般处理游戏逻辑,比如物理,角色的移动,网络收发等。GameThreadTime就是每帧逻辑线程的执行时间,单位是ms
RenderThread是渲染线程,跟渲染有关系,画面的处理,遮挡剔除,距离裁剪,提交渲染等。RenderThreadTime就是每帧渲染线程的执行时间,单位是ms
GPU,渲染线程提交GPU渲染,由GPU绘制最终的画面,提交至屏幕输出。GPUTime就是绘制一帧画面的时间,单位是ms。(显卡的一部分)
3.PSO(Pipeline Stage Object)
在游戏第一次安装启动时,运行游戏可能会有卡顿现象,再跑测就不会,实际上卡顿是在编译Shader。shader编译的卡顿有时候我们不希望统计到性能数据里,所以跑测时需要先跑几轮游戏,进行shader预热之后,再采集数据。
4.DrawCall
引擎每次提交渲染资源会调用一次Draw函数,DrawCall就是一帧里面,引擎调用Draw的次数,是一个常见的渲染性能指标。DC越多,渲染线程越差
5.面数(Triangles)
渲染画面,模型都是由若干个三角面组成的,如下图的兔子,就是有很多三角面。面数越多,模型越精细,视觉效果更逼真。但是面数太多,帧率会下降、内存也会增加
内存溢出与泄漏
- 内存溢出:当程序申请的内存超过了系统可提供的内存资源时,会发生内存溢出。这通常是因为程序中存在过多的数据结构或对象,导致内存需求超过了物理或虚拟内存的限制。
- 内存泄漏:内存泄漏是指程序在分配内存后,由于某些原因未能及时释放,导致内存被长时间占用而无法回收。随着时间的推移,内存泄漏会导致系统可用内存逐渐减少,最终可能影响程序的正常运行或导致系统崩溃。
表现形式
- 内存溢出:通常表现为程序突然崩溃或无法执行,伴随有内存不足的错误信息。这是因为程序需要的内存超过了系统能提供的上限。
- 内存泄漏:表现为程序运行时间越长,占用内存越多,可能导致程序响应变慢或最终崩溃。内存泄漏不会立即导致程序崩溃,但会慢慢消耗系统资源。
OOM全称叫Out of Memory,内存超过系统的某个阈值限制,会触发程序Crash。OOM的阈值不同机型不一样,以iOS为例,
总内存1G,OOM阈值645M:
- iPhone6: 645MB/1024MB/62% (iOS 8.x)
- iPhone6+: 645MB/1024MB/62% (iOS 8.x)
总内存2G,OOM阈值1360-1396M:
- iPhone6s: 1396MB/2048MB/68% (iOS 9.2)
- iPhone6s+: 1392MB/2048MB/68% (iOS 10.2.1)
- iPhoneSE: 1395MB/2048MB/69% (iOS 9.3)
- iPhone7: 1395/2048MB/68% (iOS 10.2)
- iPhone8: 1364/1990MB/70% (iOS 12.1)
总内存3G,OOM阈值1790M:
- iPhone 7P
- iPhone 8P
- iPhone X
- iPhone XR
总内存4G,OOM阈值2040-2080M:
- iPhone XS
- iPhone XS Max
- iPhone XR
- iPhone 11
- iPhone 11 Pro/Pro Max
- iPhone 12
- iPhone 13
总内存6G,OOM阈值2080M:
- iPhone 12 Pro/Pro Max
- iPhone 13 Pro/Pro Max