diff options
| author | jduncanator <jduncanator@users.noreply.github.com> | 2018-10-29 09:31:13 +1100 |
|---|---|---|
| committer | gdkchan <gab.dark.100@gmail.com> | 2018-10-28 19:31:13 -0300 |
| commit | c1b7340023b42161d55993de2e40baad68915b86 (patch) | |
| tree | 3b88c6c36b1ba4ae9b4f256cffdf4fb0a5c77648 /Ryujinx.HLE/Hid | |
| parent | b956bbc32c7f9fdffebfd9a9416e8e0a2a588abd (diff) | |
Timing: Optimize Timestamp Aquisition (#479)
* Timing: Optimize Timestamp Aquisition
Currently, we make use of Environment.TickCount in a number of places. This has some downsides, mainly being that the TickCount is a signed 32-bit integer, and has an effective limit of ~25 days before overflowing and wrapping around. Due to the signed-ness of the value, this also caused issues with negative numbers. This resolves these issues by using a 64-bit tick count obtained from Performance Counters (via the Stopwatch class). This has a beneficial side effect of being significantly more accurate than the TickCount.
* Timing: Rename ElapsedTicks to ElapsedMilliseconds and expose TicksPerX
* Timing: Some style changes
* Timing: Align static variable initialization
Diffstat (limited to 'Ryujinx.HLE/Hid')
| -rw-r--r-- | Ryujinx.HLE/Hid/Hid.cs | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/Ryujinx.HLE/Hid/Hid.cs b/Ryujinx.HLE/Hid/Hid.cs index 66b38db5..21580223 100644 --- a/Ryujinx.HLE/Hid/Hid.cs +++ b/Ryujinx.HLE/Hid/Hid.cs @@ -1,4 +1,5 @@ -using Ryujinx.HLE.HOS; +using Ryujinx.Common; +using Ryujinx.HLE.HOS; using System; namespace Ryujinx.HLE.Input @@ -98,12 +99,12 @@ namespace Ryujinx.HLE.Input HidControllerColorDesc SplitColorDesc = 0; - Device.Memory.WriteInt32(BaseControllerOffset + 0x0, (int)Type); + Device.Memory.WriteInt32(BaseControllerOffset + 0x00, (int)Type); - Device.Memory.WriteInt32(BaseControllerOffset + 0x4, IsHalf ? 1 : 0); + Device.Memory.WriteInt32(BaseControllerOffset + 0x04, IsHalf ? 1 : 0); - Device.Memory.WriteInt32(BaseControllerOffset + 0x8, (int)SingleColorDesc); - Device.Memory.WriteInt32(BaseControllerOffset + 0xc, (int)SingleColorBody); + Device.Memory.WriteInt32(BaseControllerOffset + 0x08, (int)SingleColorDesc); + Device.Memory.WriteInt32(BaseControllerOffset + 0x0c, (int)SingleColorBody); Device.Memory.WriteInt32(BaseControllerOffset + 0x10, (int)SingleColorButtons); Device.Memory.WriteInt32(BaseControllerOffset + 0x14, (int)SplitColorDesc); @@ -186,8 +187,8 @@ namespace Ryujinx.HLE.Input long Timestamp = GetTimestamp(); - Device.Memory.WriteInt64(ControllerOffset + 0x0, Timestamp); - Device.Memory.WriteInt64(ControllerOffset + 0x8, HidEntryCount); + Device.Memory.WriteInt64(ControllerOffset + 0x00, Timestamp); + Device.Memory.WriteInt64(ControllerOffset + 0x08, HidEntryCount); Device.Memory.WriteInt64(ControllerOffset + 0x10, CurrEntry); Device.Memory.WriteInt64(ControllerOffset + 0x18, HidEntryCount - 1); @@ -199,8 +200,8 @@ namespace Ryujinx.HLE.Input long SampleCounter = Device.Memory.ReadInt64(LastEntryOffset) + 1; - Device.Memory.WriteInt64(ControllerOffset + 0x0, SampleCounter); - Device.Memory.WriteInt64(ControllerOffset + 0x8, SampleCounter); + Device.Memory.WriteInt64(ControllerOffset + 0x00, SampleCounter); + Device.Memory.WriteInt64(ControllerOffset + 0x08, SampleCounter); Device.Memory.WriteInt64(ControllerOffset + 0x10, (uint)Buttons); @@ -225,8 +226,8 @@ namespace Ryujinx.HLE.Input long Timestamp = GetTimestamp(); - Device.Memory.WriteInt64(TouchScreenOffset + 0x0, Timestamp); - Device.Memory.WriteInt64(TouchScreenOffset + 0x8, HidEntryCount); + Device.Memory.WriteInt64(TouchScreenOffset + 0x00, Timestamp); + Device.Memory.WriteInt64(TouchScreenOffset + 0x08, HidEntryCount); Device.Memory.WriteInt64(TouchScreenOffset + 0x10, CurrEntry); Device.Memory.WriteInt64(TouchScreenOffset + 0x18, HidEntryCount - 1); Device.Memory.WriteInt64(TouchScreenOffset + 0x20, Timestamp); @@ -239,8 +240,8 @@ namespace Ryujinx.HLE.Input TouchEntryOffset += CurrEntry * HidTouchEntrySize; - Device.Memory.WriteInt64(TouchEntryOffset + 0x0, SampleCounter); - Device.Memory.WriteInt64(TouchEntryOffset + 0x8, Points.Length); + Device.Memory.WriteInt64(TouchEntryOffset + 0x00, SampleCounter); + Device.Memory.WriteInt64(TouchEntryOffset + 0x08, Points.Length); TouchEntryOffset += HidTouchEntryHeaderSize; @@ -250,9 +251,9 @@ namespace Ryujinx.HLE.Input foreach (HidTouchPoint Point in Points) { - Device.Memory.WriteInt64(TouchEntryOffset + 0x0, Timestamp); - Device.Memory.WriteInt32(TouchEntryOffset + 0x8, Padding); - Device.Memory.WriteInt32(TouchEntryOffset + 0xc, Index++); + Device.Memory.WriteInt64(TouchEntryOffset + 0x00, Timestamp); + Device.Memory.WriteInt32(TouchEntryOffset + 0x08, Padding); + Device.Memory.WriteInt32(TouchEntryOffset + 0x0c, Index++); Device.Memory.WriteInt32(TouchEntryOffset + 0x10, Point.X); Device.Memory.WriteInt32(TouchEntryOffset + 0x14, Point.Y); Device.Memory.WriteInt32(TouchEntryOffset + 0x18, Point.DiameterX); @@ -266,7 +267,7 @@ namespace Ryujinx.HLE.Input private static long GetTimestamp() { - return (long)((ulong)Environment.TickCount * 19_200); + return PerformanceCounter.ElapsedMilliseconds * 19200; } } } |
