summaryrefslogtreecommitdiff
path: root/src/core/core_timing.cpp
diff options
context:
space:
mode:
authorGravatar Morph2023-03-21 21:30:02 -0400
committerGravatar Morph2023-03-27 17:45:22 -0400
commite1bce50d8ba139cf71b4225b4a416d84c65f3e0e (patch)
treedd123895c15e09d8b2e5110b74f6acc2449f530e /src/core/core_timing.cpp
parentx64: Add MicroSleep (diff)
downloadyuzu-e1bce50d8ba139cf71b4225b4a416d84c65f3e0e.tar.gz
yuzu-e1bce50d8ba139cf71b4225b4a416d84c65f3e0e.tar.xz
yuzu-e1bce50d8ba139cf71b4225b4a416d84c65f3e0e.zip
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 cd4df4522..4f2692b05 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -10,6 +10,10 @@
10#include "common/windows/timer_resolution.h" 10#include "common/windows/timer_resolution.h"
11#endif 11#endif
12 12
13#ifdef ARCHITECTURE_x86_64
14#include "common/x64/cpu_wait.h"
15#endif
16
13#include "common/microprofile.h" 17#include "common/microprofile.h"
14#include "core/core_timing.h" 18#include "core/core_timing.h"
15#include "core/core_timing_util.h" 19#include "core/core_timing_util.h"
@@ -269,7 +273,11 @@ void CoreTiming::ThreadLoop() {
269 if (wait_time >= timer_resolution_ns) { 273 if (wait_time >= timer_resolution_ns) {
270 Common::Windows::SleepForOneTick(); 274 Common::Windows::SleepForOneTick();
271 } else { 275 } else {
276#ifdef ARCHITECTURE_x86_64
277 Common::X64::MicroSleep();
278#else
272 std::this_thread::yield(); 279 std::this_thread::yield();
280#endif
273 } 281 }
274 } 282 }
275 283