mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	SVC: Advance time when calling GetSystemTick to escape busy-wait loops
Cubic Ninja waited for the frame to end by spinning on a loop calling GetSystemTick while doing nothing else. Since GetSystemTick doesn't cause a reschedule (which advances time), this meant that very little emulated time would pass inside that loop, causing the game to spend most of the frame burning away CPU.
This commit is contained in:
		
							parent
							
								
									ac0104b8b0
								
							
						
					
					
						commit
						18c1c39d5e
					
				
					 1 changed files with 4 additions and 1 deletions
				
			
		|  | @ -755,7 +755,10 @@ static void SleepThread(s64 nanoseconds) { | |||
| 
 | ||||
| /// This returns the total CPU ticks elapsed since the CPU was powered-on
 | ||||
| static s64 GetSystemTick() { | ||||
|     return (s64)CoreTiming::GetTicks(); | ||||
|     s64 result = CoreTiming::GetTicks(); | ||||
|     // Advance time to defeat dumb games (like Cubic Ninja) that busy-wait for the frame to end.
 | ||||
|     Core::g_app_core->AddTicks(150); // Measured time between two calls on a 9.2 o3DS with Ninjhax 1.1b
 | ||||
|     return result; | ||||
| } | ||||
| 
 | ||||
| /// Creates a memory block at the specified address with the specified permissions and size
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue