38 lines
2.0 KiB
C++
38 lines
2.0 KiB
C++
#include "IronsPerformanceSubsystem.h"
|
|
#include "Misc/AutomationTest.h"
|
|
#include <limits>
|
|
|
|
#if WITH_DEV_AUTOMATION_TESTS
|
|
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FIronsPerformanceWindowTest,"IRONSPORE.Performance.RollingWindow",EAutomationTestFlags::EditorContext|EAutomationTestFlags::EngineFilter)
|
|
bool FIronsPerformanceWindowTest::RunTest(const FString& Parameters)
|
|
{
|
|
FIronsPerformanceWindow W;
|
|
W.Add(10,.01,1,2,3,4);W.Add(10.03,.03,3,4,5,6);
|
|
auto S=W.Read(10.03);
|
|
TestEqual(TEXT("FPS uses total elapsed time, not average reciprocal"),S.Fps,50.0);
|
|
TestEqual(TEXT("Frame time in milliseconds"),S.FrameMs,20.0);
|
|
TestEqual(TEXT("CPU samples averaged independently"),S.GameMs,2.0);
|
|
W.Add(11.2,.02,5,6,-1,-1);S=W.Read(11.2);
|
|
TestEqual(TEXT("Expired samples removed"),S.Samples,1);
|
|
TestTrue(TEXT("Unavailable GPU does not retain last valid number"),S.GpuMs<0);
|
|
TestTrue(TEXT("Disabled RHI thread is unavailable"),S.RhiMs<0);
|
|
TestEqual(TEXT("An idle CPU may legitimately measure zero"),[&](){W.Add(11.22,.02,0,0,0,0);return W.Read(11.22).GpuMs;}(),0.0);
|
|
TestTrue(TEXT("A stale window produces no FPS"),W.Read(13).Fps<0);
|
|
return true;
|
|
}
|
|
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FIronsPerformanceClockTest,"IRONSPORE.Performance.ClockAndValidity",EAutomationTestFlags::EditorContext|EAutomationTestFlags::EngineFilter)
|
|
bool FIronsPerformanceClockTest::RunTest(const FString& Parameters)
|
|
{
|
|
FIronsPerformanceWindow W;const double Nan=std::numeric_limits<double>::quiet_NaN();
|
|
W.Add(1,0,1,2,3,4);W.Add(1,Nan,1,2,3,4);
|
|
TestEqual(TEXT("Invalid frame intervals rejected"),W.Read(1).Samples,0);
|
|
W.Add(2,.02,Nan,2,-1,Nan);
|
|
TestTrue(TEXT("Invalid timings unavailable"),W.Read(2).GameMs<0&&W.Read(2).GpuMs<0);
|
|
W.Add(1,.5,1,2,3,4);
|
|
TestEqual(TEXT("Backwards clock starts a new timeline"),W.Read(1).Samples,1);
|
|
TestEqual(TEXT("Wall clock remains meaningful during gameplay pause"),W.Read(1).Fps,2.0);
|
|
W.Reset();TestTrue(TEXT("Travel reset clears old numbers"),W.Read(1).Fps<0);
|
|
return true;
|
|
}
|
|
#endif
|