aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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
}
}