每個游戲開發者都有一個共同的愿望,那就是能夠在無需復現玩家反饋的卡頓現象時,快速且準確地定位卡頓的根本原因。 。 在這篇文章中,我們將從三個方面詳細介紹如何高效使用「卡頓幀堆棧」功能,并通過代碼樣本幫助開發者實現對玩家端卡頓問題的精細化定位。
定位卡頓細節三部曲
步驟 1:發現特定情況下的卡頓,以及頂層函數
在卡頓幀堆棧異常上報的條件下,GPM 2.0報告將顯示玩家游戲時的卡頓幀堆棧信息及當時的畫面截幀。例如,在Demo項目中,開發者可以查看如下堆棧表現圖,詳細展示了特定情況下的卡頓信息。以Demo項目為例,可以看到如下圖的堆棧表現。
此處“調用棧深度”設置為5(默認為1)
步驟2:根據出現時機及函數,細化相關邏輯打點
使用GPM SDK提供的API,開發者可以根據游戲特性和性能瓶頸,合理制定打點策略。例如,對高頻調用的函數、資源加載流程、復雜運算邏輯等進行重點打點。
以Demo項目為例,從步驟1的結果可以看到,DOTweenComponent.Update 自身的耗時較高,說明很可能是DOTween動畫插件的更新觸發的回調帶來高耗時,結合截圖和時機看,可以判斷出可能是啟動畫面結束,切換場景的邏輯,從而找到對應代碼進行打點。
以下是通過Push/Pop的成對調用,對其中的邏輯進行打點。
也可通過using+Auto的方式,對作用域中的邏輯打點。
步驟3:獲取玩家端耗時細節
將進行了邏輯打點的新版本更新至玩家端后,在新的異常報告中即可以看到打點部分的詳細耗時。
此時我們發現,耗時的主要部分來自于自定義PlayerPrefs的初始化檢測,以及LuaManager的清理操作。
通過上述分析,開發者可以更高效地定位和解決卡頓問題,提升玩家體驗。
詳細拆分卡頓模塊
核心模塊耗時拆分
核心模塊通常包括游戲的主要業務邏輯部分,如角色同步、尋路、網絡消息處理、UI動畫等。拆分后我們就可以在卡頓堆棧中初步判定高耗時的主要原因,以及明確下一步的排查方向。
如觀察下圖中的卡頓堆棧,可以看到耗時主要和NPC的預加載有關,同時單幀內處理了較多的網絡消息等。
子線程耗時拆分
當項目中存在子線程任務,且有主線程同步等待的機制時,可以針對這部分耗時進行打點,當主線程中的卡頓耗時集中在同步等待時,就可以在子線程中查看與什么任務有關。
注意:子線程中函數的開始時間可能早于主線程當前幀的開始時間,所以有可能會出現總耗時大于幀耗時的情況。
各引擎/平臺使用方式及調用方式
為了更好地利用卡頓幀堆棧功能,我們需要了解不同引擎和平臺的使用方式及調用方式。
C#(適用于Unity)?
在Unity中,開發者可以使用Push/Pop成對調用的方式對邏輯部分進行打點,這種方式要注意中間避免出現提前return的if分支。
以及通過using+Auto觸發作用域打點的方式進行打點,這種方式即使包含了return邏輯也不影響。
對于Unity中HybridCLR的C#熱更新框架,可以直接使用GpmSample打點,通過熱更即可快速迭代上線,使打點堆棧生效;非熱更的部分則需要通過版本更新生效。
?C++(適用于Unreal)?
在Unreal中,開發者也可以通過Push/Pop成對調用的方式來進行打點。
以及通過GpmSampleAuto析構觸發作用域打點的方式,可以配合{}的使用,指定作用范圍,這種方式同樣不受提前return的影響。
?Lua(適用于Unity/Cocos/Unreal)?
Lua腳本語言在多個游戲引擎中都有廣泛應用。在Unity、Cocos和Unreal中,開發者都可以在Lua中使用GPM SDK提供的API進行打點。
在Cocos中,GPM SDK會自動完成C和Lua的綁定。
而Unity和Unreal,開發者可以通過函數導出的方式綁定Lua接口。
JS(適用于Cocos)?
在Cocos引擎中,開發者可以直接在JS代碼中使用GPM SDK提供的API進行打點。Cocos中GPM SDK會自動完成C和JS的綁定。
GPM 2.0「卡頓幀堆棧」功能為游戲研發團隊提供了精準、直觀的卡頓分析能力,讓開發者能夠快速鎖定卡頓根因,優化游戲性能。無論是Unity還是其他游戲引擎,都可以通過自動或手動打點的方式,深入剖析各個環節的性能開銷。如果你對游戲性能優化有更高要求,不妨試試GPM 2.0,讓你的游戲體驗更流暢!
關于GPM 2.0
GPM 2.0 是一款專為上線或測試階段的游戲項目打造的高效性能監測工具。它不僅深入捕捉宏觀性能數據,還通過其獨特的性能無損截圖功能,讓開發者在不影響玩家體驗的前提下,全面掌握玩家運行時的關鍵細節,從多個維度優化游戲的性能表現,提升整體用戶體驗。
如果您的項目也希望體驗GPM 2.0的強大功能,歡迎隨時與UWA取得聯系。我們將為您提供免費試用機會,并在試用期間全程支持服務搭建、數據分析與反饋,確保您能夠充分體驗GPM 2.0帶來的價值。
聯系UWA:
郵件:sales@uwa4d.com
微信號:17502188376
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.