mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-10-22 08:17:19 +00:00 
			
		
		
		
	Fix SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL also applying to HIGH priorities
As the name suggests, the hint should only apply to SDL_THREAD_PRIORITY_TIME_CRITICAL
The resulting priorities for my current distro result in these values:
     | High         | Time Critical
Hint |--------------|-----------------
 0   |  P=10 N=-10  | P=5   N=-15
 1   |  P=10 N=-10  | P=-21 N=0
			
			
This commit is contained in:
		
							parent
							
								
									5b0d432942
								
							
						
					
					
						commit
						0500c04468
					
				|  | @ -801,7 +801,7 @@ extern "C" { | |||
| *  Currently no other platform hint values are defined but may be in the future. | ||||
| * | ||||
| *  \note On Linux, the kernel may send SIGKILL to realtime tasks which exceed the distro | ||||
| *  configured execution budget for rtkit. This budget is queriably through RLIMIT_RTTIME | ||||
| *  configured execution budget for rtkit. This budget can be queried through RLIMIT_RTTIME | ||||
| *  after calling SDL_SetThreadPriority(). | ||||
| */ | ||||
| #define SDL_HINT_THREAD_PRIORITY_POLICY         "SDL_THREAD_PRIORITY_POLICY" | ||||
|  |  | |||
|  | @ -208,7 +208,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) | |||
|     int pri_policy; | ||||
|     pthread_t thread = pthread_self(); | ||||
|     const char *policyhint = SDL_GetHint(SDL_HINT_THREAD_PRIORITY_POLICY); | ||||
|     const SDL_bool allow_realtime_hint = SDL_GetHintBoolean(SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL, SDL_FALSE); | ||||
|     const SDL_bool timecritical_realtime_hint = SDL_GetHintBoolean(SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL, SDL_FALSE); | ||||
| 
 | ||||
|     if (pthread_getschedparam(thread, &policy, &sched) != 0) { | ||||
|         return SDL_SetError("pthread_getschedparam() failed"); | ||||
|  | @ -229,7 +229,7 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) | |||
|         pri_policy = SCHED_RR; | ||||
|         break; | ||||
| #else | ||||
|         pri_policy = allow_realtime_hint ? SCHED_RR : SCHED_OTHER; | ||||
|         pri_policy = SCHED_OTHER; | ||||
|         break; | ||||
| #endif | ||||
|     default: | ||||
|  | @ -237,6 +237,10 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority) | |||
|         break; | ||||
|     } | ||||
| 
 | ||||
|     if (timecritical_realtime_hint && priority == SDL_THREAD_PRIORITY_TIME_CRITICAL) { | ||||
|         pri_policy = SCHED_RR; | ||||
|     } | ||||
| 
 | ||||
|     if (policyhint) { | ||||
|         if (SDL_strcmp(policyhint, "current") == 0) { | ||||
|             /* Leave current thread scheduler policy unchanged */ | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue