1. 执行代码耗时时间
doubleThisTime=0; { SCOPE_SECONDS_COUNTER(ThisTime); // ...// 一串代码// ...} UE_LOG(LogTemp, Log, TEXT("Stats::Broadcast %.2f"), ThisTime);
这样就可以输出这一段代码消耗时间,此方法会捕获时间(以秒为单位传递),并将增量时间添加到传入的变量。
2. 函数每帧监控
在一些函数是每帧都要执行的时候,那就可以用UE的统计系统来显示,这样更方便。
先在CPP定义一个自定义监听组
DECLARE_STATS_GROUP(TEXT("DTActor"), STATGROUP_DTActor, STATCAT_Test);
这样启动程序的时候, 就可以看到自己定义的组
然后需要定义函数监听模块
DECLARE_CYCLE_STAT(TEXT("DTActor Tick"), STAT_Tick, STATGROUP_DTActor); DECLARE_CYCLE_STAT(TEXT("DTActor Call"), STAT_Call, STATGROUP_DTActor);
并在相应的函数中启动相应模块
voidADTActor::Tick(floatDeltaTime) { SCOPE_CYCLE_COUNTER(STAT_Tick); Super::Tick(DeltaTime); } voidADTActor::Call() { SCOPE_CYCLE_COUNTER(STAT_Call); }
这样在运行关卡的时候就会显示函数的具体执行时间
以下是这个Actor的完整代码,可以自己测试一下。
DTActor.h
// Copyright 2023 Dexter.Wan. All Rights Reserved. // EMail: 45141961@qq.com// Website: https://dt.cq.cn/UCLASS() classDTMOVIE_APIADTActor : publicAActor{ GENERATED_BODY() public: ADTActor(); protected: virtualvoidBeginPlay() override; public: virtualvoidTick(floatDeltaTime) override; voidCall(); };
DTActor.cpp
// Copyright 2023 Dexter.Wan. All Rights Reserved. // EMail: 45141961@qq.com// Website: https://dt.cq.cn/DECLARE_STATS_GROUP(TEXT("DTActor"), STATGROUP_DTActor, STATCAT_Test); DECLARE_CYCLE_STAT(TEXT("DTActor Tick"), STAT_Tick, STATGROUP_DTActor); DECLARE_CYCLE_STAT(TEXT("DTActor Call"), STAT_Call, STATGROUP_DTActor); ADTActor::ADTActor() { PrimaryActorTick.bCanEverTick=true; } voidADTActor::BeginPlay() { Super::BeginPlay(); } voidADTActor::Tick(floatDeltaTime) { SCOPE_CYCLE_COUNTER(STAT_Tick); Super::Tick(DeltaTime); FStringS; for ( intn=0; n<50000; ++n ) { S+=TEXT("1"); } Call(); Call(); } voidADTActor::Call() { SCOPE_CYCLE_COUNTER(STAT_Call); FStringS; for ( intn=0; n<50000; ++n ) { S+=TEXT("1"); } }
80后程序员