標準プロファイリング
Last updated on November 15, 2024
概要
BlackBox と CLI を使用して、ゲームセッションとテストから得たパフォーマンスデータを保存、表示できます。テストでは、フレームごとのパフォーマンス統計データを記録し、JSON ファイルで出力を生成できます。その設定方法を説明します。
パフォーマンステスト出力
パフォーマンステストには 2 種類の出力があります。
- UE4 ログ:このログは、コマンドラインで実行するとコマンドラインに、UE4 Editor で実行すると UE4 ログウィンドウに表示されます。デフォルトでは、ログは以下の場所に保存されます。
\<ProjectRoot>\ProjectName\Saved\Logs
- BlackBox ログファイル:テストでは、n 個の BlackBox ログファイルが生成されます。各ファイルには、ゲームのあるレベルでのテスト結果が含まれています。ファイルは JSON 行形式です。BlackBox ログファイルのレイアウトは次のとおりです。
<header>
---
<body>
UE4 自動テストが実行されるたびに、BlackBox ログファイルが生成されます。パスは以下のように任意の場所となり、後で BlackBox CLI でファイルをアップロードする際に使用します。
\<ProjectRoot>\ProjectName\Saved\AutomationTest\PerformanceTest\PerformanceTest_Windows_Level1.json
BlackBox ログファイル
テスト結果ヘッダー
<header>
部分は次のとおりです。
{
"@encoding": "blackbox/performancetest+json.v1.0.1"
}
"@encoding"
は、この BlackBox ログファイルのエンコーディングバージョンです。このエンコーディングにより、BlackBox ウェブポータルはこのファイルの形式を認識できます。
テスト結果の本文
<body>
部分は次のようになります。
{map: "", location: "", frame_no: "", total_run_time: ", "frame_time: "", game_time: "", gpu_time: "", draw_time: "", fps: "", physical_memory_usage: ""}
map
は、現在のテストのレベル名location
は、現在の行が生成されたマップ内の場所名frame_no
は、現在のテストのフレーム番号 (0 から開始)total_run_time
は、テストに費やされた合計時間frame_time
は、各フレーム間の時間 (単位は ms)game_time
は、CPU が現在のフレームをレンダリングするのに必要な時間 (単位は ms)gpu_time
は、GPU が現在のフレームをレンダリングするのに必要な時間 (単位は ms)draw_time
は、GPU へのドローコールを実行するのに必要な時間 (単位は ms)fps
は、このフレームで記録された fpsphysical_memory_usage
は、このフレームで記録されたメモリ使用量
テスト結果の例
以下はシンプルな BlackBox ログファイルの例です。ファイルはこの形式に従います。
{
"@encoding": "blackbox/performancetest+json.v1.0.1", "location": "Level_1"
}
---
{"map":"Escape_Persistent","location":"StartOfLevel","frame_no":1,"total_run_time":9.1677160263061523, "frame_time":916.7716064453125,"game_time":24.550630569458008,"gpu_time":794.19097900390625,"draw_time":0.092030003666877747,"fps":1.0907841920852661,"physical_memory_usage":12586881024}
{"map":"Escape_Persistent","location":"StartOfLevel","frame_no":2,"total_run_time":10.1677160263061523, "frame_time":1078.765869140625,"game_time":48.986068725585938,"gpu_time":1041.8829345703125,"draw_time":0.21141700446605682,"fps":0.92698520421981812,"physical_memory_usage":12632846336}
{"map":"Escape_Persistent","location":"Helipad","frame_no":3,"total_run_time":11.1677160263061523, "frame_time":1062.9801025390625,"game_time":54.457942962646484,"gpu_time":1264.8056640625,"draw_time":0.31886529922485352,"fps":0.94075137376785278,"physical_memory_usage":12636585984}
---
{"test_id": "25D53E184192CDEA948125A38F6D0920"}
フレーム統計データを取得する
UE4 フレーム統計データを取得する方法として、以下を推奨します (抜粋元:UnrealClient.cpp)。
フレーム時間
const float RawFrameTime = (FApp::GetCurrentTime() - FApp::GetLastTime()) * 1000.f;
if (FrameTime == 0.0f) FrameTime = RawFrameTime;
else FrameTime = 0.9 * FrameTime + 0.1 * RawFrameTime;
ゲーム時間
const float RawGameTime = FPlatformTime::ToMilliseconds(GGameThreadTime);
if (GameThreadTime == 0.0f) GameThreadTime = RawGameTime;
else GameThreadTime = 0.9 * GameThreadTime + 0.1 * RawGameTime;
GPU 時間
const float RawGPUFrameTime = FPlatformTime::ToMilliseconds(GGPUFrameTime);
if (GPUFrameTime == 0.0f) GPUFrameTime = RawGPUFrameTime;
else GPUFrameTime = 0.9 * GPUFrameTime + 0.1 * RawGPUFrameTime;
描画時間
const float RawDrawTime = FPlatformTime::ToMilliseconds(GRenderThreadTime);
if (DrawTime == 0.0f) DrawTime = RawDrawTime;
else DrawTime = 0.9 * DrawTime + 0.1 * RawDrawTime;
フレーム/秒 (FPS)
float fps = 1000.0f / FMath::Clamp(FrameTime, 0.00001f, FLT_MAX));
物理メモリ使用量
Int64 PhysicalMemoryUsage = int64(FPlatformMemory::GetStats().UsedPhysical);