diff options
| author | bunnei <bunneidev@gmail.com> | 2018-08-12 22:31:55 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-12 22:31:55 -0400 |
| commit | fecffeb0ddedeef0f6223e8a2c53cca3baac70ad (patch) | |
| tree | ebd7cbbb35fd07e34f6397cde76027533d7200f4 /src/core/arm/dynarmic | |
| parent | 9608f51cdee2dd1d2bb493b02b109b1b280dfc28 (diff) | |
| parent | d9237660429adaa9f549d10e79252a713f1da874 (diff) | |
Merge pull request #1043 from Subv/timing
Use an approximated amortized amount of ticks when advancing timing.
Diffstat (limited to 'src/core/arm/dynarmic')
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 11 |
1 files changed, 10 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: } void AddTicks(u64 ticks) override { - CoreTiming::AddTicks(ticks - num_interpreted_instructions); + // Divide the number of ticks by the amount of CPU cores. TODO(Subv): This yields only a + // rough approximation of the amount of executed ticks in the system, it may be thrown off + // if not all cores are doing a similar amount of work. Instead of doing this, we should + // device a way so that timing is consistent across all cores without increasing the ticks 4 + // times. + u64 amortized_ticks = (ticks - num_interpreted_instructions) / Core::NUM_CPU_CORES; + // Always execute at least one tick. + amortized_ticks = std::max<u64>(amortized_ticks, 1); + + CoreTiming::AddTicks(amortized_ticks); num_interpreted_instructions = 0; } u64 GetTicksRemaining() override { |
