Chromium Code Reviews| 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 && |