perf: don't check scheduler every iteration of runFrame loop
~20fps gain in Pokemon Emerald, nice
This commit is contained in:
		
							
								
								
									
										12
									
								
								src/emu.zig
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/emu.zig
									
									
									
									
									
								
							| @@ -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); | ||||
|     } | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user