// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef BASE_THREADING_PLATFORM_THREAD_INTERNAL_POSIX_H_
#define BASE_THREADING_PLATFORM_THREAD_INTERNAL_POSIX_H_

#include "base/threading/platform_thread.h"

namespace base {

namespace internal {

struct ThreadPriorityToNiceValuePair {
  ThreadPriority priority;
  int nice_value;
};
extern const ThreadPriorityToNiceValuePair kThreadPriorityToNiceValueMap[4];

// Returns the nice value matching |priority| based on the platform-specific
// implementation of kThreadPriorityToNiceValueMap.
int ThreadPriorityToNiceValue(ThreadPriority priority);

// Returns the ThreadPrioirty matching |nice_value| based on the platform-
// specific implementation of kThreadPriorityToNiceValueMap.
ThreadPriority NiceValueToThreadPriority(int nice_value);

// Allows platform specific tweaks to the generic POSIX solution for
// SetThreadPriority. Returns true if the platform-specific implementation
// handled this |priority| change, false if the generic implementation should
// instead proceed.
bool SetThreadPriorityForPlatform(PlatformThreadHandle handle,
                                  ThreadPriority priority);

// Returns true if there is a platform-specific ThreadPriority set on |handle|
// (and returns the actual ThreadPriority via |priority|). Returns false
// otherwise, leaving |priority| untouched.
bool GetThreadPriorityForPlatform(PlatformThreadHandle handle,
                                  ThreadPriority* priority);

}  // namespace internal

}  // namespace base

#endif  // BASE_THREADING_PLATFORM_THREAD_INTERNAL_POSIX_H_
