diff --git a/ChocolArm64/ATranslatorCache.cs b/ChocolArm64/ATranslatorCache.cs index 218442aeb4..2d6af90b4e 100644 --- a/ChocolArm64/ATranslatorCache.cs +++ b/ChocolArm64/ATranslatorCache.cs @@ -138,7 +138,7 @@ namespace ChocolArm64 CacheBucket Bucket = Cache[Node.Value]; - long TimeDelta = RingDelta(Bucket.Timestamp, Timestamp); + long TimeDelta = Bucket.Timestamp - Timestamp; if (TimeDelta <= MinTimeDelta) { @@ -159,12 +159,7 @@ namespace ChocolArm64 { long timestamp = Stopwatch.GetTimestamp(); - return (long)(timestamp * (1000.0f / Stopwatch.Frequency)); - } - - private static long RingDelta(long Old, long New) - { - return New - Old; + return timestamp / (Stopwatch.Frequency / 1000); } } } \ No newline at end of file diff --git a/Ryujinx.Common/PerformanceCounter.cs b/Ryujinx.Common/PerformanceCounter.cs index 01ebdd7904..cd5fb1954a 100644 --- a/Ryujinx.Common/PerformanceCounter.cs +++ b/Ryujinx.Common/PerformanceCounter.cs @@ -4,6 +4,40 @@ namespace Ryujinx.Common { public static class PerformanceCounter { + static PerformanceCounter() + { + TicksPerMillisecond = Stopwatch.Frequency / 1000; + TicksPerSecond = Stopwatch.Frequency; + TicksPerMinute = TicksPerSecond * 60; + TicksPerHour = TicksPerMinute * 60; + TicksPerDay = TicksPerHour * 24; + } + + /// + /// Represents the number of ticks in 1 day. + /// + public static long TicksPerDay { get; } + + /// + /// Represents the number of ticks in 1 hour. + /// + public static long TicksPerHour { get; } + + /// + /// Represents the number of ticks in 1 minute. + /// + public static long TicksPerMinute { get; } + + /// + /// Represents the number of ticks in 1 second. + /// + public static long TicksPerSecond { get; } + + /// + /// Represents the number of ticks in 1 millisecond. + /// + public static long TicksPerMillisecond { get; } + /// /// Gets the number of milliseconds elapsed since the system started. /// @@ -13,7 +47,20 @@ namespace Ryujinx.Common { long timestamp = Stopwatch.GetTimestamp(); - return (long)(timestamp * (1000.0f / Stopwatch.Frequency)); + return timestamp; + } + } + + /// + /// Gets the number of milliseconds elapsed since the system started. + /// + public static long ElapsedMilliseconds + { + get + { + long timestamp = Stopwatch.GetTimestamp(); + + return timestamp / TicksPerMillisecond; } } } diff --git a/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs b/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs index c9c3e41a11..a65ebcbbc2 100644 --- a/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs +++ b/Ryujinx.Graphics/Gal/OpenGL/OGLCachedResource.cs @@ -27,7 +27,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL this.DataSize = DataSize; this.Node = Node; - Timestamp = PerformanceCounter.ElapsedTicks; + Timestamp = PerformanceCounter.ElapsedMilliseconds; } } @@ -142,7 +142,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL private void ClearCacheIfNeeded() { - long Timestamp = PerformanceCounter.ElapsedTicks; + long Timestamp = PerformanceCounter.ElapsedMilliseconds; int Count = 0; @@ -157,7 +157,7 @@ namespace Ryujinx.Graphics.Gal.OpenGL CacheBucket Bucket = Cache[Node.Value]; - long TimeDelta = RingDelta(Bucket.Timestamp, Timestamp); + long TimeDelta = Bucket.Timestamp - Timestamp; if ((uint)TimeDelta <= (uint)MaxTimeDelta) { @@ -171,10 +171,5 @@ namespace Ryujinx.Graphics.Gal.OpenGL DeleteValueCallback(Bucket.Value); } } - - private long RingDelta(long Old, long New) - { - return New - Old; - } } } \ No newline at end of file diff --git a/Ryujinx.Graphics/NvGpuEngine3d.cs b/Ryujinx.Graphics/NvGpuEngine3d.cs index 7bca66abe2..976e8d7cfc 100644 --- a/Ryujinx.Graphics/NvGpuEngine3d.cs +++ b/Ryujinx.Graphics/NvGpuEngine3d.cs @@ -851,7 +851,7 @@ namespace Ryujinx.Graphics //TODO: Implement counters. long Counter = 1; - long Timestamp = PerformanceCounter.ElapsedTicks; + long Timestamp = PerformanceCounter.ElapsedMilliseconds; Timestamp = (long)(Timestamp * 615384.615385); diff --git a/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs b/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs index 2e6f5c5726..02354e16ad 100644 --- a/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs +++ b/Ryujinx.HLE/HOS/Kernel/KCoreContext.cs @@ -26,7 +26,7 @@ namespace Ryujinx.HLE.HOS.Kernel if (Thread != null) { - Thread.LastScheduledTicks = PerformanceCounter.ElapsedTicks; + Thread.LastScheduledTicks = PerformanceCounter.ElapsedMilliseconds; } if (SelectedThread != CurrentThread) diff --git a/Ryujinx.HLE/Hid/Hid.cs b/Ryujinx.HLE/Hid/Hid.cs index 3416a4cb54..3fb5a34c3c 100644 --- a/Ryujinx.HLE/Hid/Hid.cs +++ b/Ryujinx.HLE/Hid/Hid.cs @@ -216,7 +216,7 @@ namespace Ryujinx.HLE.Input private static long GetTimestamp() { - return PerformanceCounter.ElapsedTicks * 19200; + return PerformanceCounter.ElapsedMilliseconds * 19200; } } }