UE-15405 Add columns in the FPS charts to track time spent running above 60 fps. This used to be reflected in the 60-INF column, but was lost when we added data for up to 120FPS.

Removed some redundant STAT enums and declarations.

[CL 2552320 by Michael Troughton in Main branch]
This commit is contained in:
Michael Troughton
2015-05-15 05:38:02 -04:00
committed by Michael.Troughton@epicgames.com
parent cbf02f1172
commit 45e253c182
7 changed files with 112 additions and 171 deletions
+5 -4
View File
@@ -11742,8 +11742,8 @@
<File Name="Engine/Content/Splash/Splash.bmp" Hash="d2e697f13f6dbb497c44fb7ae5cfef1691995795" />
<File Name="Engine/Content/Splash/SplashDefault.bmp" Hash="1cde791c0abf8edc045ba69d948f242200e59a5a" />
<File Name="Engine/Content/Stats/FPSChart_Postamble.html" Hash="1425522d6ca07e5f03871ee80ac7e121950da24b" />
<File Name="Engine/Content/Stats/FPSChart_Preamble.html" Hash="591bf7986b6956994f16cf552d0b56c9d923be81" />
<File Name="Engine/Content/Stats/FPSChart_Row.html" Hash="de4617882f1f76519cce6343e78e3cc755fc3abd" />
<File Name="Engine/Content/Stats/FPSChart_Preamble.html" Hash="9cbe885462befe72ebbda319a7832f37e99b8a54" />
<File Name="Engine/Content/Stats/FPSChart_Row.html" Hash="1b8c6cfc780d767f26cb0a2edf1c9bbb610825cf" />
<File Name="Engine/Content/TemplateResources/M_Template_Master.uasset" Hash="c017f7e26ba7bfc0df70c5995cd792a5ad9b1260" />
<File Name="Engine/Content/TemplateResources/MI_Template_BaseBlue.uasset" Hash="8eb966f3400f2c787f45f6bc26355470da248b8c" />
<File Name="Engine/Content/TemplateResources/MI_Template_BaseBlue_Metal.uasset" Hash="04fa3deff8d627540c6a8938a623423055bb200f" />
@@ -20646,6 +20646,7 @@
<Blob Hash="1b7d51b2405c0595b24f9faa29a12a9e6835f16a" Size="301056" PackHash="43a0ea133ffa1d2960f842b8700ae72df8b5b02b" PackOffset="638472" />
<Blob Hash="1b7fce1af93d2375ce8db1e0ae110b42a711c7e2" Size="1486648" PackHash="41d5dc73ef01e6cc21c028fba64a655a4f2d3d52" PackOffset="8" />
<Blob Hash="1b8bbfb05dcd2a15a783c9a5b44471a9bc34b3dc" Size="104034" PackHash="5a668ab8aef15368ff281ed35e8f730cc8ec5c7f" PackOffset="1980011" />
<Blob Hash="1b8c6cfc780d767f26cb0a2edf1c9bbb610825cf" Size="3830" PackHash="1d539ea893f32e7179729502fb112faf4cc3e72a" PackOffset="4683" />
<Blob Hash="1b8f3d0bda334f7577a398eb9dc93753e2796a66" Size="202" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="2075754" />
<Blob Hash="1ba1a5e59b03c7afdf058a5df504a528098028a0" Size="2208" PackHash="fe94f39680410922eeef278b013e20b5ee27e7fe" PackOffset="2087587" />
<Blob Hash="1baf21e2e74f1812b91f6fa2d9fc13967b5ffc1b" Size="120054" PackHash="02f911003167be7b08c3fbf9bdababa124958f48" PackOffset="1001022" />
@@ -23636,7 +23637,6 @@
<Blob Hash="5915c0ee9a29934f06df75ed61ebd1371cca35d4" Size="4022" PackHash="fc72803a9439e161de25108be11e5429ed900f77" PackOffset="279015" />
<Blob Hash="591619fd62beb3c6a513ef4ec990e632dd827463" Size="5643830" PackHash="aa345355b8405e03657b06bf35000a46236d8364" PackOffset="8" />
<Blob Hash="591a8e748a2459007571b2564788302789fda281" Size="3284" PackHash="e458507f455e3bac9232d632426fc4b75f29841d" PackOffset="1959038" />
<Blob Hash="591bf7986b6956994f16cf552d0b56c9d923be81" Size="4615" PackHash="2bcec4000ed6b5dca15e523c7c0828dc1eaa8474" PackOffset="1960780" />
<Blob Hash="591efd7a88812da97d65178525420cea31f1df4c" Size="222" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="1509938" />
<Blob Hash="592379f70076483559bfe7fc18e4f1942d6ddb85" Size="508" PackHash="b8e153475935a408d91ca55c8e98030d5cc99ceb" PackOffset="406922" />
<Blob Hash="59241c2addda756b6212569be1f378547d5d06d5" Size="828" PackHash="01e6c01a96b3cbe860204f191d1b9153509a9dee" PackOffset="2090809" />
@@ -27002,6 +27002,7 @@
<Blob Hash="9cb1359b7f7fafa91ddaca0b61c7352b188cbe6f" Size="1426772" PackHash="d3fa6eb331487a41362af20fc809e610469ecc14" PackOffset="8" />
<Blob Hash="9cb21b3dab02a7f3161048c6f3990e5854431c29" Size="11264" PackHash="b8e153475935a408d91ca55c8e98030d5cc99ceb" PackOffset="307720" />
<Blob Hash="9cb7dce0d633e1982acbd0243477d5d0a4d8bd18" Size="6492" PackHash="4905bf362dac5be04631d1ce552b8184a6f9eb7f" PackOffset="947776" />
<Blob Hash="9cbe885462befe72ebbda319a7832f37e99b8a54" Size="4675" PackHash="1d539ea893f32e7179729502fb112faf4cc3e72a" PackOffset="8" />
<Blob Hash="9cc2d83a0711222ef2f399b2016a41fd858a68aa" Size="5118" PackHash="fc72803a9439e161de25108be11e5429ed900f77" PackOffset="270761" />
<Blob Hash="9cc4a03a6487f9c6b321a419185b9cf1ba9d5c71" Size="100" PackHash="33d0a2949662b327b35a881192e85107ecafc8ac" PackOffset="1806344" />
<Blob Hash="9cca20c9b15ac2c8e2a1d0ea13a95ffa34b9c332" Size="2985" PackHash="4f9629d19fa7928aaae10e4bb7c79195fb4f2436" PackOffset="90769" />
@@ -30211,7 +30212,6 @@
<Blob Hash="de3ed34d55007075b2a82c61a1f9deacdd66c9cf" Size="7460" PackHash="b7e5e66ec2b311c32f25563c90d3883eaf9d7f01" PackOffset="1200248" />
<Blob Hash="de40ff310047b859251ff3a6eb604165a51950fe" Size="2880" PackHash="bad3d27e656261f89d7bfe9409032b1623077a17" PackOffset="1076286" />
<Blob Hash="de412293e96cc310e19b16a96068c282d244d88a" Size="217" PackHash="c96e9cd94a86b222bed132142b65c1d90314445d" PackOffset="1451621" />
<Blob Hash="de4617882f1f76519cce6343e78e3cc755fc3abd" Size="3766" PackHash="2bcec4000ed6b5dca15e523c7c0828dc1eaa8474" PackOffset="1965395" />
<Blob Hash="de4bfc51163537c4f9c925f65a4561542e8c470f" Size="6158" PackHash="9bfa76eaf50a585e99981b54ef5628fd89b397e7" PackOffset="1959868" />
<Blob Hash="de4cd80a32bd4d7a9cb8466e6cdc21f5811830c7" Size="453" PackHash="86a3ef300ab5182d7d6f3c7e1dec1ab017621176" PackOffset="2090669" />
<Blob Hash="de68876e20325c15c89f4ea2cedd04f79454604a" Size="120197" PackHash="fb2f45c1b474e2679885e63284e9ad5fb4d0f976" PackOffset="1895039" />
@@ -32010,6 +32010,7 @@
<Pack Hash="1ce933b4731d07d18548a668fca861035354bbf2" Size="2097123" CompressedSize="561488" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="1d09bb4f8ba502cef13de6d570839e6790bf3542" Size="2097124" CompressedSize="682846" RemotePath="2369826-2acd3c361c9d4a858bd63938a2ab980e" />
<Pack Hash="1d3f3da0b7936a2603e73811bc6e591fa747b9b0" Size="224327" CompressedSize="197501" RemotePath="2529155-b8bb1f8dc03b4df89d83d151b924aa6d" />
<Pack Hash="1d539ea893f32e7179729502fb112faf4cc3e72a" Size="8513" CompressedSize="1371" RemotePath="2552320-4029062fb2e74a43b0cb670edc0cf8a1" />
<Pack Hash="1d7adf470b963947430c512b77c4a36cd081add0" Size="8703014" CompressedSize="2310390" RemotePath="2533728-744799e4cd6b45cc968a4fd2b33d04a6" />
<Pack Hash="1d80bc9dfebea706319068fbd6fa926541e47439" Size="2022324" CompressedSize="451803" RemotePath="2551006-a7f0c9d9f63c4789957c8a5836f1eafd" />
<Pack Hash="1d81bb3fd4494d2d93359f0cbecd2e9e20e67a09" Size="2092042" CompressedSize="1133463" RemotePath="2532063-ce5a2c068f9844c8bb5d0e603da092af" />
@@ -1991,6 +1991,11 @@ public:
private:
/**
* Calculates the range of FPS values for the given bucket index
*/
void CalcQuantisedFPSRange(int32 BucketIndex, int32& StartFPS, int32& EndFPS);
/**
* Dumps the FPS chart information to HTML.
*/
@@ -14,7 +14,7 @@
DEFINE_LOG_CATEGORY_STATIC(LogChartCreation, Log, All);
/** The total GPU time taken to render all frames. In seconds. */
double GTotalGPUTime = 0;
double GTotalGPUTime = 0;
#if DO_CHARTING
@@ -410,13 +410,45 @@ void UEngine::StopFPSChart()
GEnableDataCapture = false;
}
/**
* Calculates the range of FPS values for the given bucket index
*/
void UEngine::CalcQuantisedFPSRange(int32 BucketIndex, int32& StartFPS, int32& EndFPS )
{
// Figure out bucket range. Buckets start at 5 frame intervals then change to 10.
StartFPS = 0;
EndFPS = 0;
if (BucketIndex < STAT_FPSChart_30_40)
{
// Still incrementing by 5
StartFPS = BucketIndex * 5;
EndFPS = StartFPS + 5;
}
else
{
// Now incrementing by 10
StartFPS = STAT_FPSChart_30_40 * 5;
StartFPS += (BucketIndex - STAT_FPSChart_30_40) * 10;
EndFPS = StartFPS + 10;
}
if (BucketIndex + STAT_FPSChartFirstStat == STAT_FPSChart_120_INF)
{
EndFPS = 999;
}
}
/**
* Dumps the FPS chart information to the log.
*/
void UEngine::DumpFPSChartToLog( float TotalTime, float DeltaTime, int32 NumFrames, const FString& InMapName )
{
int32 NumFramesBelow30 = 0; // keep track of the number of frames below 30 FPS
float PctTimeAbove30 = 0; // Keep track of percentage of time at 30+ FPS.
float PctTimeAbove30 = 0; // Keep track of percentage of time at 30+ FPS.
int32 NumFramesBelow60 = 0; // keep track of the number of frames below 60 FPS
float PctTimeAbove60 = 0; // Keep track of percentage of time at 60+ FPS.
UE_LOG(LogChartCreation, Log, TEXT("--- Begin : FPS chart dump for level '%s'"), *InMapName );
@@ -430,24 +462,7 @@ void UEngine::DumpFPSChartToLog( float TotalTime, float DeltaTime, int32 NumFram
// Figure out bucket range. Buckets start at 5 frame intervals then change to 10.
int32 StartFPS = 0;
int32 EndFPS = 0;
if ( BucketIndex < STAT_FPSChart_30_40 )
{
// Still incrementing by 5
StartFPS = BucketIndex * 5;
EndFPS = StartFPS + 5;
}
else
{
// Now incrementing by 10
StartFPS = STAT_FPSChart_30_40 * 5;
StartFPS += (BucketIndex - STAT_FPSChart_30_40) * 10;
EndFPS = StartFPS + 10;
}
if( BucketIndex + STAT_FPSChartFirstStat == STAT_FPSChart_120_INF )
{
EndFPS = 999;
}
CalcQuantisedFPSRange(BucketIndex, StartFPS, EndFPS);
// Keep track of time spent at 30+ FPS.
if( StartFPS >= 30 )
@@ -459,26 +474,39 @@ void UEngine::DumpFPSChartToLog( float TotalTime, float DeltaTime, int32 NumFram
NumFramesBelow30 += GFPSChart[BucketIndex].Count;
}
// Keep track of time spent at 60+ FPS.
if (StartFPS >= 60)
{
PctTimeAbove60 += BucketTimePercentage;
}
else
{
NumFramesBelow60 += GFPSChart[BucketIndex].Count;
}
// Log bucket index, time and frame Percentage.
UE_LOG(LogChartCreation, Log, TEXT("Bucket: %2i - %2i Time: %5.2f Frame: %5.2f"), StartFPS, EndFPS, BucketTimePercentage, BucketFramePercentage );
}
UE_LOG(LogChartCreation, Log, TEXT("%i frames collected over %4.2f seconds, disregarding %4.2f seconds for a %4.2f FPS average, %4.2f percent of time spent > 30 FPS"),
UE_LOG(LogChartCreation, Log, TEXT("%i frames collected over %4.2f seconds, disregarding %4.2f seconds for a %4.2f FPS average, %4.2f percent of time spent > 30 FPS, %4.2f percent of time spent > 60 FPS"),
NumFrames,
DeltaTime,
FMath::Max<float>( 0, DeltaTime - TotalTime ),
NumFrames / TotalTime,
PctTimeAbove30);
PctTimeAbove30,
PctTimeAbove60);
UE_LOG(LogChartCreation, Log, TEXT("Average GPU frametime: %4.2f ms"), float((GTotalGPUTime / NumFrames)*1000.0));
UE_LOG(LogChartCreation, Log, TEXT("BoundGameThreadPct: %4.2f BoundRenderThreadPct: %4.2f BoundGPUPct: %4.2f PercentFrames30+: %f BoundGameTime: %f BoundRenderTime: %f BoundGPUTime: %f PctTimeAbove30: %f ")
UE_LOG(LogChartCreation, Log, TEXT("BoundGameThreadPct: %4.2f BoundRenderThreadPct: %4.2f BoundGPUPct: %4.2f PercentFrames30+: %f PercentFrames60+: %f BoundGameTime: %f BoundRenderTime: %f BoundGPUTime: %f PctTimeAbove30: %f PctTimeAbove60: %f ")
, (float(GNumFramesBound_GameThread)/float(NumFrames))*100.0f
, (float(GNumFramesBound_RenderThread)/float(NumFrames))*100.0f
, (float(GNumFramesBound_GPU)/float(NumFrames))*100.0f
, float(NumFrames - NumFramesBelow30) / float(NumFrames)*100.0f
, (GTotalFramesBoundTime_GameThread/DeltaTime)*100.0f
, float(NumFrames - NumFramesBelow60) / float(NumFrames)*100.0f
, (GTotalFramesBoundTime_GameThread / DeltaTime)*100.0f
, ((GTotalFramesBoundTime_RenderThread)/DeltaTime)*100.0f
, ((GTotalFramesBoundTime_GPU)/DeltaTime)*100.0f
, PctTimeAbove30
, PctTimeAbove60
);
UE_LOG(LogChartCreation, Log, TEXT("--- End"));
@@ -685,7 +713,9 @@ void UEngine::DumpFPSChartToStatsLog( float TotalTime, float DeltaTime, int32 Nu
OutputFile->Logf(TEXT("\tEffects Quality: %d"), Quality.EffectsQuality);
int32 NumFramesBelow30 = 0; // keep track of the number of frames below 30 FPS
float PctTimeAbove30 = 0; // Keep track of percentage of time at 30+ FPS.
float PctTimeAbove30 = 0; // Keep track of percentage of time at 30+ FPS.
int32 NumFramesBelow60 = 0; // keep track of the number of frames below 60 FPS
float PctTimeAbove60 = 0; // Keep track of percentage of time at 60+ FPS.
// Iterate over all buckets, dumping percentages.
for( int32 BucketIndex=0; BucketIndex<ARRAY_COUNT(GFPSChart); BucketIndex++ )
@@ -694,30 +724,12 @@ void UEngine::DumpFPSChartToStatsLog( float TotalTime, float DeltaTime, int32 Nu
const float BucketTimePercentage = 100.f * GFPSChart[BucketIndex].CummulativeTime / TotalTime;
const float BucketFramePercentage = 100.f * GFPSChart[BucketIndex].Count / NumFrames;
// Figure out bucket range. Buckets start at 5 frame intervals then change to 10.
int32 StartFPS = 0;
int32 EndFPS = 0;
if (BucketIndex < STAT_FPSChart_30_40)
{
// Still incrementing by 5
StartFPS = BucketIndex * 5;
EndFPS = StartFPS + 5;
}
else
{
// Now incrementing by 10
StartFPS = STAT_FPSChart_30_40 * 5;
StartFPS += (BucketIndex - STAT_FPSChart_30_40) * 10;
EndFPS = StartFPS + 10;
}
if( BucketIndex + STAT_FPSChartFirstStat == STAT_FPSChart_120_INF )
{
EndFPS = 999;
}
CalcQuantisedFPSRange(BucketIndex, StartFPS, EndFPS);
// Keep track of time spent at 30+ FPS.
if( StartFPS >= 30 )
if (StartFPS >= 30)
{
PctTimeAbove30 += BucketTimePercentage;
}
@@ -725,27 +737,39 @@ void UEngine::DumpFPSChartToStatsLog( float TotalTime, float DeltaTime, int32 Nu
{
NumFramesBelow30 += GFPSChart[BucketIndex].Count;
}
// Keep track of time spent at 60+ FPS.
if (StartFPS >= 60)
{
PctTimeAbove60 += BucketTimePercentage;
}
else
{
NumFramesBelow60 += GFPSChart[BucketIndex].Count;
}
// Log bucket index, time and frame Percentage.
OutputFile->Logf(TEXT("Bucket: %2i - %2i Time: %5.2f Frame: %5.2f"), StartFPS, EndFPS, BucketTimePercentage, BucketFramePercentage);
}
OutputFile->Logf(TEXT("%i frames collected over %4.2f seconds, disregarding %4.2f seconds for a %4.2f FPS average, %4.2f percent of time spent > 30 FPS"),
OutputFile->Logf(TEXT("%i frames collected over %4.2f seconds, disregarding %4.2f seconds for a %4.2f FPS average, %4.2f percent of time spent > 30 FPS, %4.2f percent of time spent > 60 FPS"),
NumFrames,
DeltaTime,
FMath::Max<float>( 0, DeltaTime - TotalTime ),
NumFrames / TotalTime,
PctTimeAbove30);
PctTimeAbove30, PctTimeAbove60 );
OutputFile->Logf(TEXT("Average GPU frame time: %4.2f ms"), float((GTotalGPUTime / NumFrames)*1000.0));
OutputFile->Logf(TEXT("BoundGameThreadPct: %4.2f BoundRenderThreadPct: %4.2f BoundGPUPct: %4.2f PercentFrames30+: %f BoundGameTime: %f BoundRenderTime: %f BoundGPUTime: %f PctTimeAbove30: %f ")
OutputFile->Logf(TEXT("BoundGameThreadPct: %4.2f BoundRenderThreadPct: %4.2f BoundGPUPct: %4.2f PercentFrames30+: %f PercentFrames60+: %f BoundGameTime: %f BoundRenderTime: %f BoundGPUTime: %f PctTimeAbove30: %f PctTimeAbove60: %f ")
, (float(GNumFramesBound_GameThread)/float(NumFrames))*100.0f
, (float(GNumFramesBound_RenderThread)/float(NumFrames))*100.0f
, (float(GNumFramesBound_GPU)/float(NumFrames))*100.0f
, float(NumFrames - NumFramesBelow30) / float(NumFrames)*100.0f
, (GTotalFramesBoundTime_GameThread/DeltaTime)*100.0f
, float(NumFrames - NumFramesBelow60) / float(NumFrames)*100.0f
, (GTotalFramesBoundTime_GameThread / DeltaTime)*100.0f
, ((GTotalFramesBoundTime_RenderThread)/DeltaTime)*100.0f
, ((GTotalFramesBoundTime_GPU)/DeltaTime)*100.0f
, PctTimeAbove30
, PctTimeAbove60
);
// Dump hitch data
@@ -828,6 +852,8 @@ void UEngine::DumpFPSChartToHTML( float TotalTime, float DeltaTime, int32 NumFra
{
// Keep track of percentage of time at 30+ FPS.
float PctTimeAbove30 = 0;
// Keep track of percentage of time at 60+ FPS.
float PctTimeAbove60 = 0;
// Iterate over all buckets, updating row
for( int32 BucketIndex=0; BucketIndex<ARRAY_COUNT(GFPSChart); BucketIndex++ )
@@ -839,24 +865,7 @@ void UEngine::DumpFPSChartToHTML( float TotalTime, float DeltaTime, int32 NumFra
// Figure out bucket range. Buckets start at 5 frame intervals then change to 10.
int32 StartFPS = 0;
int32 EndFPS = 0;
if (BucketIndex < STAT_FPSChart_30_40)
{
// Still incrementing by 5
StartFPS = BucketIndex * 5;
EndFPS = StartFPS + 5;
}
else
{
// Now incrementing by 10
StartFPS = STAT_FPSChart_30_40 * 5;
StartFPS += (BucketIndex - STAT_FPSChart_30_40) * 10;
EndFPS = StartFPS + 10;
}
if( BucketIndex + STAT_FPSChartFirstStat == STAT_FPSChart_120_INF )
{
EndFPS = 999;
}
CalcQuantisedFPSRange(BucketIndex, StartFPS, EndFPS);
// Keep track of time spent at 30+ FPS.
if( StartFPS >= 30 )
@@ -864,7 +873,13 @@ void UEngine::DumpFPSChartToHTML( float TotalTime, float DeltaTime, int32 NumFra
PctTimeAbove30 += BucketTimePercentage;
}
const FString SrcToken = FString::Printf( TEXT("TOKEN_%i_%i"), StartFPS, EndFPS );
// Keep track of time spent at 60+ FPS.
if (StartFPS >= 60)
{
PctTimeAbove60 += BucketTimePercentage;
}
const FString SrcToken = FString::Printf(TEXT("TOKEN_%i_%i"), StartFPS, EndFPS);
const FString DstToken = FString::Printf( TEXT("%5.2f"), BucketTimePercentage );
// Replace token with actual values.
@@ -934,8 +949,9 @@ void UEngine::DumpFPSChartToHTML( float TotalTime, float DeltaTime, int32 NumFra
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_SETTINGS_FX"), *FString::Printf(TEXT("%d"), Quality.EffectsQuality ), ESearchCase::CaseSensitive );
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_AVG_FPS"), *FString::Printf(TEXT("%4.2f"), NumFrames / TotalTime), ESearchCase::CaseSensitive );
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_PCT_ABOVE_30"), *FString::Printf(TEXT("%4.2f"), PctTimeAbove30), ESearchCase::CaseSensitive );
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_TIME_DISREGARDED"), *FString::Printf(TEXT("%4.2f"), FMath::Max<float>( 0, DeltaTime - TotalTime ) ), ESearchCase::CaseSensitive );
FPSChartRow = FPSChartRow.Replace(TEXT("TOKEN_PCT_ABOVE_30"), *FString::Printf(TEXT("%4.2f"), PctTimeAbove30), ESearchCase::CaseSensitive);
FPSChartRow = FPSChartRow.Replace(TEXT("TOKEN_PCT_ABOVE_60"), *FString::Printf(TEXT("%4.2f"), PctTimeAbove60), ESearchCase::CaseSensitive);
FPSChartRow = FPSChartRow.Replace(TEXT("TOKEN_TIME_DISREGARDED"), *FString::Printf(TEXT("%4.2f"), FMath::Max<float>(0, DeltaTime - TotalTime)), ESearchCase::CaseSensitive);
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_TIME"), *FString::Printf(TEXT("%4.2f"), DeltaTime), ESearchCase::CaseSensitive );
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_FRAMECOUNT"), *FString::Printf(TEXT("%i"), NumFrames), ESearchCase::CaseSensitive );
FPSChartRow = FPSChartRow.Replace( TEXT("TOKEN_AVG_GPUTIME"), *FString::Printf(TEXT("%4.2f ms"), float((GTotalGPUTime / NumFrames)*1000.0) ), ESearchCase::CaseSensitive );
@@ -306,10 +306,10 @@ int32 FStatUnitData::DrawStat(FViewport* InViewport, FCanvas* InCanvas, int32 In
RawGPUFrameTime = FPlatformTime::ToMilliseconds(GPUCycles);
GPUFrameTime = 0.9 * GPUFrameTime + 0.1 * RawGPUFrameTime;
SET_FLOAT_STAT(STAT_FPSChart_UnitFrame, FrameTime);
SET_FLOAT_STAT(STAT_FPSChart_UnitRender, RenderThreadTime);
SET_FLOAT_STAT(STAT_FPSChart_UnitGame, GameThreadTime);
SET_FLOAT_STAT(STAT_FPSChart_UnitGPU, GPUFrameTime);
SET_FLOAT_STAT(STAT_UnitFrame, FrameTime);
SET_FLOAT_STAT(STAT_UnitRender, RenderThreadTime);
SET_FLOAT_STAT(STAT_UnitGame, GameThreadTime);
SET_FLOAT_STAT(STAT_UnitGPU, GPUFrameTime);
GEngine->SetAverageUnitTimes(FrameTime, RenderThreadTime, GameThreadTime, GPUFrameTime);
@@ -7275,42 +7275,11 @@ DEFINE_STAT(STAT_SkelMeshDrawCalls);
DEFINE_STAT(STAT_CPUSkinVertices);
DEFINE_STAT(STAT_GPUSkinVertices);
/** Frame chart stats */
DEFINE_STAT(STAT_FPSChart_0_5);
DEFINE_STAT(STAT_FPSChart_5_10);
DEFINE_STAT(STAT_FPSChart_10_15);
DEFINE_STAT(STAT_FPSChart_15_20);
DEFINE_STAT(STAT_FPSChart_20_25);
DEFINE_STAT(STAT_FPSChart_25_30);
DEFINE_STAT(STAT_FPSChart_30_35);
DEFINE_STAT(STAT_FPSChart_35_40);
DEFINE_STAT(STAT_FPSChart_40_45);
DEFINE_STAT(STAT_FPSChart_45_50);
DEFINE_STAT(STAT_FPSChart_50_55);
DEFINE_STAT(STAT_FPSChart_55_60);
DEFINE_STAT(STAT_FPSChart_60_INF);
DEFINE_STAT(STAT_FPSChart_30Plus);
DEFINE_STAT(STAT_FPSChart_UnaccountedTime);
DEFINE_STAT(STAT_FPSChart_FrameCount);
DEFINE_STAT(STAT_FPSChart_Hitch_5000_Plus);
DEFINE_STAT(STAT_FPSChart_Hitch_2500_5000);
DEFINE_STAT(STAT_FPSChart_Hitch_2000_2500);
DEFINE_STAT(STAT_FPSChart_Hitch_1500_2000);
DEFINE_STAT(STAT_FPSChart_Hitch_1000_1500);
DEFINE_STAT(STAT_FPSChart_Hitch_750_1000);
DEFINE_STAT(STAT_FPSChart_Hitch_500_750);
DEFINE_STAT(STAT_FPSChart_Hitch_300_500);
DEFINE_STAT(STAT_FPSChart_Hitch_200_300);
DEFINE_STAT(STAT_FPSChart_Hitch_150_200);
DEFINE_STAT(STAT_FPSChart_Hitch_100_150);
DEFINE_STAT(STAT_FPSChart_Hitch_60_100);
DEFINE_STAT(STAT_FPSChart_TotalHitchCount);
DEFINE_STAT(STAT_FPSChart_UnitFrame);
DEFINE_STAT(STAT_FPSChart_UnitGame);
DEFINE_STAT(STAT_FPSChart_UnitRender);
DEFINE_STAT(STAT_FPSChart_UnitGPU);
/** Unit times */
DEFINE_STAT(STAT_UnitFrame);
DEFINE_STAT(STAT_UnitGame);
DEFINE_STAT(STAT_UnitRender);
DEFINE_STAT(STAT_UnitGPU);
/*-----------------------------------------------------------------------------
Lightmass object/actor implementations.
@@ -45,9 +45,6 @@ enum FPSChartStats
STAT_FPSChart_110_120,
STAT_FPSChart_120_INF,
STAT_FPSChartLastBucketStat,
STAT_FPSChart_30Plus,
STAT_FPSChart_UnaccountedTime,
STAT_FPSChart_FrameCount,
/** Hitch stats */
STAT_FPSChart_FirstHitchStat,
@@ -65,18 +62,6 @@ enum FPSChartStats
STAT_FPSChart_Hitch_60_100,
STAT_FPSChart_LastHitchBucketStat,
STAT_FPSChart_TotalHitchCount,
/** Unit time stats */
STAT_FPSChart_UnitFrame,
STAT_FPSChart_UnitRender,
STAT_FPSChart_UnitGame,
STAT_FPSChart_UnitGPU,
STAT_FPSChart_TotalFrameCount,
STAT_FPSChart_TotalUnitFrame,
STAT_FPSChart_TotalUnitRender,
STAT_FPSChart_TotalUnitGame,
STAT_FPSChart_TotalUnitGPU,
};
/** Start time of current FPS chart. */
@@ -30,6 +30,13 @@ DECLARE_CYCLE_STAT_EXTERN(TEXT("Platform Message Time"),STAT_PlatformMessageTime
DECLARE_CYCLE_STAT_EXTERN(TEXT("Frame Sync Time"),STAT_FrameSyncTime,STATGROUP_Engine, ENGINE_API);
DECLARE_CYCLE_STAT_EXTERN(TEXT("Deferred Tick Time"),STAT_DeferredTickTime,STATGROUP_Engine, ENGINE_API);
/** Unit time stats */
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit FrameTime"), STAT_UnitFrame, STATGROUP_Engine, );
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit RenderThreadTime"), STAT_UnitRender, STATGROUP_Engine, );
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit GameThreadTime"), STAT_UnitGame, STATGROUP_Engine, );
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit GPUTime"), STAT_UnitGPU, STATGROUP_Engine, );
/**
* Game stats
*/
@@ -76,48 +83,6 @@ DECLARE_CYCLE_STAT_EXTERN(TEXT("Net Post BC Tick Time"),STAT_NetBroadcastPostTic
DECLARE_CYCLE_STAT_EXTERN(TEXT("Net PackageMap SerializeObject"),STAT_PackageMap_SerializeObjectTime,STATGROUP_Game, );
/**
* FPS chart stats
*/
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("00 - 05 FPS"), STAT_FPSChart_0_5, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("05 - 10 FPS"), STAT_FPSChart_5_10, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("10 - 15 FPS"), STAT_FPSChart_10_15, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("15 - 20 FPS"), STAT_FPSChart_15_20, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("20 - 25 FPS"), STAT_FPSChart_20_25, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("25 - 30 FPS"), STAT_FPSChart_25_30, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("30 - 35 FPS"), STAT_FPSChart_30_35, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("35 - 40 FPS"), STAT_FPSChart_35_40, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("40 - 45 FPS"), STAT_FPSChart_40_45, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("45 - 50 FPS"), STAT_FPSChart_45_50, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("50 - 55 FPS"), STAT_FPSChart_50_55, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("55 - 60 FPS"), STAT_FPSChart_55_60, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("60 - .. FPS"), STAT_FPSChart_60_INF, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("30+ FPS"), STAT_FPSChart_30Plus, STATGROUP_FPSChart, );
DECLARE_FLOAT_ACCUMULATOR_STAT_EXTERN(TEXT("Unaccounted time"), STAT_FPSChart_UnaccountedTime, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("Frame count"), STAT_FPSChart_FrameCount, STATGROUP_FPSChart, );
/** Hitch stats */
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("5.0s - .... hitches"), STAT_FPSChart_Hitch_5000_Plus, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("2.5s - 5.0s hitches"), STAT_FPSChart_Hitch_2500_5000, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("2.0s - 2.5s hitches"), STAT_FPSChart_Hitch_2000_2500, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("1.5s - 2.0s hitches"), STAT_FPSChart_Hitch_1500_2000, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("1.0s - 1.5s hitches"), STAT_FPSChart_Hitch_1000_1500, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.75s - 1.0s hitches"), STAT_FPSChart_Hitch_750_1000, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.5s - 0.75s hitches"), STAT_FPSChart_Hitch_500_750, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.3s - 0.5s hitches"), STAT_FPSChart_Hitch_300_500, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.2s - 0.3s hitches"), STAT_FPSChart_Hitch_200_300, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.15s - 0.2s hitches"), STAT_FPSChart_Hitch_150_200, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.1s - 0.15s hitches"), STAT_FPSChart_Hitch_100_150, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("0.06s - 0.1s hitches"), STAT_FPSChart_Hitch_60_100, STATGROUP_FPSChart, );
DECLARE_DWORD_ACCUMULATOR_STAT_EXTERN(TEXT("Total hitches"), STAT_FPSChart_TotalHitchCount, STATGROUP_FPSChart, );
/** Unit time stats */
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit FrameTime"), STAT_FPSChart_UnitFrame, STATGROUP_FPSChart, );
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit RenderThreadTime"), STAT_FPSChart_UnitRender, STATGROUP_FPSChart, );
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit GameThreadTime"), STAT_FPSChart_UnitGame, STATGROUP_FPSChart, );
DECLARE_FLOAT_COUNTER_STAT_EXTERN(TEXT("StatUnit GPUTime"), STAT_FPSChart_UnitGPU, STATGROUP_FPSChart, );
/**
* Path finding stats
*/