diff options
| author | bunnei <bunneidev@gmail.com> | 2019-10-15 11:48:30 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-15 11:48:30 -0400 |
| commit | cab2619aeb111bd6c5dbcc5adc0d2e8154a1e8fc (patch) | |
| tree | 1664df6e9abff74f37adee0c90ae3c9eaff6babf /src/core/cpu_core_manager.cpp | |
| parent | 0378babd1506066b8a865476c569407a21601dd7 (diff) | |
| parent | a4ae11d63e83323c30e07f3eef1cc7e7829df6df (diff) | |
Merge pull request #2965 from FernandoS27/fair-core-timing
Core Timing: Rework Core Timing to run all cores evenly.
Diffstat (limited to 'src/core/cpu_core_manager.cpp')
| -rw-r--r-- | src/core/cpu_core_manager.cpp | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/core/cpu_core_manager.cpp b/src/core/cpu_core_manager.cpp index 8fcb4eeb1..16b384076 100644 --- a/src/core/cpu_core_manager.cpp +++ b/src/core/cpu_core_manager.cpp @@ -6,6 +6,7 @@ #include "core/arm/exclusive_monitor.h" #include "core/core.h" #include "core/core_cpu.h" +#include "core/core_timing.h" #include "core/cpu_core_manager.h" #include "core/gdbstub/gdbstub.h" #include "core/settings.h" @@ -122,13 +123,19 @@ void CpuCoreManager::RunLoop(bool tight_loop) { } } - for (active_core = 0; active_core < NUM_CPU_CORES; ++active_core) { - cores[active_core]->RunLoop(tight_loop); - if (Settings::values.use_multi_core) { - // Cores 1-3 are run on other threads in this mode - break; + auto& core_timing = system.CoreTiming(); + core_timing.ResetRun(); + bool keep_running{}; + do { + keep_running = false; + for (active_core = 0; active_core < NUM_CPU_CORES; ++active_core) { + core_timing.SwitchContext(active_core); + if (core_timing.CanCurrentContextRun()) { + cores[active_core]->RunLoop(tight_loop); + } + keep_running |= core_timing.CanCurrentContextRun(); } - } + } while (keep_running); if (GDBStub::IsServerEnabled()) { GDBStub::SetCpuStepFlag(false); |
