언리얼 스크립트의 함수호출 프로파일링에 대해 다룬다.
스크립트 프로파일링은 FScriptCallGraph 클래스에 의해 수행된다.
struct FScriptCallGraph { ... void Reset( DWORD InSoftMemoryLimit = 0 ); // 수집된 정보를 리셋하고 다시 수집한다. void Serialize( FArchive& Ar ); // 수집된 정보를 파일로 저장 void Tick( FLOAT DeltaTime ); // 틱 ... TArray<PTRINT> Data; // 스크립트 함수 호출에 대한 정보를 담을 배열 };
이 클래스는 처음엔 인스턴스를 생성하지 않다가 인게임에서 특정 커맨드를 입력하면 인스턴스가 생성되고 프로파일링을 시작한다.
void UGameEngine::Tick( FLOAT DeltaSeconds ) { ... if ( GScriptCallGraph ) { GScriptCallGraph->Tick( DeltaSeconds ); // 인스턴스가 있다면 정보를 수집한다. } ... }
위에서 언급한 특정 커맨드는 아래와 같다. 틸트(`) sk 탭(TAB) 을 누르고 아래 커맨드를 입력한다.
위 커맨드를 수행하는 코드는 아래와 같다.
UBOOL UObject::StaticExec( const TCHAR* Cmd, FOutputDevice& Ar ) { ... else if ( ParseCommand( &Str, TEXT("PROFILESCRIPT") ) || // PROFILESCRIPT 나 ParseCommand( &Str, TEXT("SCRIPTPROFILER") ) ) // SCRIPTPROFILER 커맨드를 입력하고 { if ( ParseCommand( &Str, TEXT("START") ) ) // 파라메터가 START 라면 { ... // GScriptCallGraph 인스턴스 생성 } else if ( ParseCommand( &Str, TEXT("STOP") ) ) // 파라메터가 STOP 라면 { ... // GScriptCallGraph 인스턴스 소멸 } else if ( ParseCommand( &Str, TEXT("RESET") ) ) // 파라메터가 RESET 이라면 { ... // 리셋 } } ... }
프로파일링을 하면 [ProjectName]\Profiling\Script\[MapName]-PC-[날짜]-[시간]\ 디렉토리 하위에 .uprof 파일이 생성된다.
이 파일은 스크립트 함수 호출에 대한 프로파일링 정보를 담고 있다.
Binaries\ueScriptProfiler.exe 를 실행하여 이 파일을 열고 각종 정보를 조회할 수 있다. 자세한 사항은 여기서 확인