r2mods/ilspy_dump/ror2_csproj/RoR2/WindowsConVars.cs

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);
}