mirror of
https://github.com/overte-org/overte.git
synced 2025-07-30 19:50:33 +02:00
Use dynamic count for global thread pool
This commit is contained in:
parent
6e25c97eef
commit
94210d2e69
5 changed files with 25 additions and 3 deletions
|
@ -176,8 +176,6 @@ static const int MAX_CONCURRENT_RESOURCE_DOWNLOADS = 16;
|
||||||
// For processing on QThreadPool, target 2 less than the ideal number of threads, leaving
|
// For processing on QThreadPool, target 2 less than the ideal number of threads, leaving
|
||||||
// 2 logical cores available for time sensitive tasks.
|
// 2 logical cores available for time sensitive tasks.
|
||||||
static const int MIN_PROCESSING_THREAD_POOL_SIZE = 2;
|
static const int MIN_PROCESSING_THREAD_POOL_SIZE = 2;
|
||||||
static const int PROCESSING_THREAD_POOL_SIZE = std::max(MIN_PROCESSING_THREAD_POOL_SIZE,
|
|
||||||
QThread::idealThreadCount() - 2);
|
|
||||||
|
|
||||||
static const QString SNAPSHOT_EXTENSION = ".jpg";
|
static const QString SNAPSHOT_EXTENSION = ".jpg";
|
||||||
static const QString SVO_EXTENSION = ".svo";
|
static const QString SVO_EXTENSION = ".svo";
|
||||||
|
@ -537,7 +535,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
PluginContainer* pluginContainer = dynamic_cast<PluginContainer*>(this); // set the container for any plugins that care
|
PluginContainer* pluginContainer = dynamic_cast<PluginContainer*>(this); // set the container for any plugins that care
|
||||||
PluginManager::getInstance()->setContainer(pluginContainer);
|
PluginManager::getInstance()->setContainer(pluginContainer);
|
||||||
|
|
||||||
QThreadPool::globalInstance()->setMaxThreadCount(PROCESSING_THREAD_POOL_SIZE);
|
QThreadPool::globalInstance()->setMaxThreadCount(MIN_PROCESSING_THREAD_POOL_SIZE);
|
||||||
thread()->setPriority(QThread::HighPriority);
|
thread()->setPriority(QThread::HighPriority);
|
||||||
thread()->setObjectName("Main Thread");
|
thread()->setObjectName("Main Thread");
|
||||||
|
|
||||||
|
@ -707,6 +705,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) :
|
||||||
connect(addressManager.data(), &AddressManager::hostChanged, this, &Application::updateWindowTitle);
|
connect(addressManager.data(), &AddressManager::hostChanged, this, &Application::updateWindowTitle);
|
||||||
connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress);
|
connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress);
|
||||||
|
|
||||||
|
connect(this, &Application::activeDisplayPluginChanged, this, &Application::updateThreadPoolCount);
|
||||||
|
|
||||||
// Save avatar location immediately after a teleport.
|
// Save avatar location immediately after a teleport.
|
||||||
connect(getMyAvatar(), &MyAvatar::positionGoneTo,
|
connect(getMyAvatar(), &MyAvatar::positionGoneTo,
|
||||||
DependencyManager::get<AddressManager>().data(), &AddressManager::storeCurrentAddress);
|
DependencyManager::get<AddressManager>().data(), &AddressManager::storeCurrentAddress);
|
||||||
|
@ -5727,3 +5727,18 @@ void Application::sendHoverLeaveEntity(QUuid id, PointerEvent event) {
|
||||||
EntityItemID entityItemID(id);
|
EntityItemID entityItemID(id);
|
||||||
emit getEntities()->hoverLeaveEntity(entityItemID, event);
|
emit getEntities()->hoverLeaveEntity(entityItemID, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME? perhaps two, one for the main thread and one for the offscreen UI rendering thread?
|
||||||
|
static const int UI_RESERVED_THREADS = 1;
|
||||||
|
// Windows won't let you have all the cores
|
||||||
|
static const int OS_RESERVED_THREADS = 1;
|
||||||
|
|
||||||
|
void Application::updateThreadPoolCount() const {
|
||||||
|
auto reservedThreads = UI_RESERVED_THREADS + OS_RESERVED_THREADS + _displayPlugin->getRequiredThreadCount();
|
||||||
|
auto availableThreads = QThread::idealThreadCount() - reservedThreads;
|
||||||
|
auto threadPoolSize = std::max(MIN_PROCESSING_THREAD_POOL_SIZE, availableThreads);
|
||||||
|
qDebug() << "Ideal Thread Count " << QThread::idealThreadCount();
|
||||||
|
qDebug() << "Reserved threads " << reservedThreads;
|
||||||
|
qDebug() << "Setting thread pool size to " << threadPoolSize;
|
||||||
|
QThreadPool::globalInstance()->setMaxThreadCount(threadPoolSize);
|
||||||
|
}
|
|
@ -286,6 +286,7 @@ public slots:
|
||||||
bool exportEntities(const QString& filename, const QVector<EntityItemID>& entityIDs, const glm::vec3* givenOffset = nullptr);
|
bool exportEntities(const QString& filename, const QVector<EntityItemID>& entityIDs, const glm::vec3* givenOffset = nullptr);
|
||||||
bool exportEntities(const QString& filename, float x, float y, float z, float scale);
|
bool exportEntities(const QString& filename, float x, float y, float z, float scale);
|
||||||
bool importEntities(const QString& url);
|
bool importEntities(const QString& url);
|
||||||
|
void updateThreadPoolCount() const;
|
||||||
|
|
||||||
static void setLowVelocityFilter(bool lowVelocityFilter);
|
static void setLowVelocityFilter(bool lowVelocityFilter);
|
||||||
Q_INVOKABLE void loadDialog();
|
Q_INVOKABLE void loadDialog();
|
||||||
|
|
|
@ -69,6 +69,8 @@ public:
|
||||||
virtual bool wantVsync() const { return true; }
|
virtual bool wantVsync() const { return true; }
|
||||||
void setVsyncEnabled(bool vsyncEnabled) { _vsyncEnabled = vsyncEnabled; }
|
void setVsyncEnabled(bool vsyncEnabled) { _vsyncEnabled = vsyncEnabled; }
|
||||||
bool isVsyncEnabled() const { return _vsyncEnabled; }
|
bool isVsyncEnabled() const { return _vsyncEnabled; }
|
||||||
|
// Three threads, one for rendering, one for texture transfers, one reserved for the GL driver
|
||||||
|
int getRequiredThreadCount() const override { return 3; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class PresentThread;
|
friend class PresentThread;
|
||||||
|
|
|
@ -128,6 +128,7 @@ public:
|
||||||
Present = QEvent::User + 1
|
Present = QEvent::User + 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
virtual int getRequiredThreadCount() const { return 0; }
|
||||||
virtual bool isHmd() const { return false; }
|
virtual bool isHmd() const { return false; }
|
||||||
virtual int getHmdScreen() const { return -1; }
|
virtual int getHmdScreen() const { return -1; }
|
||||||
/// By default, all HMDs are stereo
|
/// By default, all HMDs are stereo
|
||||||
|
|
|
@ -58,6 +58,9 @@ public:
|
||||||
void unsuppressKeyboard() override;
|
void unsuppressKeyboard() override;
|
||||||
bool isKeyboardVisible() override;
|
bool isKeyboardVisible() override;
|
||||||
|
|
||||||
|
// Needs an additional thread for VR submission
|
||||||
|
int getRequiredThreadCount() const override { return Parent::getRequiredThreadCount() + 1; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool internalActivate() override;
|
bool internalActivate() override;
|
||||||
void internalDeactivate() override;
|
void internalDeactivate() override;
|
||||||
|
|
Loading…
Reference in a new issue