aboutsummaryrefslogtreecommitdiff
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
commite67edd4bb76f832406e1febe79af05eae6493bc8 (patch)
treedd123895c15e09d8b2e5110b74f6acc2449f530e
parentd260571440e16ce9b4a60aa6c93bf79dc95169a2 (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.
-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
}
}