Change: sleep till the next tick in the main loop
Sleep for 1ms (which is always (a lot) more than 1ms) is just randomly guessing and hoping you hit your deadline, give or take. But given we can calculate when our next frame is happening, we can just sleep for that exact amount. As these values are often a bit larger, it is also more likely the OS can schedule us back in close to our requested target. This means it is more likely we hit our deadlines, which makes the FPS a lot more stable.
This commit is contained in:
		
				
					committed by
					
						
						Patric Stout
					
				
			
			
				
	
			
			
			
						parent
						
							ae7a2b9f02
						
					
				
				
					commit
					eb9b1ad68d
				
			@@ -311,9 +311,14 @@ void VideoDriver_Dedicated::MainLoop()
 | 
			
		||||
			/* Sleep longer on a dedicated server, if the game is paused and no clients connected.
 | 
			
		||||
			 * That can allow the CPU to better use deep sleep states. */
 | 
			
		||||
			if (_pause_mode != 0 && !HasClients()) {
 | 
			
		||||
				CSleep(100);
 | 
			
		||||
				std::this_thread::sleep_for(std::chrono::milliseconds(100));
 | 
			
		||||
			} else {
 | 
			
		||||
				CSleep(1);
 | 
			
		||||
				/* See how much time there is till we have to process the next event, and try to hit that as close as possible. */
 | 
			
		||||
				auto now = std::chrono::steady_clock::now();
 | 
			
		||||
 | 
			
		||||
				if (next_game_tick > now) {
 | 
			
		||||
					std::this_thread::sleep_for(next_game_tick - now);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user