From a363bc4a1476a508f6d9b21869ded0298a861041 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Sat, 23 Jun 2018 18:32:57 -0300 Subject: [PATCH] Make PerformanceStatistics thread safe --- Ryujinx.HLE/PerformanceStatistics.cs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Ryujinx.HLE/PerformanceStatistics.cs b/Ryujinx.HLE/PerformanceStatistics.cs index 697d6e63ff..9bc3d6b477 100644 --- a/Ryujinx.HLE/PerformanceStatistics.cs +++ b/Ryujinx.HLE/PerformanceStatistics.cs @@ -1,6 +1,7 @@ using System.Diagnostics; using System.Timers; + namespace Ryujinx.HLE { public class PerformanceStatistics @@ -32,6 +33,8 @@ namespace Ryujinx.HLE FramesRendered = new long[2]; + FrameLock = new object[] { new object(), new object() }; + ExecutionTime = new Stopwatch(); ExecutionTime.Start(); @@ -62,14 +65,17 @@ namespace Ryujinx.HLE FrameRate = FramesRendered[FrameType] / AccumulatedFrameTime[FrameType]; } - AverageFrameRate[FrameType] = Mix(AverageFrameRate[FrameType], FrameRate); + lock (FrameLock[FrameType]) + { + AverageFrameRate[FrameType] = LinearInterpolate(AverageFrameRate[FrameType], FrameRate); - FramesRendered[FrameType] = 0; + FramesRendered[FrameType] = 0; - AccumulatedFrameTime[FrameType] = 0; + AccumulatedFrameTime[FrameType] = 0; + } } - private double Mix(double Old, double New) + private double LinearInterpolate(double Old, double New) { return Old * (1.0 - FrameRateWeight) + New * FrameRateWeight; } @@ -92,9 +98,12 @@ namespace Ryujinx.HLE PreviousFrameTime[FrameType] = CurrentFrameTime; - AccumulatedFrameTime[FrameType] += ElapsedFrameTime; + lock (FrameLock[FrameType]) + { + AccumulatedFrameTime[FrameType] += ElapsedFrameTime; - FramesRendered[FrameType]++; + FramesRendered[FrameType]++; + } } public double GetSystemFrameRate()