如何用UPA優化性能?先讀懂這份報告!

做者:徐森, 騰訊WeTest UPA團隊測試開發 高級工程師
商業轉載請聯繫騰訊WeTest得到受權,非商業轉載請註明出處。
原文連接:http://wetest.qq.com/lab/view/375.htmlhtml

WeTest UPA是WeTest和Unity聯合出品的一款Unity遊戲性能優化的工具,自上線以來受到了不少Unity遊戲開發人員和測試人員的關注,同時也有一些用戶反饋不知道應該如何解讀UPA報告,下面咱們對UPA報告的解讀方法進行總結,幫助你們最大化利用UPA報告,解決遊戲性能問題。性能優化

在正式開始前,須要強調一點,因爲遊戲的Development版本自己會對遊戲的性能產生必定影響,因此UPA報告中的性能數據只能做爲性能優化的參考,不能用來衡量遊戲的真實性能。若是須要測試遊戲真實的性能狀況,可使用WeTest助手的通用測試功能,對遊戲最終上線的版本進行測試。函數


1、概述

打開一份UPA報告時,最早看到的就是概述頁面,這也是咱們推薦用戶第一時間關注的頁面。概述頁面一開始會列出測試的基本信息,並根據騰訊遊戲的性能標準,給出本次測試的結果(經過,不經過和警告):工具

圖片描述

接下來,會列出本次報告詳細的性能數據:性能

圖片描述

通常來講,遊戲的性能問題主要有兩方面:幀率和內存。幀率分爲CPU耗時和GPU耗時,內存問題分爲遊戲邏輯內存(在Unity遊戲中即Mono內存)和資源內存。測試

上述的詳細性能數據都包含其中:幀率反映CPU耗時和GPU耗時狀況,ReservedMono內存反映遊戲邏輯內存狀況,紋理資源、網格資源、動畫資源和音頻資源反映資源內存狀況,DrawCall和Tris反映GPU耗時狀況。經過上述數據,用戶能夠大概知道遊戲的性能問題出在哪方面。優化

除了詳細數據之外,UPA還結合Unity現場支持專家們的經驗,對常見問題進行了總結,並在報告中自動進行分析:
圖片描述動畫

針對這些問題,咱們也總結了相應的優化建議:spa

圖片描述

根據提供的優化建議,用戶能夠快速的解決一些常見性能問題。另外,咱們的問題庫及經驗庫也會不斷更新優化,帶給用戶更多實用的優化經驗。3d

經過概述頁面,咱們能夠大體瞭解到遊戲的性能數據,出現的性能問題,以及對應的優化建議。但只有這些是不夠的,若是性能問題比較複雜,就須要更詳細的數據幫助咱們定位及優化,下面就來看看UPA提供的詳細性能數據有哪些。

2、CPU模塊

CPU模塊主要提供了CPU耗時相關的詳細數據。在定位CPU相關性能問題時,咱們能夠從兩方面入手:

一、總體耗時

若是遊戲的總體幀率都比較低,須要重點關注某個模塊或者某個函數是否一直耗時較高,首先,看一下模塊耗時:

圖片描述

遊戲的FPS均值13.71較低,同時渲染模塊耗時(RenderingTime)一直較高,能夠嘗試優化渲染相關性能。其次,咱們也能夠看一下耗時排名Top10的模塊,並嘗試優化:

圖片描述

二、單幀耗時

若是遊戲總體幀率正常,偶爾卡頓的話,就須要關注單幀耗時較高的幀。經過下圖能夠方便找到單幀耗時較高的狀況:

圖片描述

針對耗時較高的幀,查看該幀詳細的模塊耗時狀況:
圖片描述

模塊耗時能夠展開,查看模塊間的調用關係,並最終肯定致使單幀耗時較高的模塊。

因爲有些模塊屬於引擎內部模塊,用戶可能不太清楚其具體做用,咱們也對一些模塊的做用進行了說明:

圖片描述

3、圖形模塊

圖形模塊反映了渲染耗時狀況,並經過一些指標側面反映了GPU的壓力。在渲染致使遊戲卡頓時,須要重點關注圖形模塊。

一、模塊耗時

UPA提供了一些渲染相關的模塊耗時信息,經過這些信息咱們能夠判斷遊戲的攝像機使用是否合理,以及Shader相關的耗時是否較高:

