- revamp priority changing on windows, add cvar i_allowprioritychange to disallow priority changing entirely, allowing batch scripts to dictate GZDoom's process priority

This commit is contained in:
Rachael Alexanderson 2025-01-31 06:05:55 -05:00
parent 59ac494c19
commit f21b68c8f6
No known key found for this signature in database
GPG key ID: 26A8ACCE97115EE0
2 changed files with 14 additions and 7 deletions

View file

@ -128,6 +128,7 @@ EXTERN_CVAR(Bool, i_pauseinbackground);
CVAR (Bool, k_allowfullscreentoggle, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
CVAR (Bool, i_allowprioritychange, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
static void I_CheckGUICapture ()
{
@ -485,13 +486,16 @@ LRESULT CALLBACK WndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case WM_ACTIVATEAPP:
AppActive = (wParam == TRUE);
if (wParam || !i_pauseinbackground)
if (!i_pauseinbackground && i_allowprioritychange)
{
SetPriorityClass (GetCurrentProcess (), INGAME_PRIORITY_CLASS);
}
else if (!noidle && !(sysCallbacks.NetGame && sysCallbacks.NetGame()))
{
SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS);
if (wParam)
{
SetPriorityClass (GetCurrentProcess (), INGAME_PRIORITY_CLASS);
}
else if (!noidle && !(sysCallbacks.NetGame && sysCallbacks.NetGame()))
{
SetPriorityClass (GetCurrentProcess (), IDLE_PRIORITY_CLASS);
}
}
S_SetSoundPaused (wParam);
break;

View file

@ -244,6 +244,9 @@ void CalculateCPUSpeed()
// probably never use the performance statistics.
min_diff = freq.LowPart * 11 / 200;
// just in case we were launched with a custom priority class, keep it
DWORD OldPriorityClass = GetPriorityClass(GetCurrentProcess());
// Minimize the chance of task switching during the testing by going very
// high priority. This is another reason to avoid timing for too long.
SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
@ -258,7 +261,7 @@ void CalculateCPUSpeed()
do { QueryPerformanceCounter(&count1); } while ((count1.QuadPart - count2.QuadPart) < min_diff);
ClockCalibration.Unclock();
SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
SetPriorityClass(GetCurrentProcess(), OldPriorityClass);
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_NORMAL);
PerfToSec = double(count1.QuadPart - count2.QuadPart) / (double(ClockCalibration.GetRawCounter()) * freq.QuadPart);