Adjustments to framerate metric and addition of frametime (#2638)
* Adjust framerate data and add frametime * Update PerformanceStatistics.cs * Revert deletions of average framerate * Update Ryujinx.csproj * Remove separate GTK column * Increase FPS precision * general cleanup * even generaler cleanup * fix dumb * Remove legacy code * Update PerformanceStatistics.cs * Update PerformanceStatistics.cs
This commit is contained in:
parent
fb2e61a435
commit
843401635a
3 changed files with 16 additions and 17 deletions
|
@ -5,11 +5,10 @@ namespace Ryujinx.HLE
|
||||||
{
|
{
|
||||||
public class PerformanceStatistics
|
public class PerformanceStatistics
|
||||||
{
|
{
|
||||||
private const double FrameRateWeight = 0.5;
|
|
||||||
private const int FrameTypeGame = 0;
|
private const int FrameTypeGame = 0;
|
||||||
private const int PercentTypeFifo = 0;
|
private const int PercentTypeFifo = 0;
|
||||||
|
|
||||||
private double[] _averageFrameRate;
|
private double[] _frameRate;
|
||||||
private double[] _accumulatedFrameTime;
|
private double[] _accumulatedFrameTime;
|
||||||
private double[] _previousFrameTime;
|
private double[] _previousFrameTime;
|
||||||
|
|
||||||
|
@ -30,7 +29,7 @@ namespace Ryujinx.HLE
|
||||||
|
|
||||||
public PerformanceStatistics()
|
public PerformanceStatistics()
|
||||||
{
|
{
|
||||||
_averageFrameRate = new double[1];
|
_frameRate = new double[1];
|
||||||
_accumulatedFrameTime = new double[1];
|
_accumulatedFrameTime = new double[1];
|
||||||
_previousFrameTime = new double[1];
|
_previousFrameTime = new double[1];
|
||||||
|
|
||||||
|
@ -45,7 +44,7 @@ namespace Ryujinx.HLE
|
||||||
_frameLock = new object[] { new object() };
|
_frameLock = new object[] { new object() };
|
||||||
_percentLock = new object[] { new object() };
|
_percentLock = new object[] { new object() };
|
||||||
|
|
||||||
_resetTimer = new Timer(1000);
|
_resetTimer = new Timer(750);
|
||||||
|
|
||||||
_resetTimer.Elapsed += ResetTimerElapsed;
|
_resetTimer.Elapsed += ResetTimerElapsed;
|
||||||
_resetTimer.AutoReset = true;
|
_resetTimer.AutoReset = true;
|
||||||
|
@ -57,11 +56,11 @@ namespace Ryujinx.HLE
|
||||||
|
|
||||||
private void ResetTimerElapsed(object sender, ElapsedEventArgs e)
|
private void ResetTimerElapsed(object sender, ElapsedEventArgs e)
|
||||||
{
|
{
|
||||||
CalculateAverageFrameRate(FrameTypeGame);
|
CalculateFrameRate(FrameTypeGame);
|
||||||
CalculateAveragePercent(PercentTypeFifo);
|
CalculateAveragePercent(PercentTypeFifo);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CalculateAverageFrameRate(int frameType)
|
private void CalculateFrameRate(int frameType)
|
||||||
{
|
{
|
||||||
double frameRate = 0;
|
double frameRate = 0;
|
||||||
|
|
||||||
|
@ -72,7 +71,7 @@ namespace Ryujinx.HLE
|
||||||
frameRate = _framesRendered[frameType] / _accumulatedFrameTime[frameType];
|
frameRate = _framesRendered[frameType] / _accumulatedFrameTime[frameType];
|
||||||
}
|
}
|
||||||
|
|
||||||
_averageFrameRate[frameType] = LinearInterpolate(_averageFrameRate[frameType], frameRate);
|
_frameRate[frameType] = frameRate;
|
||||||
_framesRendered[frameType] = 0;
|
_framesRendered[frameType] = 0;
|
||||||
_accumulatedFrameTime[frameType] = 0;
|
_accumulatedFrameTime[frameType] = 0;
|
||||||
}
|
}
|
||||||
|
@ -97,11 +96,6 @@ namespace Ryujinx.HLE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static double LinearInterpolate(double lhs, double rhs)
|
|
||||||
{
|
|
||||||
return lhs * (1.0 - FrameRateWeight) + rhs * FrameRateWeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RecordGameFrameTime()
|
public void RecordGameFrameTime()
|
||||||
{
|
{
|
||||||
RecordFrameTime(FrameTypeGame);
|
RecordFrameTime(FrameTypeGame);
|
||||||
|
@ -157,12 +151,17 @@ namespace Ryujinx.HLE
|
||||||
|
|
||||||
public double GetGameFrameRate()
|
public double GetGameFrameRate()
|
||||||
{
|
{
|
||||||
return _averageFrameRate[FrameTypeGame];
|
return _frameRate[FrameTypeGame];
|
||||||
}
|
}
|
||||||
|
|
||||||
public double GetFifoPercent()
|
public double GetFifoPercent()
|
||||||
{
|
{
|
||||||
return _averagePercent[PercentTypeFifo];
|
return _averagePercent[PercentTypeFifo];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double GetGameFrameTime()
|
||||||
|
{
|
||||||
|
return 1000 / _frameRate[FrameTypeGame];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -198,7 +198,7 @@ namespace Ryujinx.Headless.SDL2
|
||||||
Device.EnableDeviceVsync,
|
Device.EnableDeviceVsync,
|
||||||
dockedMode,
|
dockedMode,
|
||||||
Device.Configuration.AspectRatio.ToText(),
|
Device.Configuration.AspectRatio.ToText(),
|
||||||
$"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS",
|
$"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
|
||||||
$"FIFO: {Device.Statistics.GetFifoPercent():0.00} %",
|
$"FIFO: {Device.Statistics.GetFifoPercent():0.00} %",
|
||||||
$"GPU: {_gpuVendorName}"));
|
$"GPU: {_gpuVendorName}"));
|
||||||
|
|
||||||
|
|
|
@ -427,7 +427,7 @@ namespace Ryujinx.Ui
|
||||||
Device.EnableDeviceVsync,
|
Device.EnableDeviceVsync,
|
||||||
dockedMode,
|
dockedMode,
|
||||||
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
|
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
|
||||||
$"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS",
|
$"Game: {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
|
||||||
$"FIFO: {Device.Statistics.GetFifoPercent():0.00} %",
|
$"FIFO: {Device.Statistics.GetFifoPercent():0.00} %",
|
||||||
$"GPU: {_gpuVendorName}"));
|
$"GPU: {_gpuVendorName}"));
|
||||||
|
|
||||||
|
|
Reference in a new issue