Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenlib/intern/threads.c')
-rw-r--r--source/blender/blenlib/intern/threads.c44
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;
}