CPU 使用率性能分析器 (CPU Usage Profiler)

CPU Usage Profiler 顯示游戲中的時(shí)間使用情況。選擇此選項(xiàng)后,下方面板將顯示所選幀的層級(jí)時(shí)間數(shù)據(jù)。請(qǐng)參閱有關(guān)?Profiler 窗口的文檔以了解關(guān)于 Profiler 時(shí)間軸的更多信息。
Hierarchy mode:顯示層級(jí)時(shí)間數(shù)據(jù)。
Group Hierarchy mode:將時(shí)間數(shù)據(jù)分成邏輯組(例如 Rendering、Physics、Scripts)。由于任何組的子項(xiàng)也可以位于不同的組中(例如,某些腳本也可能調(diào)用渲染函數(shù)),因此組時(shí)間的百分比通??傆?jì)超過 100%。
上下拖動(dòng)圖表標(biāo)簽可重新排列 CPU 圖表的堆疊方式。
選擇各項(xiàng)
在下方面板中選擇某一項(xiàng)時(shí),將突出顯示其對(duì) CPU 圖表的貢獻(xiàn)(其余部分將變暗)。再次單擊某一項(xiàng)將取消選擇該項(xiàng)。

在層級(jí)時(shí)間數(shù)據(jù)中,__Self__ 列表示在特定函數(shù)中所用的時(shí)間量,不包括調(diào)用子函數(shù)所用的時(shí)間。在上面的截屏中,41.1% 的時(shí)間用在了?Camera.Render
?函數(shù)上。此函數(shù)做了很多工作,并調(diào)用各種繪制和剔除函數(shù)。排除所有這些函數(shù)之后,只有 2.1% 的時(shí)間用在了?Camera.Render
?函數(shù)本身上。
Time ms?和?Self ms?列顯示相同的信息,但以毫秒為單位。Camera.Render
?需要 0.01ms,但包括其調(diào)用的所有函數(shù)在內(nèi)一共需要 0.21ms。GC Alloc?列顯示當(dāng)前幀中已分配并稍后由垃圾回收器收集的內(nèi)存量。將此值保持為零可防止垃圾回收器造成幀率不穩(wěn)。
CPU 性能分析器的?Others?部分記錄不屬于 Rendering、Scripts、Physics、Garbage Collection 或 VSync 的所有方面的總和。此部分包括 Animation、AI、Audio、Particles、Networking、Loading 和 PlayerLoop。
物理標(biāo)記
下面的描述簡(jiǎn)要介紹了各種高級(jí) Physics Profiler 標(biāo)記的含義。
Physics.Simulate:從?
FixedUpdate
?中調(diào)用。通過指示物理引擎 (PhysX) 運(yùn)行其模擬來更新物理系統(tǒng)的當(dāng)前狀態(tài)。Physics.Processing:從?
FixedUpdate
?中調(diào)用。處理所有非布料物理作業(yè)。擴(kuò)展此標(biāo)記可顯示物理引擎內(nèi)部完成的工作的低級(jí)細(xì)節(jié)。Physics.ProcessingCloth:從?
FixedUpdate
?中調(diào)用。處理所有布料物理作業(yè)。擴(kuò)展此標(biāo)記將顯示物理引擎內(nèi)部完成的工作的低級(jí)細(xì)節(jié)。Physics.FetchResults:從?
FixedUpdate
?中調(diào)用。從物理引擎收集物理模擬結(jié)果。Physics.UpdateBodies:從?
FixedUpdate
?中調(diào)用。更新所有物理體的位置和旋轉(zhuǎn)以及發(fā)送說明這些更新的消息。Physics.ProcessReports:從?
FixedUpdate
?中調(diào)用。此階段在物理?FixedUpdate
?結(jié)束后運(yùn)行,負(fù)責(zé)處理響應(yīng)模擬結(jié)果的所有不同階段。更新接觸、關(guān)節(jié)破壞和觸發(fā)器并發(fā)送相關(guān)消息。包括四個(gè)不同的子階段:Physics.TriggerEnterExits:從?
FixedUpdate
?中調(diào)用。處理?OnTriggerEnter
?和?OnTriggerExit
?事件。Physics.TriggerStays:從?
FixedUpdate
?中調(diào)用。處理?OnTriggerStay
?事件。Physics.Contacts:從?
FixedUpdate
?中調(diào)用。處理?OnCollisionEnter
、OnCollisionExit
?和?OnCollisionStay
?事件。Physics.JointBreaks:從?
FixedUpdate
?中調(diào)用。處理與被破壞的關(guān)節(jié)相關(guān)的更新和消息。Physics.UpdateCloth:從?
Update
?中調(diào)用。進(jìn)行與布料及其蒙皮網(wǎng)格相關(guān)的更新。Physics.Interpolation:從?
Update
?中調(diào)用。此階段處理所有物理對(duì)象的位置和旋轉(zhuǎn)的插值。
性能警告
CPU 性能分析器能夠檢測(cè)并警告一些常見的性能問題。查看?CPU Usage?時(shí),這些問題會(huì)顯示在下方面板的?Warning?列中。

