diff options
Diffstat (limited to 'source/blender/blenlib/intern/threads.c')
-rw-r--r-- | source/blender/blenlib/intern/threads.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/source/blender/blenlib/intern/threads.c b/source/blender/blenlib/intern/threads.c index 73cadea71c0..42f7a744b94 100644 --- a/source/blender/blenlib/intern/threads.c +++ b/source/blender/blenlib/intern/threads.c @@ -343,33 +343,37 @@ void BLI_end_threads(ListBase *threadbase) /* how many threads are native on this system? */ int BLI_system_thread_count(void) { - int t; + static int t = -1; + + if (num_threads_override != 0) { + return num_threads_override; + } + else if (LIKELY(t != -1)) { + return t; + } + + { #ifdef WIN32 - SYSTEM_INFO info; - GetSystemInfo(&info); - t = (int) info.dwNumberOfProcessors; + SYSTEM_INFO info; + GetSystemInfo(&info); + t = (int) info.dwNumberOfProcessors; #else # ifdef __APPLE__ - int mib[2]; - size_t len; - - mib[0] = CTL_HW; - mib[1] = HW_NCPU; - len = sizeof(t); - sysctl(mib, 2, &t, &len, NULL, 0); + int mib[2]; + size_t len; + + mib[0] = CTL_HW; + mib[1] = HW_NCPU; + len = sizeof(t); + sysctl(mib, 2, &t, &len, NULL, 0); # else - t = (int)sysconf(_SC_NPROCESSORS_ONLN); + t = (int)sysconf(_SC_NPROCESSORS_ONLN); # endif #endif + } + + CLAMP(t, 1, RE_MAX_THREAD); - if (num_threads_override > 0) - return num_threads_override; - - if (t > RE_MAX_THREAD) - return RE_MAX_THREAD; - if (t < 1) - return 1; - return t; } |