UE4性能Profile的各种方式

Profile渲染阶段时间--stat scenerendering

在RenderCore(.h,.cpp)声明定义profile字段,加入到局部函数,可以通过stat scenerendering指令来打印出相应时间

Profile CPU执行事件

stat相关声明

声明stat Group

DECLARE_STATS_GROUP(TEXT("TestTime"), STATGROUP_TestTime, STATCAT_Advanced);

声明stat Group下的具体标记

DECLARE_STATS_GROUP(TEXT("TestTime"), STATGROUP_TestTime, STATCAT_Advanced);
DECLARE_CYCLE_STAT(TEXT("TestMyActorTick"), STAT_TestMyActorTick, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCal"), STAT_TestMyActorCal, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCount"), STAT_TestMyActorCount, STATGROUP_TestTime);

SCOPE_CYCLE_COUNTER给一段程序打上标记,从标记到从该段程序退出的时间则为这个标记执行的事件

stat使用例子

来一个例子,下面的actor tick做了两次累加函数,用三个标记分别标记Tick, Test, Test1三个函数。

DECLARE_STATS_GROUP(TEXT("TestTime"), STATGROUP_TestTime, STATCAT_Advanced);
DECLARE_CYCLE_STAT(TEXT("TestMyActorTick"), STAT_TestMyActorTick, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCal"), STAT_TestMyActorCal, STATGROUP_TestTime);
DECLARE_CYCLE_STAT(TEXT("TestMyActorCount"), STAT_TestMyActorCount, STATGROUP_TestTime);

UCLASS()
class TESTHOUDINIPROJECT_API AMyActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AMyActor();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;


	UPROPERTY(EditAnywhere)
		int32 Count1;

	UPROPERTY(EditAnywhere)
		int32 Count2;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

private:
	void Test(int32 Count);
	void Test1(int32 Count);

};
void AMyActor::Tick(float DeltaTime)
{
	SCOPE_CYCLE_COUNTER(STAT_TestMyActorTick);
	Super::Tick(DeltaTime);
	Test(Count1);
	Test1(Count2);

}

void AMyActor::Test(int32 Count)
{
	SCOPE_CYCLE_COUNTER(STAT_TestMyActorCal);

	int64 Total = 0;

	for (int32 Index = 0; Index < Count; ++Index)
	{
		Total += 1;
	}

}

void AMyActor::Test1(int32 Count)
{
	SCOPE_CYCLE_COUNTER(STAT_TestMyActorCount);

	int64 Total = 0;

	for (int32 Index = 0; Index < Count; ++Index)
	{
		Total += 1;
	}
}

从Count2 = 3Count1推测 Time(Test1) = 3Time(Test)

Stat TestTime

Stat TestTime可以探查STATGROUP_TestTime这个组的所有标记阶段执行事件

 Stat StartFile &  Stat StopFile

 Stat StartFile &  Stat StopFile是执行CPU执行事件片段的命令, Stat StartFile开始执行CPU执行事件抓取,Stat StopFile结束抓取CPU执行事件片段,并生成一个统计文件。

 

 Tools->SessionFrontend打开Profile工具

 点Load按钮对目标统计文件加载

 统计组: 可以查看对应标记组之下每个标记在整个统计阶段的Min/Avg/Max执行时间

 

 统计事件列表: 选中某一帧之后,可以查看一帧数下各个标记执行的时间

 从上面可以看出TestMyActorTick花了6.528ms

 可以看到TestMyActorCount标记的Test1函数执行时间差不多是TestMyActorCal执行函数Test的三倍。

[1]这里得注意的是上面图显示是这个标记执行的总时间,而非是执行一次这个标记的时间,假设你调用100次被标记函数的循环,这个标记执行的时间 = 100次这个函数执行总时间。

[2]Self表示当前函数内除了函数内的所有标记外的执行时间

参考资料

[1]https://docs.unrealengine.com/5.0/zh-CN/stat-commands-in-unreal-engine/​​​​​​​

 

猜你喜欢

转载自blog.csdn.net/qq_29523119/article/details/123606732