게임 엔진/Unreal

[Unreal] 코드 단위 프로파일링 (Profile)

AlgorFati 2020. 6. 1. 01:25

Profile In Code

언리얼 개발 과정중 소스코드 단위로 프로일링이 필요한 상황이 올 수 있다.

이를 대비하여 언리얼 엔진에서 지원해주는 기능이 있다.

 

 

프로파일링을 위한 그룹 선언

먼저 프로파일링 그룹을 선언한다. 

DECLARE_STATS_GROUP(TEXT("Sample"), STATGROUP_Sample, STATCAT_Advanced);

 

프로파일링 영역 설정을 위한 개체 선언

코드 영역에 적용하기 전에 영역 개체를 정의한다.

DECLARE_CYCLE_STAT(TEXT("Agent [Tick]"), STAT_AgentTick, STATGROUP_Sample);


프로파일링 대상 영역에 적용

이제 프로파일링 대상 영역에 적용한다.

void ACharacterAgent::Tick(float DeltaTime)
{
	// 현재 포함된 블록에 대한 프로파일링을 시작한다.
	// Actor가 여러번 생성된다면 모든 actor들의 Tick함수 내의 성능을 종합하여 프로파일링 한다.
	SCOPE_CYCLE_COUNTER(STAT_AgentTick)
	;

	Super::Tick(DeltaTime);
	UpdateAgent(DeltaTime);
}

 

프로파일링 과정 확인

언리얼 게임 내에서 프로파일링 과정을 확인할 필요가 있을 것이다.

먼저 ` 키를 눌러 커맨드창을 연다.

그리고 다음 커맨드를 입력한다.

stat Sample

다음과 같이 표시된다.

주의할 점은 프로파일링 과정을 화면에 표시해주는 것 자체가 또 성능을 잡아먹기 때문에,

다음 커맨드를 통해 프로파일링 렌더링 과정으로 얼마나 성능이 변하는지 확인할 필요가 있다.

stat Engine

 

 

Profile Command

Unreal Editor에서 다음 커맨드를 통해 시간이 오래걸리는 프레임만 선별적으로 추적할 수 있다.

stat dumphitches

 

 

Stat 파일 저장하기

다음 커맨드를 이용해서 특정 구간의 stat을 뽑아볼 수 있다.

stat startfile
..
stat stopfile

Saved/Profiling/UnrealStats 하위에 ue4stats 파일이 저장된다.

에디터에서는 창 > 개발자 툴 > 세션 프론트엔드 에서 프로파일 탭으로 가면 stat 파일을 볼 수 있다.

혹은 Engine/Binaries/Win64/UnrealFrontend.exe 로 이 파일을 볼 수 있다.

 

 

 

시행착오

StatGroup은 반드시 cpp에 정의해야한다. StatGroup이 헤더에 선언되는 경우, 동시에 여러 cpp가 같은 헤더를 사용하면서 Group이 여러번 정의될 수 있다. 그러므로 반드시 cpp에 한번만 선언하도록 한다. 그 후, 여러 곳에서 사용하도록 하려면 다음 과 같은 우회방법을 이용한다.

#ifndef STATGROUP_AI_IMPL
#define STATGROUP_AI_IMPL
DECLARE_STATS_GROUP(TEXT("AI"), STATGROUP_AI, STATCAT_Advanced);

#endif