C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4/C++: Stats ( Profiler ) 機能の組み込みと使い方メモ

Runtime/Core/Public/Stats/Stats.h で宣言・定義される Stats ( Profiler ) 機能を C++ コードに仕込んで UE4Editor のプロファイラーでお手軽に負荷など調べる方法のメモ。

仕込み

// MySourceFile.h
#pragma once
#include "CoreMinimal.h"

// 略
// MySourceFile.cpp
#include "MySourceFile.h"

// グループ定義
DECLARE_STATS_GROUP( TEXT( "MySomething" ), STATGROUP_MySomething, STATCAT_Advanced );
// 具体的な計測項目の定義。複数使いたければ使いたいだけ定義する
DECLARE_CYCLE_STAT( TEXT( "AMySomething::DoSomething" ), STAT_MySomething_DoSomething , STATGROUP_MySomething);

// 略

void AMySomething::DoSomething()
{
  SCOPE_CYCLE_COUNTER( STAT_MySomething_DoSomething );
  // ↑のスコープが終わるまでが記録される
}

使い方

記録をファイルへ取る

UE4Editor の Output Log の Cmd または Development/Debug で自動的にゲームに組み込まれるコンソール機能に

  • 記録開始: stat startfile
  • 記録終了: stat stopfile

を投げる。ファイルは実行状態に併せて自動的に命名されて、プロジェクトのディレクトリー以下の Saved/Profiling/UnrealStats/ 以下によしなに保存される。ファイルの拡張子は .ue4st

f:id:USAGI-WRP:20180819165327p:plain

記録したファイルを見る

  1. UE4Editor のメニューから Window > Developer Tools > Session Frontend を表示
  2. Session Frontend ウィンドウ内の Profiler タブを表示
  3. Profiler タブ内の Load ボタンから記録ファイルを開く

f:id:USAGI-WRP:20180819165222p:plain

付記事項

  • UE4のログマクロなどと同じ形式で複数ファイルへ跨って使用したい場合には必要に応じて DECLARE_CYCLE_STAT_EXTERN を使う。(参考2)

参考

  1. Profiling, How To Count CPU Cycles Of Specific Blocks Of Your Game Code - Epic Wiki
  2. Custom Profiler Stats - UE4 AnswerHub