report average framerate instead of current framerate
This commit is contained in:
parent
f5376a48a7
commit
c70abf955e
1 changed files with 39 additions and 12 deletions
|
@ -2,12 +2,14 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Timers;
|
||||||
|
|
||||||
namespace Ryujinx.Core
|
namespace Ryujinx.Core
|
||||||
{
|
{
|
||||||
public class PerformanceStatistics
|
public class PerformanceStatistics
|
||||||
{
|
{
|
||||||
Stopwatch ExecutionTime = new Stopwatch();
|
Stopwatch ExecutionTime = new Stopwatch();
|
||||||
|
Timer ResetTimer = new Timer(1000);
|
||||||
|
|
||||||
long CurrentGameFrameEnded;
|
long CurrentGameFrameEnded;
|
||||||
long CurrentSystemFrameEnded;
|
long CurrentSystemFrameEnded;
|
||||||
|
@ -15,23 +17,33 @@ namespace Ryujinx.Core
|
||||||
long LastGameFrameEnded;
|
long LastGameFrameEnded;
|
||||||
long LastSystemFrameEnded;
|
long LastSystemFrameEnded;
|
||||||
|
|
||||||
public double CurrentGameFrameTime;
|
double AccumulatedGameFrameTime;
|
||||||
public double CurrentSystemFrameTime;
|
double AccumulatedSystemFrameTime;
|
||||||
public double PreviousGameFrameTime;
|
double CurrentGameFrameTime;
|
||||||
public double PreviousSystemFrameTime;
|
double CurrentSystemFrameTime;
|
||||||
public double GameFrameRate => 1000f / (CurrentSystemFrameTime / 1000);
|
double PreviousGameFrameTime;
|
||||||
public double SystemFrameRate => 1000f/(CurrentSystemFrameTime/1000);
|
double PreviousSystemFrameTime;
|
||||||
|
public double GameFrameRate { get; private set; }
|
||||||
|
public double SystemFrameRate { get; private set; }
|
||||||
public long SystemFramesRendered;
|
public long SystemFramesRendered;
|
||||||
public long GameFramesRendered;
|
public long GameFramesRendered;
|
||||||
public long ElapsedMilliseconds { get => ExecutionTime.ElapsedMilliseconds; }
|
public long ElapsedMilliseconds => ExecutionTime.ElapsedMilliseconds;
|
||||||
public long ElapsedMicroseconds { get => (long)
|
public long ElapsedMicroseconds => (long)
|
||||||
(((double)ExecutionTime.ElapsedTicks / Stopwatch.Frequency) * 1000000); }
|
(((double)ExecutionTime.ElapsedTicks / Stopwatch.Frequency) * 1000000);
|
||||||
public long ElapsedNanoseconds { get => (long)
|
public long ElapsedNanoseconds => (long)
|
||||||
(((double)ExecutionTime.ElapsedTicks / Stopwatch.Frequency) * 1000000000); }
|
(((double)ExecutionTime.ElapsedTicks / Stopwatch.Frequency) * 1000000000);
|
||||||
|
|
||||||
public PerformanceStatistics()
|
public PerformanceStatistics()
|
||||||
{
|
{
|
||||||
ExecutionTime.Start();
|
ExecutionTime.Start();
|
||||||
|
ResetTimer.Elapsed += ResetTimerElapsed;
|
||||||
|
ResetTimer.AutoReset = true;
|
||||||
|
ResetTimer.Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ResetTimerElapsed(object sender, ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
ResetStatistics();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StartSystemFrame()
|
public void StartSystemFrame()
|
||||||
|
@ -45,6 +57,7 @@ namespace Ryujinx.Core
|
||||||
{
|
{
|
||||||
CurrentSystemFrameEnded = ElapsedMicroseconds;
|
CurrentSystemFrameEnded = ElapsedMicroseconds;
|
||||||
CurrentSystemFrameTime = CurrentSystemFrameEnded - CurrentSystemFrameStart;
|
CurrentSystemFrameTime = CurrentSystemFrameEnded - CurrentSystemFrameStart;
|
||||||
|
AccumulatedSystemFrameTime += CurrentSystemFrameTime;
|
||||||
SystemFramesRendered++;
|
SystemFramesRendered++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,7 +67,21 @@ namespace Ryujinx.Core
|
||||||
CurrentGameFrameTime = CurrentGameFrameEnded - LastGameFrameEnded;
|
CurrentGameFrameTime = CurrentGameFrameEnded - LastGameFrameEnded;
|
||||||
PreviousGameFrameTime = CurrentGameFrameTime;
|
PreviousGameFrameTime = CurrentGameFrameTime;
|
||||||
LastGameFrameEnded = CurrentGameFrameEnded;
|
LastGameFrameEnded = CurrentGameFrameEnded;
|
||||||
|
AccumulatedGameFrameTime += CurrentGameFrameTime;
|
||||||
GameFramesRendered++;
|
GameFramesRendered++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ResetStatistics()
|
||||||
|
{
|
||||||
|
GameFrameRate = 1000 / ((AccumulatedGameFrameTime / GameFramesRendered) / 1000);
|
||||||
|
GameFrameRate = double.IsNaN(GameFrameRate) ? 0 : GameFrameRate;
|
||||||
|
SystemFrameRate = 1000 / ((AccumulatedSystemFrameTime / SystemFramesRendered) / 1000);
|
||||||
|
SystemFrameRate = double.IsNaN(SystemFrameRate) ? 0 : SystemFrameRate;
|
||||||
|
|
||||||
|
GameFramesRendered = 0;
|
||||||
|
SystemFramesRendered = 0;
|
||||||
|
AccumulatedGameFrameTime = 0;
|
||||||
|
AccumulatedSystemFrameTime = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue