summaryrefslogtreecommitdiffstats
path: root/src/core/core.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2015-01-08 02:45:05 +0100
committerbunnei <bunneidev@gmail.com>2015-01-08 02:45:05 +0100
commit91d96840ea698edaf5f2b6e8522d18f00bb18d9c (patch)
treee9e6288406b16f2a8dd10236c96567a895af3410 /src/core/core.cpp
parentMerge pull request #404 from bunnei/more-frame-synch-fixes (diff)
parentThreads: Use a dummy idle thread when no other are ready. (diff)
downloadyuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.tar
yuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.tar.gz
yuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.tar.bz2
yuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.tar.lz
yuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.tar.xz
yuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.tar.zst
yuzu-91d96840ea698edaf5f2b6e8522d18f00bb18d9c.zip
Diffstat (limited to 'src/core/core.cpp')
-rw-r--r--src/core/core.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp
index 8ac4481cc..98f8a7dff 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -5,6 +5,7 @@
#include "common/common_types.h"
#include "core/core.h"
+#include "core/core_timing.h"
#include "core/settings.h"
#include "core/arm/disassembler/arm_disasm.h"
@@ -23,7 +24,17 @@ ARM_Interface* g_sys_core = nullptr; ///< ARM11 system (OS) core
/// Run the core CPU loop
void RunLoop(int tight_loop) {
- g_app_core->Run(tight_loop);
+ // If the current thread is an idle thread, then don't execute instructions,
+ // instead advance to the next event and try to yield to the next thread
+ if (Kernel::IsIdleThread(Kernel::GetCurrentThreadHandle())) {
+ LOG_TRACE(Core_ARM11, "Idling");
+ CoreTiming::Idle();
+ CoreTiming::Advance();
+ HLE::Reschedule(__func__);
+ } else {
+ g_app_core->Run(tight_loop);
+ }
+
HW::Update();
if (HLE::g_reschedule) {
Kernel::Reschedule();