summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-02-03 09:55:33 +0100
commitcd44dc59cdfc39534aef4d417e9f3c412e3be139 (patch)
tree8d89889ba95ed6ec9322e733846cc9cce9d7dff1 /Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp
parentd11f84f5b5cdc0d92a08af01b13472fdd5f9acb9 (diff)
downloadqtwebkit-cd44dc59cdfc39534aef4d417e9f3c412e3be139.tar.gz
Imported WebKit commit fce473cb4d55aa9fe9d0b0322a2fffecb731b961 (http://svn.webkit.org/repository/webkit/trunk@106560)
Diffstat (limited to 'Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp')
-rw-r--r--Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp48
1 files changed, 5 insertions, 43 deletions
diff --git a/Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp b/Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp
index b6207dc88..fd5b1f847 100644
--- a/Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp
+++ b/Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp
@@ -30,34 +30,22 @@
#if ENABLE(THREADING_GENERIC)
#include "ParallelJobs.h"
-#include "UnusedParam.h"
-
-#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#elif OS(LINUX) || OS(AIX) || OS(SOLARIS)
-#include <unistd.h>
-#elif OS(WINDOWS)
-#include <windows.h>
-#endif
+#include <wtf/NumberOfCores.h>
namespace WTF {
Vector< RefPtr<ParallelEnvironment::ThreadPrivate> >* ParallelEnvironment::s_threadPool = 0;
-int ParallelEnvironment::s_maxNumberOfParallelThreads = -1;
-
ParallelEnvironment::ParallelEnvironment(ThreadFunction threadFunction, size_t sizeOfParameter, int requestedJobNumber) :
m_threadFunction(threadFunction),
m_sizeOfParameter(sizeOfParameter)
{
ASSERT_ARG(requestedJobNumber, requestedJobNumber >= 1);
- if (s_maxNumberOfParallelThreads == -1)
- determineMaxNumberOfParallelThreads();
+ int maxNumberOfCores = numberOfProcessorCores();
- if (!requestedJobNumber || requestedJobNumber > s_maxNumberOfParallelThreads)
- requestedJobNumber = static_cast<unsigned>(s_maxNumberOfParallelThreads);
+ if (!requestedJobNumber || requestedJobNumber > maxNumberOfCores)
+ requestedJobNumber = static_cast<unsigned>(maxNumberOfCores);
if (!s_threadPool)
s_threadPool = new Vector< RefPtr<ThreadPrivate> >();
@@ -65,7 +53,7 @@ ParallelEnvironment::ParallelEnvironment(ThreadFunction threadFunction, size_t s
// The main thread should be also a worker.
int maxNumberOfNewThreads = requestedJobNumber - 1;
- for (int i = 0; i < s_maxNumberOfParallelThreads && m_threads.size() < static_cast<unsigned>(maxNumberOfNewThreads); ++i) {
+ for (int i = 0; i < maxNumberOfCores && m_threads.size() < static_cast<unsigned>(maxNumberOfNewThreads); ++i) {
if (s_threadPool->size() < static_cast<unsigned>(i) + 1U)
s_threadPool->append(ThreadPrivate::create());
@@ -93,32 +81,6 @@ void ParallelEnvironment::execute(void* parameters)
m_threads[i]->waitForFinish();
}
-void ParallelEnvironment::determineMaxNumberOfParallelThreads()
-{
- const int defaultIfUnavailable = 2;
-#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)
- unsigned result;
- size_t length = sizeof(result);
- int name[] = {
- CTL_HW,
- HW_NCPU
- };
- int sysctlResult = sysctl(name, sizeof(name) / sizeof(int), &result, &length, 0, 0);
- s_maxNumberOfParallelThreads = sysctlResult < 0 ? defaultIfUnavailable : result;
-#elif OS(LINUX) || OS(AIX) || OS(SOLARIS)
- long sysconfResult = sysconf(_SC_NPROCESSORS_ONLN);
- s_maxNumberOfParallelThreads = sysconfResult < 0 ? defaultIfUnavailable : static_cast<int>(sysconfResult);
-#elif OS(WINDOWS)
- UNUSED_PARAM(defaultIfUnavailable);
-
- SYSTEM_INFO sysInfo;
- GetSystemInfo(&sysInfo);
- s_maxNumberOfParallelThreads = sysInfo.dwNumberOfProcessors;
-#else
- s_maxNumberOfParallelThreads = defaultIfUnavailable;
-#endif
-}
-
bool ParallelEnvironment::ThreadPrivate::tryLockFor(ParallelEnvironment* parent)
{
bool locked = m_mutex.tryLock();