Index: base/threading/platform_thread_linux.cc |
diff --git a/base/threading/platform_thread_linux.cc b/base/threading/platform_thread_linux.cc |
index 9f7437418a7299ec6ab92d80b1be6735f6b9b9fa..48cf7443f7d5156b31624318bc0a18d2aba35e5c 100644 |
--- a/base/threading/platform_thread_linux.cc |
+++ b/base/threading/platform_thread_linux.cc |
@@ -27,6 +27,7 @@ namespace internal { |
namespace { |
#if !defined(OS_NACL) |
const struct sched_param kRealTimePrio = {8}; |
+const struct sched_param kResetPrio = {0}; |
#endif |
} // namespace |
@@ -37,11 +38,18 @@ const ThreadPriorityToNiceValuePair kThreadPriorityToNiceValueMap[4] = { |
{ThreadPriority::REALTIME_AUDIO, -10}, |
}; |
-bool SetThreadPriorityForPlatform(PlatformThreadHandle handle, |
- ThreadPriority priority) { |
+bool SetCurrentThreadPriorityForPlatform(ThreadPriority priority) { |
#if !defined(OS_NACL) |
- // TODO(gab): Assess the correctness of using |pthread_self()| below instead |
- // of |handle|. http://crbug.com/468793. |
+ ThreadPriority current_priority; |
+ if (priority != ThreadPriority::REALTIME_AUDIO && |
+ GetCurrentThreadPriorityForPlatform(¤t_priority) && |
+ current_priority == ThreadPriority::REALTIME_AUDIO) { |
+ // If the pthread's round-robin scheduler is already enabled, and the new |
+ // priority will use setpriority() instead, the pthread scheduler should be |
+ // reset to use SCHED_OTHER so that setpriority() just works. |
+ pthread_setschedparam(pthread_self(), SCHED_OTHER, &kResetPrio); |
gab
2015/06/23 17:01:32
I think we should do a separate CL for actual logi
Takashi Toyoshima
2015/06/24 04:15:39
Done.
|
+ return false; |
+ } |
return priority == ThreadPriority::REALTIME_AUDIO && |
pthread_setschedparam(pthread_self(), SCHED_RR, &kRealTimePrio) == 0; |
#else |
@@ -49,13 +57,10 @@ bool SetThreadPriorityForPlatform(PlatformThreadHandle handle, |
#endif |
} |
-bool GetThreadPriorityForPlatform(PlatformThreadHandle handle, |
- ThreadPriority* priority) { |
+bool GetCurrentThreadPriorityForPlatform(ThreadPriority* priority) { |
#if !defined(OS_NACL) |
int maybe_sched_rr = 0; |
struct sched_param maybe_realtime_prio = {0}; |
- // TODO(gab): Assess the correctness of using |pthread_self()| below instead |
- // of |handle|. http://crbug.com/468793. |
if (pthread_getschedparam(pthread_self(), &maybe_sched_rr, |
&maybe_realtime_prio) == 0 && |
maybe_sched_rr == SCHED_RR && |