Commit fc3b2eba authored by Zhiyi Zhang's avatar Zhiyi Zhang Committed by Alexandre Julliard

Revert "ntdll: Call usleep() instead of NtYieldExecution() in NtDelayExecution().".

Manual tests on Windows 10 show that calling Sleep(0) or NtDelayExecution() with zero timeout in a loop do consume 100% of a CPU core, which is closer to the behavior of NtYieldExecution() than usleep(0). usleep(0) gives up the remaining timeslices even if there are no other threads to switch to, causing low utilization of CPU and performance issues. The original patch is b1a79c6b and the idea is to use usleep(0) to avoid a thread taking 100% of a CPU core for StarCraft 2 and Shadow of the Tomb Raider. However with wine-7.22, reverting the usleep(0) patch causes no behavior changes. For Shadow of the Tomb Raider, the 100% CPU issue is gone with or without the patch. For StarCraft 2, there is always a thread taking 100% CPU even with the patch. After discussing with Matteo, we decided it's better to revert the patch. Fix Mortal Kombat X performance drop during tower selection and Ragnarok Online bad performance. This reverts commit e86b4015. Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53327
parent 2c76c73a
......@@ -1494,7 +1494,7 @@ NTSTATUS WINAPI NtDelayExecution( BOOLEAN alertable, const LARGE_INTEGER *timeou
}
/* Note that we yield after establishing the desired timeout */
usleep(0);
NtYieldExecution();
if (!when) return STATUS_SUCCESS;
for (;;)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment