37 lines
1.2 KiB
C#
37 lines
1.2 KiB
C#
using System.Runtime.InteropServices;
|
|
using RoR2.ConVar;
|
|
using UnityEngine;
|
|
|
|
namespace RoR2;
|
|
|
|
public static class WindowsConVars
|
|
{
|
|
private class TimerResolutionConVar : BaseConVar
|
|
{
|
|
private static TimerResolutionConVar instance = new TimerResolutionConVar("timer_resolution", ConVarFlags.Engine, null, "The Windows timer resolution.");
|
|
|
|
private TimerResolutionConVar(string name, ConVarFlags flags, string defaultValue, string helpText)
|
|
: base(name, flags, defaultValue, helpText)
|
|
{
|
|
}
|
|
|
|
public override void SetString(string newValue)
|
|
{
|
|
NtSetTimerResolution(BaseConVar.ParseIntInvariant(newValue), setResolution: true, out var currentResolution);
|
|
Debug.LogFormat("{0} set to {1}", name, currentResolution);
|
|
}
|
|
|
|
public override string GetString()
|
|
{
|
|
NtQueryTimerResolution(out var _, out var _, out var currentResolution);
|
|
return TextSerialization.ToStringInvariant(currentResolution);
|
|
}
|
|
}
|
|
|
|
[DllImport("ntdll.dll", SetLastError = true)]
|
|
private static extern int NtSetTimerResolution(int desiredResolution, bool setResolution, out int currentResolution);
|
|
|
|
[DllImport("ntdll.dll", SetLastError = true)]
|
|
private static extern int NtQueryTimerResolution(out int minimumResolution, out int maximumResolution, out int currentResolution);
|
|
}
|