aboutsummaryrefslogtreecommitdiff
path: root/src/core/core_timing.cpp
diff options
context:
space:
mode:
authorMorph <39850852+Morph1984@users.noreply.github.com>2023-03-21 21:30:02 -0400
committerMorph <39850852+Morph1984@users.noreply.github.com>2023-03-27 17:45:22 -0400
commite1bce50d8ba139cf71b4225b4a416d84c65f3e0e (patch)
treedd123895c15e09d8b2e5110b74f6acc2449f530e /src/core/core_timing.cpp
parent27c33ab73fd03d659654c49967a081214daf6ac2 (diff)
core_timing: Make use of MicroSleep for x64 CPUs
For CPUs that support tpause, this should result in significant CPU power savings over thread yield in this spin wait.
Diffstat (limited to 'src/core/core_timing.cpp')
-rw-r--r--src/core/core_timing.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp
index cd4df45228..4f2692b05c 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -10,6 +10,10 @@
#include "common/windows/timer_resolution.h"
#endif
+#ifdef ARCHITECTURE_x86_64
+#include "common/x64/cpu_wait.h"
+#endif
+
#include "common/microprofile.h"
#include "core/core_timing.h"
#include "core/core_timing_util.h"
@@ -269,7 +273,11 @@ void CoreTiming::ThreadLoop() {
if (wait_time >= timer_resolution_ns) {
Common::Windows::SleepForOneTick();
} else {
+#ifdef ARCHITECTURE_x86_64
+ Common::X64::MicroSleep();
+#else
std::this_thread::yield();
+#endif
}
}