summaryrefslogtreecommitdiffstats
path: root/src/core/jobs
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@epitech.eu>2014-02-10 22:00:54 +0100
committerSean Harmer <sean.harmer@kdab.com>2014-02-26 12:47:42 +0100
commit4f489c2b564c9284f4cdf27f96f17084fc9bab1b (patch)
tree453706c8af7dc1a9b28a8f2aff64a4b922a2a26a /src/core/jobs
parent2a9a67d1b1798128a40d65c9cb18399e28d46fcd (diff)
Separated sources in subfolders so as to have a clearer view of the code
Change-Id: I1f3d030310bd93e0919c94c75cea79461d05e0f2 Reviewed-by: Pasi Keränen <pasi.keranen@digia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src/core/jobs')
-rw-r--r--src/core/jobs/jobs.pri14
-rw-r--r--src/core/jobs/qjob.cpp59
-rw-r--r--src/core/jobs/qjob.h71
-rw-r--r--src/core/jobs/qjobmanager.cpp133
-rw-r--r--src/core/jobs/qjobmanager.h101
-rw-r--r--src/core/jobs/qjobmanagerinterface.h70
-rw-r--r--src/core/jobs/qjobproviderinterface.h60
-rw-r--r--src/core/jobs/weaverjob.cpp56
-rw-r--r--src/core/jobs/weaverjob_p.h62
9 files changed, 626 insertions, 0 deletions
diff --git a/src/core/jobs/jobs.pri b/src/core/jobs/jobs.pri
new file mode 100644
index 000000000..a644f5e80
--- /dev/null
+++ b/src/core/jobs/jobs.pri
@@ -0,0 +1,14 @@
+
+SOURCES += \
+ $$PWD/qjob.cpp \
+ $$PWD/qjobmanager.cpp \
+ $$PWD/weaverjob.cpp
+
+HEADERS += \
+ $$PWD/qjob.h \
+ $$PWD/qjobmanager.h \
+ $$PWD/qjobmanagerinterface.h \
+ $$PWD/qjobproviderinterface.h \
+ $$PWD/weaverjob_p.h
+
+INCLUDEPATH += $$PWD
diff --git a/src/core/jobs/qjob.cpp b/src/core/jobs/qjob.cpp
new file mode 100644
index 000000000..73dfabfe2
--- /dev/null
+++ b/src/core/jobs/qjob.cpp
@@ -0,0 +1,59 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qjob.h"
+
+namespace Qt3D {
+
+QJob::QJob()
+{
+}
+
+QJob::~QJob()
+{
+}
+
+void QJob::addDependency(QWeakPointer<QJob> dependency)
+{
+ m_dependencies.append(dependency);
+}
+
+} // namespace Qt3D
diff --git a/src/core/jobs/qjob.h b/src/core/jobs/qjob.h
new file mode 100644
index 000000000..c49907538
--- /dev/null
+++ b/src/core/jobs/qjob.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QT3D_QJOB_H
+#define QT3D_QJOB_H
+
+#include "qt3dcore_global.h"
+
+#include <QSharedPointer>
+#include <QVector>
+
+namespace Qt3D {
+
+class QJob
+{
+public:
+ QJob();
+ virtual ~QJob();
+
+ void addDependency(QWeakPointer<QJob> dependency);
+ const QVector<QWeakPointer<QJob> > &dependencies() const { return m_dependencies; }
+
+ virtual void run() = 0;
+
+private:
+ QVector<QWeakPointer<QJob> > m_dependencies;
+};
+
+typedef QSharedPointer<QJob> QJobPtr;
+
+} // namespace Qt3D
+
+#endif // QT3D_QJOB_H
diff --git a/src/core/jobs/qjobmanager.cpp b/src/core/jobs/qjobmanager.cpp
new file mode 100644
index 000000000..f8fab698b
--- /dev/null
+++ b/src/core/jobs/qjobmanager.cpp
@@ -0,0 +1,133 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qjobmanager.h"
+
+#include "weaverjob_p.h"
+
+#include <threadweaver.h>
+#include <dependencypolicy.h>
+#include <thread.h>
+
+#include <QAtomicInt>
+#include <QDebug>
+#include <QThread>
+
+namespace Qt3D {
+
+QJobManager::QJobManager(QObject *parent)
+ : QJobManagerInterface(parent)
+ , m_weaver(new ThreadWeaver::Queue(this))
+{
+ m_weaver->setMaximumNumberOfThreads(QThread::idealThreadCount());
+}
+
+void QJobManager::initialize()
+{
+}
+
+void QJobManager::enqueueJobs(const QVector<QJobPtr> &jobQueue)
+{
+ // Convert QJobs to ThreadWeaver::Jobs
+ QHash<QJob *, QSharedPointer<WeaverJob> > jobsMap;
+ Q_FOREACH (const QJobPtr &job, jobQueue) {
+ QSharedPointer<WeaverJob> weaverJob(new WeaverJob);
+ weaverJob->m_job = job;
+ jobsMap.insert(job.data(), weaverJob);
+ }
+
+ // Resolve dependencies
+ Q_FOREACH (const QJobPtr &job, jobQueue) {
+ const QVector<QWeakPointer<QJob> > &deps = job->dependencies();
+
+ Q_FOREACH (const QWeakPointer<QJob> &dep, deps) {
+ QSharedPointer<WeaverJob> weaverDep = jobsMap.value(dep.data());
+
+ if (weaverDep) {
+ ThreadWeaver::DependencyPolicy &dependencyPolicy = ThreadWeaver::DependencyPolicy::instance();
+ QSharedPointer<WeaverJob> weaverJob = jobsMap.value(job.data());
+ dependencyPolicy.addDependency(weaverJob, weaverDep);
+ }
+ }
+ }
+
+ Q_FOREACH (const QJobPtr &job, jobQueue) {
+ QSharedPointer<WeaverJob> weaverJob = jobsMap.value(job.data());
+ m_weaver->enqueue(weaverJob);
+ }
+}
+
+void QJobManager::waitForAllJobs()
+{
+ m_weaver->finish();
+}
+
+void QJobManager::SynchronizedJob::run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread)
+{
+ Q_UNUSED(self);
+ Q_CHECK_PTR(m_func);
+ Q_CHECK_PTR(thread);
+
+ // Call the function
+ m_func(m_arg);
+
+ // Decrement the atomic counter to let others know we've done our bit
+ m_atomicCount->deref();
+
+ // Wait for the other worker threads to be done
+ while (m_atomicCount->load() > 0)
+ thread->yieldCurrentThread();
+}
+
+void QJobManager::waitForPerThreadFunction(JobFunction func, void *arg)
+{
+ const int threadCount = m_weaver->maximumNumberOfThreads();
+ QAtomicInt atomicCount(threadCount);
+
+ for (int i = 0; i < threadCount; ++i) {
+ QJobManager::SynchronizedJobPtr syncJob(new QJobManager::SynchronizedJob(func, arg, &atomicCount));
+ m_weaver->enqueue(syncJob);
+ }
+
+ m_weaver->finish();
+}
+
+} // namespace Qt3D
diff --git a/src/core/jobs/qjobmanager.h b/src/core/jobs/qjobmanager.h
new file mode 100644
index 000000000..a5f4e7b27
--- /dev/null
+++ b/src/core/jobs/qjobmanager.h
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QT3D_QJOBMANAGER_H
+#define QT3D_QJOBMANAGER_H
+
+#include "qjobmanagerinterface.h"
+#include "qt3dcore_global.h"
+
+#include "qjob.h"
+
+#include <job.h>
+
+#include <QVector>
+
+namespace ThreadWeaver {
+class Queue;
+}
+
+namespace Qt3D {
+
+class QJobManager : public QJobManagerInterface
+{
+ Q_OBJECT
+public:
+ explicit QJobManager(QObject *parent = 0);
+
+ void initialize() Q_DECL_OVERRIDE;
+
+ void enqueueJobs(const QVector<QJobPtr> &jobQueue) Q_DECL_OVERRIDE;
+
+ void waitForAllJobs() Q_DECL_OVERRIDE;
+
+ void waitForPerThreadFunction(JobFunction func, void *arg) Q_DECL_OVERRIDE;
+
+protected:
+ class SynchronizedJob : public ThreadWeaver::Job
+ {
+ public:
+ SynchronizedJob(JobFunction func, void *arg, QAtomicInt *atomicCount)
+ : m_func(func)
+ , m_arg(arg)
+ , m_atomicCount(atomicCount)
+ {}
+
+ protected:
+ void run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread) Q_DECL_OVERRIDE;
+
+ private:
+ JobFunction m_func;
+ void *m_arg;
+ QAtomicInt *m_atomicCount;
+ };
+
+ typedef QSharedPointer<SynchronizedJob> SynchronizedJobPtr;
+
+private:
+ ThreadWeaver::Queue *m_weaver;
+};
+
+} // namespace Qt3D
+
+#endif // QT3D_QJOBMANAGER_H
diff --git a/src/core/jobs/qjobmanagerinterface.h b/src/core/jobs/qjobmanagerinterface.h
new file mode 100644
index 000000000..a003d1198
--- /dev/null
+++ b/src/core/jobs/qjobmanagerinterface.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QJOBMANAGERINTERFACE_H
+#define QJOBMANAGERINTERFACE_H
+
+#include <QObject>
+
+#include "qjob.h"
+
+namespace Qt3D {
+
+class QJobManagerInterface : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QJobManagerInterface(QObject *parent = 0)
+ : QObject(parent)
+ {}
+
+ virtual void initialize() {}
+ virtual void enqueueJobs(const QVector<QJobPtr> &jobQueue) = 0;
+ virtual void waitForAllJobs() = 0;
+
+ // Callback signature for running SynchronizedJobs
+ typedef void (*JobFunction)(void *);
+ virtual void waitForPerThreadFunction(JobFunction func, void *arg) = 0;
+};
+
+} // namespace Qt3D
+
+#endif // QJOBMANAGERINTERFACE_H
diff --git a/src/core/jobs/qjobproviderinterface.h b/src/core/jobs/qjobproviderinterface.h
new file mode 100644
index 000000000..891e44fff
--- /dev/null
+++ b/src/core/jobs/qjobproviderinterface.h
@@ -0,0 +1,60 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QT3D_QJOBPROVIDERINTERFACE_H
+#define QT3D_QJOBPROVIDERINTERFACE_H
+
+#include "qt3dcore_global.h"
+#include "qjob.h"
+
+#include <QVector>
+
+namespace Qt3D {
+
+class QJobProviderInterface
+{
+public:
+ virtual QVector<QJobPtr> jobsToExecute() = 0;
+};
+
+}
+
+#endif // QT3D_QJOBPROVIDERINTERFACE_H
diff --git a/src/core/jobs/weaverjob.cpp b/src/core/jobs/weaverjob.cpp
new file mode 100644
index 000000000..c3b41e745
--- /dev/null
+++ b/src/core/jobs/weaverjob.cpp
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "weaverjob_p.h"
+
+namespace Qt3D {
+
+WeaverJob::WeaverJob()
+{
+}
+
+void WeaverJob::run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread)
+{
+ if (m_job)
+ m_job->run();
+}
+
+} // namespace Qt3D
diff --git a/src/core/jobs/weaverjob_p.h b/src/core/jobs/weaverjob_p.h
new file mode 100644
index 000000000..5f93ac3cc
--- /dev/null
+++ b/src/core/jobs/weaverjob_p.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Klaralvdalens Datakonsult AB (KDAB).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the Qt3D module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QT3D_WEAVERJOB_H
+#define QT3D_WEAVERJOB_H
+
+#include <job.h>
+#include "qjob.h"
+
+namespace Qt3D {
+
+class WeaverJob : public ThreadWeaver::Job
+{
+public:
+ WeaverJob();
+
+ void run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread) Q_DECL_OVERRIDE;
+
+ QJobPtr m_job;
+};
+
+} // namespace Qt3D
+
+#endif // QT3D_WEAVERJOB_H