I agree that a problem such as this is really annoying. I still do believe though that it’s related to some sort of cpu power management. Here’s why: I’ve got six Android devices to test on (S9+, S7 edge, Note 4, Note 2, A5 2017, Tab E T560), and this issue is completely nonexistent on 5 of them. Only on my S9+ do I experience slowdowns every now and then, when I don’t take additional steps to prevent this.
Now, the S9+, at least my Exynos variant, is notorious for having really messed up cpu management, up to a point where people suspect it’s being crippled on purpose. So, what hits hard here IMHO is, that Magic Dosbox, or Dosbox in general, is pretty well optimized, and light on the cpu. That’s why our phones don’t run hot. On the other hand, it seems to me that for this reason the process is offloaded onto the low power cores.
In short: running Dosbox at max cycles is calculated relatively to the cpu core it’s running on So when Android pushes the process to a low power core, Dosbox is still running at max cycles, but only relative to the .LITTLE core.
That’s how I understand it. This would also explain why fixed cycles are working as intendend.
Also, things become even more complicated with the way the .BIG cores are designed. On my S9+, the first core is clocked at 2.7 GHz. As soon as the 2nd core is utilized (for whatever reason at all), both are clocked down to 2.3 GHz. As soon as core 3 and 4 chime in, it goes down even further, to 1.8 GHz for all 4 cores. So, even when the process stays on the .BIG cores, occasional slowdowns (2.7 -> 1.8 ~ 33%) are almost inevitable. Also, prior to the tweaks I’ve applied, I would get crazy slowdowns, and scores of 900 and above sometimes, whereas now, I’m getting stable 600 realtics (don’t want to overoptimize and kill my cpu).
So, all that is just what I make of it personally, I’m not a coder myself. But I was able to squeeze a lot of performance out of my phone with cpu related tweaks, without any changes made to Magic Dosbox itself. That’s why I’m pretty sure the problem can be pinpointed here.
Maybe there’s a way to increase some values at least a bit. Pushing the limits too far would result in pronounced cpu heating and battery usage, but some adjustments to the code (if possible) might help with the issue of Dosbox running on the wrong set of cores.