Profiler工具的代碼詳見:UnrealEngine\Engine\Source\Developer\Profiler
UE4提供了2種使用Profiler工具的方式:
① UE4編輯器中的Session Frontend面板,見菜單“Window” -- “Developer Tools” -- “Session Frontend”

② 獨立的UnrealFrontend工具

離線模式
控制台命令抓取性能數據並保存到文件
stat startfile // starts a stats capture, creating a new file in the Profiling directory; stop with stat StopFile to close the file
stat stopfile // stops dumping a capture (regular, raw, memory). finishes a stats capture started by stat StartFile
stat startfileraw // starts dumping a raw capture. 4.26版本可以生成ue4statsraw文件,但是Profiler工具不能支持該文件的讀取 注:詳見FProfilerManager::LoadRawStatsFile函數
stat stopfileraw // 功能與stat stopfile一致
UE4Editor.exe "%GameDir%\MyGame.uproject" TestMap_Main -game -ExecCmds="stat startfile" // 啟動游戲后,然后執行stat startfile命令

ue4stat文件保存在:Saved\Profiling\UnrealStats目錄中
在代碼中開啟和關閉stat文件
#if STATS DirectStatsCommand(TEXT("stat startfile")); #endif #if STATS DirectStatsCommand(TEXT("stat stopfile"),true); #endif
Profiler工具讀取性能數據
在Frontend工具中的Profiler標簽下,點擊Load來讀取ue4stat文件
也可以點擊Load Folder來加載某個目錄下的所有ue4stat文件

注:紅框處會列出所有的ue4stat文件, 點擊即可切換
實時模式
首先需要在uproject文件中啟用TcpMessaging、UdpMessaging插件 注:默認會啟用,但uproject中可將其關閉
本機或USB數據線的連接模式
游戲側
UE4Editor.exe %GameDir%\MyGame.uproject -skipcompile // 編輯器
UE4Editor.exe %GameDir%\MyGame.uproject ThirdPersonExampleMap -messaging -SessionName=mySession -game -skipcompile // standalone單擊 對本機或USB數據線連接的機器上的UnrealFrontend可見
Profiler工具側
UE4Editor.exe %GameDir%\MyGame.uproject -skipcompile
UnrealFrontend.exe
同一wifi網絡的連接模式
游戲側
PC:UE4Editor.exe %GameDir%\MyGame.uproject ThirdPersonExampleMap -messaging -SessionName=mySession -TcpMessagingConnect=10.46.80.61:7777 -game -skipcompile // 以standalone啟動ThirdPersonExampleMap地圖,並連接到10.46.80.61:7777
Android:UE4CommandLine.txt寫入如下內容,並adb push到手機的UE4Game/UAGame目錄中
-messaging TcpMessagingConnect=10.46.80.61:7777 -SessionOwner=kekec -SessionName=fps1
IOS:ue4commandline.txt(注:要全小寫)寫入與Android一樣的內容,並放到如下目錄中


Profiler工具側
UE4Editor.exe %GameDir%\MyGame.uproject -TcpMessagingListen=10.46.80.61:7777 -SessionOwner=kekec -skipcompile // 啟動編輯器並監聽10.46.80.61:7777 注:10.46.80.61為編輯器所在機器的IP kekec為當前計算機的登錄用戶名
UnrealFrontend.exe -TcpMessagingListen=10.46.80.61:7777 -SessionOwner=kekec // 啟動UnrealFrontend.exe並監聽10.46.80.61:7777 注:10.46.80.61為UnrealFrontend所在機器的IP kekec為當前計算機的登錄用戶名
實時Profiler

為tips觸發區域,鼠標放置上去,會顯示更詳細的信息說明

Load:加載一個ue4stats文件
Load Folder:加載一個目錄下的所有ue4stats文件
Data Preview:在左側選中一個Session后, 點擊該按鈕可實時profiler
Live preview:讓下面的GR紅藍條、Graph View條Scroll到最新幀
Data Capture:startfile / stopfile
Statistics:開啟Stats Profiler
FPS Chart:統計整個文件的fps分布

面板其他功能說明

GR紅藍條說明
① 紅色為Game Thread的耗時(含Waiting那部分時間) -- 即FrameTime
② 藍色為Rendering Thread的耗時(含Waiting那部分時間)
③ 通過紅藍條的高度,可快速找到耗時的區域部分
Graph View說明
① 雙擊左邊Panel中的統計細項,會在Graph View上繪制出其各幀的數值曲線
② (Threads) GameThread [0x1d3b] 24.06(MS)/Calls 1 - {Value Min:22.796 Avg:45.743 Max:1857.557(MS) / Calls (100%) Min:1.0 Avg:1.0 Max:1.0}
③ 數值曲線下面的時間信息(907.7s、921.6s、934.7s 。。。)是錯誤的
Stat統計項
所有統計大類如下:

Group Name為Memory的統計細項如下:

統計項類型:
為hierarchy類別,可以嵌套子節點,包含CallCount、InclusiveTime、ExclusiveTime等字段
為int或float數字類型
為Memory類型
hierarchy類別數據CallStack

工具欄說明:
① Type有:OneFrame(選中一幀時) Average、Maximum(拉框選中一個區域時)
② View mode:Hierarchical(層次樹,按Inc Time排序)、
Inclusive(Flat方式,按Inc Time排序)、Inclusive(Flat方式,同名統計項合並在一起,按Inc Time排序)
Exclusive(Flat方式,按Exc Time排序)、Exclusive(Flat方式,同名統計項合並在一起,按Exc Time排序)
③
幀選擇的Undo、Redo
④
快速展開選中節點Inc Time消耗最高的路徑
其他區域說明:
① 在Event Name層次樹中的統計項均為hierarchy類別。背景色越紅,說明該項的Inc Time(MS)就越高,耗時也就越高
② IncTime的兩列為包含時間,Exc Time的兩列為獨占時間,數據為0,是顯示問題;Calls為當前幀該項統計次數
③ Event Name層次樹的頂層節點均為Thread。如:StatsThread [0x1d83] 其中StatsThread為線程名,0x1d83為16進制的線程ID
④ 可先通過Thread下拉框選擇自己感興趣的線程,那么其他線程就會變灰;重新選做None后,就全部恢復正常
⑤ 在Event Name層次樹中,選中一個節點后,左邊Calling Functions下會畫出父節點的按鈕,點擊后,會往頂層回溯;中間Current Function為選中節點;
右邊Called Functions下會畫出所有子節點的按鈕,點擊后,會往下回溯;名為Self的子節點比較特殊,它的Inc Time(MS)表示其父節點的獨占時間。
右鍵快捷菜單和快捷鍵說明:
① Expand All(展開所有子節點) --> Ctrl + A(全選)
② 按住Ctrl或Shift來快速多選
③ Select Stack:向頂層回溯,選中整個Stack
④ Copy To Clipboard(快捷鍵為Ctrl + C):可以將選中的節點拷貝到剪切板中
參考
