diff options
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 11 | ||||
| -rw-r--r-- | src/core/core_cpu.cpp | 1 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index ceb3f7683..0996f129c 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp | |||
| @@ -86,7 +86,16 @@ public: | |||
| 86 | } | 86 | } |
| 87 | 87 | ||
| 88 | void AddTicks(u64 ticks) override { | 88 | void AddTicks(u64 ticks) override { |
| 89 | CoreTiming::AddTicks(ticks - num_interpreted_instructions); | 89 | // Divide the number of ticks by the amount of CPU cores. TODO(Subv): This yields only a |
| 90 | // rough approximation of the amount of executed ticks in the system, it may be thrown off | ||
| 91 | // if not all cores are doing a similar amount of work. Instead of doing this, we should | ||
| 92 | // device a way so that timing is consistent across all cores without increasing the ticks 4 | ||
| 93 | // times. | ||
| 94 | u64 amortized_ticks = (ticks - num_interpreted_instructions) / Core::NUM_CPU_CORES; | ||
| 95 | // Always execute at least one tick. | ||
| 96 | amortized_ticks = std::max<u64>(amortized_ticks, 1); | ||
| 97 | |||
| 98 | CoreTiming::AddTicks(amortized_ticks); | ||
| 90 | num_interpreted_instructions = 0; | 99 | num_interpreted_instructions = 0; |
| 91 | } | 100 | } |
| 92 | u64 GetTicksRemaining() override { | 101 | u64 GetTicksRemaining() override { |
diff --git a/src/core/core_cpu.cpp b/src/core/core_cpu.cpp index 46a522fcd..3f1c70624 100644 --- a/src/core/core_cpu.cpp +++ b/src/core/core_cpu.cpp | |||
| @@ -90,6 +90,7 @@ void Cpu::RunLoop(bool tight_loop) { | |||
| 90 | LOG_TRACE(Core, "Core-{} idling", core_index); | 90 | LOG_TRACE(Core, "Core-{} idling", core_index); |
| 91 | 91 | ||
| 92 | if (IsMainCore()) { | 92 | if (IsMainCore()) { |
| 93 | // TODO(Subv): Only let CoreTiming idle if all 4 cores are idling. | ||
| 93 | CoreTiming::Idle(); | 94 | CoreTiming::Idle(); |
| 94 | CoreTiming::Advance(); | 95 | CoreTiming::Advance(); |
| 95 | } | 96 | } |