性能分析器可檢測(cè)的具體問題包括:
Rigidbody.SetKinematic?[Re-create non-convex MeshCollider for Rigidbody]
Animation.DestroyAnimationClip?[觸發(fā) RebuildInternalState]
Animation.AddClip?[觸發(fā) RebuildInternalState]
Animation.RemoveClip?[觸發(fā) RebuildInternalState]
Animation.Clone?[觸發(fā) RebuildInternalState]
Animation.Deactivate?[觸發(fā) RebuildInternalState]
在上面的截屏中,性能分析器顯示了?Static Collider.Move?警告。Warning?列顯示此警告已在當(dāng)前幀中觸發(fā) 12 次。術(shù)語“延遲成本”意味著,雖然性能分析器中的條目可能顯示低成本(在此情況下為 0.00ms),但該操作可能會(huì)在以后觸發(fā)更多消耗系統(tǒng)資源的操作。
CPU Profiler Timeline
Mem Record:本機(jī)內(nèi)存性能分析
本機(jī)內(nèi)存性能分析允許在 Unity 的本機(jī)內(nèi)存管理系統(tǒng)中分析活動(dòng),并評(píng)估對(duì)運(yùn)行時(shí)性能的影響。在 Unity 的內(nèi)存管理中搜索不必要的或資源密集的分配模式時(shí),此分析功能非常有用。
要分析 Unity 的本機(jī)內(nèi)存管理,必須記錄內(nèi)存情況。要訪問本機(jī)內(nèi)存記錄模式(在 Unity 中稱為?Mem Record__),請(qǐng)選擇?Window__ >?Profiler?以打開 Profiler 窗口。選擇?CPU Usage?Profiler(如果不可見,請(qǐng)單擊?Add Profiler?>?CPU__),然后在 Profiler 下面選擇下拉菜單。接下來,單擊?Timeline__,然后選擇?Mem Record。

選項(xiàng)????????????功能????????????對(duì)性能影響
None:禁用模式。這是默認(rèn)選擇。(無)
Sample only:記錄內(nèi)存分配、重新分配、取消分配、活動(dòng)類型和系統(tǒng)。(低)
Callstack (fast)此選項(xiàng)具有與?Sample only?相同的功能,但還記錄來自本機(jī)分配站點(diǎn)的快捷調(diào)用棧(調(diào)用棧從本機(jī)符號(hào)轉(zhuǎn)換為腳本符號(hào))。實(shí)際上,最多只能看到最深腳本符號(hào)的調(diào)用棧。(中)
Callstack (full)此選項(xiàng)具有與?Sample only?相同的功能,但還記錄具有完整腳本到本機(jī)轉(zhuǎn)換和本機(jī)到腳本轉(zhuǎn)換的調(diào)用棧。(高)
注意:當(dāng)激活的性能分析器僅連接到獨(dú)立平臺(tái)播放器時(shí),僅支持低影響力的?Sample only?模式。
記錄的內(nèi)存分配樣本以亮紅色顯示在 Profiler 窗口中。

單擊?Mem Record?旁邊的?High Detail?按鈕可啟用 High Detail 模式。選擇一個(gè)樣本來顯示分配類型和系統(tǒng)。如果為所選分配樣本記錄了調(diào)用棧,則還會(huì)解析并顯示關(guān)聯(lián)的調(diào)用棧符號(hào):

使用 Mem Record
在許多情況下,__Mem Record__ 功能很有用。例如:
了解系統(tǒng)何時(shí)進(jìn)行大量小型分配而不僅僅是少量大型分配。
了解何時(shí)工作線程意外分配內(nèi)存(例如,通過意外使用 MemLabel)。
查找鎖爭(zhēng)用(多個(gè)線程嘗試同時(shí)訪問本機(jī)內(nèi)存系統(tǒng)時(shí))。
查找內(nèi)存碎片的來源(對(duì)于低內(nèi)存設(shè)備尤為重要)。
Timeline 的 High Detail 視圖
CPU Usage Profiler Timeline 的?High Detail?視圖為 Unity 的 CPU Usage Profiler 記錄的每個(gè)樣本提供至少一個(gè)寬度像素。
這樣便可查看幀中所有活動(dòng)的完整概況,包括線程同步或內(nèi)存分配等短期活動(dòng)。
要啟用?High Detail?視圖,請(qǐng)選擇?Window?>?Profiler?以打開 Profiler 窗口。選擇?CPU Usage?Profiler(如果不可見,請(qǐng)單擊?Add Profiler?>?CPU__),然后將在 Profiler 下面選擇下拉菜單,并依次單擊?Timeline__ 和?High Detail。

比較
以下兩個(gè)圖顯示了 CPU Usage Profiler Timeline 的?High Detail?視圖與普通視圖之間的區(qū)別。
High Detail 視圖

普通視圖
