|
|
|
@ -27,18 +27,6 @@ namespace Common {
|
|
|
|
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
|
|
|
|
|
|
|
|
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask) {
|
|
|
|
|
SetThreadAffinityMask(thread, mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SetCurrentThreadAffinity(u32 mask) {
|
|
|
|
|
SetThreadAffinityMask(GetCurrentThread(), mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SwitchCurrentThread() {
|
|
|
|
|
SwitchToThread();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Sets the debugger-visible name of the current thread.
|
|
|
|
|
// Uses undocumented (actually, it is now documented) trick.
|
|
|
|
|
// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsdebug/html/vxtsksettingthreadname.asp
|
|
|
|
@ -70,31 +58,6 @@ void SetCurrentThreadName(const char* name) {
|
|
|
|
|
|
|
|
|
|
#else // !MSVC_VER, so must be POSIX threads
|
|
|
|
|
|
|
|
|
|
void SetThreadAffinity(std::thread::native_handle_type thread, u32 mask) {
|
|
|
|
|
#ifdef __APPLE__
|
|
|
|
|
thread_policy_set(pthread_mach_thread_np(thread), THREAD_AFFINITY_POLICY, (integer_t*)&mask, 1);
|
|
|
|
|
#elif (defined __linux__ || defined __FreeBSD__) && !(defined ANDROID)
|
|
|
|
|
cpu_set_t cpu_set;
|
|
|
|
|
CPU_ZERO(&cpu_set);
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i != sizeof(mask) * 8; ++i)
|
|
|
|
|
if ((mask >> i) & 1)
|
|
|
|
|
CPU_SET(i, &cpu_set);
|
|
|
|
|
|
|
|
|
|
pthread_setaffinity_np(thread, sizeof(cpu_set), &cpu_set);
|
|
|
|
|
#endif
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void SetCurrentThreadAffinity(u32 mask) {
|
|
|
|
|
SetThreadAffinity(pthread_self(), mask);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifndef _WIN32
|
|
|
|
|
void SwitchCurrentThread() {
|
|
|
|
|
usleep(1000 * 1);
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
// MinGW with the POSIX threading model does not support pthread_setname_np
|
|
|
|
|
#if !defined(_WIN32) || defined(_MSC_VER)
|
|
|
|
|
void SetCurrentThreadName(const char* name) {
|
|
|
|
|