Browse Source

Updated thread priorities for Apple operating systems

Sam Lantinga 5 years ago
parent
commit
378a5cfb61
1 changed files with 16 additions and 3 deletions
  1. 16 3
      src/thread/pthread/SDL_systhread.c

+ 16 - 3
src/thread/pthread/SDL_systhread.c

@@ -220,9 +220,22 @@ SDL_SYS_SetThreadPriority(SDL_ThreadPriority priority)
     } else {
         int min_priority = sched_get_priority_min(policy);
         int max_priority = sched_get_priority_max(policy);
-        sched.sched_priority = (min_priority + (max_priority - min_priority) / 2);
-        if (priority == SDL_THREAD_PRIORITY_HIGH) {
-            sched.sched_priority += ((max_priority - min_priority) / 4);
+
+#if defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__TVOS__)
+        if (min_priority == 15 && max_priority == 47) {
+            /* Apple has a specific set of thread priorities */
+            if (priority == SDL_THREAD_PRIORITY_HIGH) {
+                sched.sched_priority = 45;
+            } else {
+                sched.sched_priority = 37;
+            }
+        } else
+#endif /* __MACOSX__ || __IPHONEOS__ || __TVOS__ */
+        {
+            sched.sched_priority = (min_priority + (max_priority - min_priority) / 2);
+            if (priority == SDL_THREAD_PRIORITY_HIGH) {
+                sched.sched_priority += ((max_priority - min_priority) / 4);
+            }
         }
     }
     if (pthread_setschedparam(thread, policy, &sched) != 0) {