圖片描述

Camera.Render模塊反映了遊戲過程當中攝像機的數量和渲染耗時。

圖片描述

Shader相關模塊反映了Shader處理的耗時。

二、合批

除了攝像機和Shader方面的優化,合批也是圖形優化中很是重要的一點。因爲GPU是單獨的硬件,其性能消耗較難採集,所以通常用一些性能指標間接反映GPU的壓力狀況,最典型的就是Drawcall(Unity5.0之後改成SetPasscall)指標。在Unity引擎中對Drawcall最直接的優化方法就是合批(Batch)。

合批又分爲靜態合批(StaticBatch)和動態合批(DynamicBatch),其原理就是把GPU的壓力分一些到CPU或內存,所以開啓合批會帶來額外的CPU或內存消耗,須要咱們進行權衡。

圖片描述

以靜態合批爲例,UPA會列出開啓靜態合批之後節省的Drawcall數量(圖中黃線部分),並以總Drawcall數量做爲背景進行比較,用戶能夠清晰看出開啓靜態合批之後帶來的收益,以此決定是否進行合批。

三、其餘數據

除了上述數據意外,UPA還提供了每幀的VBO、面數等渲染指標,方便有經驗的用戶利用這些指標進行渲染性能優化:

圖片描述

4、內存模塊

內存模塊反映了遊戲各方面的內存佔用狀況,首先咱們須要關注遊戲總體的內存佔用:
圖片描述

Total Reserved表示引擎分配的內存,Total Used表示引擎實際使用的內存,二者的差值(圖中紅線部分)表示空閒的內存。經過上圖咱們能夠知道引擎分配內存是否在合理範圍,空閒內存是否較多。

若是引擎分配內存較大,或者空閒內存較多,都是不合理的,這時就須要知道問題出在哪一個部分,Unity引擎分配的內存分爲四個部分,在UPA報告中都以曲線展現:

一、Unity

這部分表示引擎自己邏輯須要使用的內存,資源內存也包含在其中,若是須要進行優化,建議直接優化資源方面的內存,UPA中列出了紋理、網格、動畫、音頻和材質等資源的內存佔用,能夠針對性進行優化(以紋理資源爲例):
圖片描述

二、Mono

Mono內存表示遊戲中腳本分配的內存,遊戲邏輯由開發人員本身編寫,而且通常比較複雜,所以較容易出現內存問題(雖然Mono自己提供了垃圾回收機制,但仍然可能出現內存泄漏)。

圖片描述

對於Mono內存,咱們須要關注總內存Reserved及空閒Unused,防止內存泄漏。

三、GfxDriver和Fmod

GfxDriver和Fmod內存分別表示Unity底層渲染模塊和音頻模塊的內存,GfxDriver內存較高的話建議對Shader和Texture等資源進行優化,Fmod內存較高的話建議對AudioSource和AudioClip等資源進行優化。

四、Profiler

這部分表示Unity Profiler分配的內存,不會帶到上線版本,在確認內存佔用狀況時須要去除該部份內存。

5、總結

在UPA報告中,展現了遊戲的總體性能狀況,並針對常見的性能問題提供了問題列表及優化建議。對於CPU耗時和GPU耗時部分提供了詳細的性能數據,包括各模塊耗時,以及各類渲染指標,用戶能夠利用這些詳細性能數據定位並優化遊戲的性能問題。

在內存方面,UPA提供了各部分的內存曲線,使用戶能夠了解各部份內存分配狀況,可是對於詳細定位及優化問題還缺乏關鍵數據。針對內存優化中最多見的資源內存優化及Mono內存優化,UPA分別提供了資源測試和Mono內存測試類型,幫助你們獲取更詳細的內存數據,更方便的優化內存問題。


UPA—— 一款針對Unity遊戲/產品的深度性能分析工具,由騰訊WeTest和unity官方共同研發打造,能夠幫助遊戲開發者快速定位性能問題。旨在爲遊戲開發者提供更完善的手遊性能解決方案,同時與開發環節造成閉環,保障遊戲品質。

點擊連接:http://wetest.qq.com/cube/ ,下載WeTest助手APP ,當即使用UPA。

相關文章
相關標籤/搜索