| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "base/threading/platform_thread_internal_posix.h" |
| |
| #include <errno.h> |
| #include <sys/resource.h> |
| |
| #include <ostream> |
| |
| #include "base/containers/adapters.h" |
| #include "base/logging.h" |
| #include "base/notreached.h" |
| |
| namespace base { |
| |
| namespace internal { |
| |
| int ThreadTypeToNiceValue(ThreadType thread_type) { |
| for (const auto& pair : kThreadTypeToNiceValueMap) { |
| if (pair.thread_type == thread_type) |
| return pair.nice_value; |
| } |
| NOTREACHED() << "Unknown ThreadType"; |
| return 0; |
| } |
| |
| ThreadPriorityForTest NiceValueToThreadPriorityForTest(int nice_value) { |
| // Try to find a priority that best describes |nice_value|. If there isn't |
| // an exact match, this method returns the closest priority whose nice value |
| // is higher (lower priority) than |nice_value|. |
| for (const auto& pair : kThreadPriorityToNiceValueMapForTest) { |
| if (pair.nice_value >= nice_value) |
| return pair.priority; |
| } |
| |
| // Reaching here means |nice_value| is more than any of the defined |
| // priorities. The lowest priority is suitable in this case. |
| return ThreadPriorityForTest::kBackground; |
| } |
| |
| int GetCurrentThreadNiceValue() { |
| #if BUILDFLAG(IS_NACL) |
| NOTIMPLEMENTED(); |
| return 0; |
| #else |
| |
| // Need to clear errno before calling getpriority(): |
| // http://man7.org/linux/man-pages/man2/getpriority.2.html |
| errno = 0; |
| int nice_value = getpriority(PRIO_PROCESS, 0); |
| if (errno != 0) { |
| DVPLOG(1) << "Failed to get nice value of thread (" |
| << PlatformThread::CurrentId() << ")"; |
| return 0; |
| } |
| |
| return nice_value; |
| #endif |
| } |
| |
| } // namespace internal |
| |
| } // namespace base |