メインコンテンツまでスキップ

標準プロファイリング

Last updated on November 15, 2024

概要

BlackBox と CLI を使用して、ゲームセッションとテストから得たパフォーマンスデータを保存、表示できます。テストでは、フレームごとのパフォーマンス統計データを記録し、JSON ファイルで出力を生成できます。その設定方法を説明します。

パフォーマンステスト出力

パフォーマンステストには 2 種類の出力があります。

  1. UE4 ログ:このログは、コマンドラインで実行するとコマンドラインに、UE4 Editor で実行すると UE4 ログウィンドウに表示されます。デフォルトでは、ログは以下の場所に保存されます。
 \<ProjectRoot>\ProjectName\Saved\Logs
  1. 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 は、このフレームで記録された fps
  • physical_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);