perf: don't check scheduler every iteration of runFrame loop

~20fps gain in Pokemon Emerald, nice
This commit is contained in:
Rekai Nyangadzayi Musuka 2022-05-25 12:15:11 -03:00
parent 8f5d054195
commit f9bb0460d8
1 changed files with 7 additions and 5 deletions

View File

@ -51,13 +51,15 @@ pub fn runFrame(sched: *Scheduler, cpu: *Arm7tdmi) void {
const frame_end = sched.tick + cycles_per_frame;
while (sched.tick < frame_end) {
if (cpu.bus.io.haltcnt == .Halt) sched.tick += 1;
if (cpu.bus.io.haltcnt == .Execute) cpu.step();
cpu.handleDMATransfers();
const next = sched.nextTimestamp();
if (next > frame_end) break;
while (sched.tick >= sched.nextTimestamp()) {
sched.handleEvent(cpu);
while (sched.tick < next) {
if (cpu.bus.io.haltcnt == .Execute) cpu.step() else sched.tick += 1;
cpu.handleDMATransfers();
}
sched.handleEvent(cpu);
}
}