unity性能优化-Profiler
Unity内置分析器Profiler、Xcode分析工具
Profiler:
1.CPU Usage:
WaitForTargetFPS:Vsync(垂直同步)功能所,即显示当前帧的CPU等待时间
Overhead:Profiler总体时间-所有单项的记录时间总和。用于记录尚不明确的时间消耗,以帮助进一步完善Profiler的统计。
Physics.Simulate:当前帧物理模拟的CPU占用时间。
Camera.Render:相机渲染准备工作的CPU占用量
RenderTexture.SetActive:设置RenderTexture操作.
底层实现:
1.比对当前帧与前一帧的ColorSurface和DepthSurface.
2.如果这两个Buffer一致则不生成新的RT,否则则生成新的RT,并设置与之相对应的Viewport和空间转换矩阵.
Monobehaviour.OnMouse_ :用于检测鼠标的输入消息接收和反馈,主要包括:SendMouseEvents和DoSendMouseEvents。(只要Edtor开起来,这个就会存在)
HandleUtility.SetViewInfo:仅用于Editor中,作用是将GUI和Editor中的显示看起来与发布版本的显示一致。
GUI.Repaint: GUI的重绘(说明有在使用原生的OnGUI)
Event.Internal_MakeMasterEventCurrent:负责GUI的消息传送
Cleanup Unused Cached Data:清空无用的缓存数据,主要包括RenderBuffer的垃圾回收和TextRendering的垃圾回收。
1.RenderTexture.GarbageCollectTemporary:存在于RenderBuffer的垃圾回收中,清除临时的FreeTexture.
2.TextRendering.Cleanup:TextMesh的垃圾回收操作
Application.Integrate Assets in Background:遍历预加载的线程队列并完成加载,同时,完成纹理的加载、Substance的Update等.
Application.LoadLevelAsync Integrate:加载场景的CPU占用,通常如果此项时间长的话70%的可能是Texture过长导致.
UnloadScene:卸载场景中的GameObjects、Component和GameManager,一般用在切换场景时.
CollectGameObjectObjects: 执行上面M项的同时,会将场景中的GameObject和Component聚集到一个Array中.然后执行下面的Destroy.
Destroy: 删除GameObject和Component的CPU占用.
AssetBundle.LoadAsync Integrate: 多线程加载AwakeQueue中的内容,即多线程执行资源的AwakeFromLoad函数.
Loading.AwakeFromLoad: 在资源被加载后调用,对每种资源进行与其对应用处理.
2.GPU Usage:
Device.Present:device.PresentFrame的耗时显示,该选项出现在发布版本中.
Graphics.PresentAndSync:GPU上的显示和垂直同步耗时.该选项出现在发布版本中.
Mesh.DrawVBO: GPU中关于Mesh的Vertex Buffer Object的渲染耗时.
Shader.Parse:资源加入后引擎对Shader的解析过程.
Shader.CreateGPUProgram:根据当前设备支持的图形库来建立GPU工程.
3.Memory Profiler
Used Total: 当前帧的Unity内存、Mono内存、GfxDriver内存、Profiler内存的总和.
Reserved Total:系统在当前帧的申请内存.
Total System Memory Usage:当前帧的虚拟内存使用量.(通常是我们当前使用内存的1.5~3倍)
GameObjects in Scene:当前帧场景中的GameObject数量.
Total Objects in Scene:当前帧场景中的Object数量(除GameObject外,还有Component等).
Total Object Count: Object数据 + Asset数量
4.Detail Memory Profiler
Texture2d:记录当前帧内存中所使用的纹理资源情况,包括各种GameObject的纹理、天空盒纹理以及场景中所用的Lightmap资源.
Scene Memory: 记录当前场景中各个方面的内存占用情况,包括GameObject、所用资源、各种组件以及GameManager等(天般情况通过AssetBundle加载的不会显示在这里).
ManagedHeap.UseSize:代码在运行时造成的堆内存分配,表示上次GC到目前为止所分配的堆内存量.
WebStream:这个是由WWW来进行加载的内存占用.
System.ExecutableAndDlls:不同平台和不同硬件得到的值会不一样。