aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@nokia.com>2011-05-05 10:03:04 +0200
committerGunnar Sletta <gunnar.sletta@nokia.com>2011-05-05 10:03:04 +0200
commit7983f0df7f734d250d6e4cb1b5d91fa12b2c2df1 (patch)
tree9bf8dbe8dbc52dc5e07ac98685cb24b092e19d26 /src
parent1332e9277cf68b0232abf666cd0c27c39b766ef1 (diff)
Enable the threaded renderer.
Disable by specifying QML_NO_THREADED_RENDERER if this causes problems
Diffstat (limited to 'src')
-rw-r--r--src/declarative/items/qsgcanvas.cpp62
-rw-r--r--src/declarative/items/qsgcanvas.h4
-rw-r--r--src/declarative/items/qsgcanvas_p.h15
3 files changed, 27 insertions, 54 deletions
diff --git a/src/declarative/items/qsgcanvas.cpp b/src/declarative/items/qsgcanvas.cpp
index 5d5c49d981..1ac14a0dea 100644
--- a/src/declarative/items/qsgcanvas.cpp
+++ b/src/declarative/items/qsgcanvas.cpp
@@ -61,7 +61,7 @@
QT_BEGIN_NAMESPACE
-DEFINE_BOOL_CONFIG_OPTION(qmlThreadedRenderer, QML_THREADED_RENDERER)
+DEFINE_BOOL_CONFIG_OPTION(qmlNoThreadedRenderer, QML_NO_THREADED_RENDERER)
DEFINE_BOOL_CONFIG_OPTION(qmlFixedAnimationStep, QML_FIXED_ANIMATION_STEP)
/*
@@ -97,24 +97,6 @@ int sceneGraphRenderTime;
int readbackTime;
#endif
-
-class QSGAnimationDriver : public QAnimationDriver
-{
-public:
- QSGAnimationDriver(QWidget *w, QObject *parent)
- : QAnimationDriver(parent), widget(w)
- {
- Q_ASSERT(w);
- }
-
- void started()
- {
- widget->update();
- }
-
- QWidget *widget;
-};
-
QSGItem::UpdatePaintNodeData::UpdatePaintNodeData()
: transformNode(0)
{
@@ -124,34 +106,26 @@ QSGRootItem::QSGRootItem()
{
}
-QSGThreadedRendererAnimationDriver::QSGThreadedRendererAnimationDriver(QSGCanvasPrivate *r, QObject *parent)
- : QAnimationDriver(parent)
- , renderer(r)
-{
-}
-
-void QSGThreadedRendererAnimationDriver::started()
+void QSGCanvasPrivate::_q_animationStarted()
{
#ifdef THREAD_DEBUG
qWarning("AnimationDriver: Main Thread: started");
#endif
- renderer->mutex.lock();
- renderer->animationRunning = true;
- if (renderer->idle)
- renderer->wait.wakeOne();
- renderer->mutex.unlock();
-
-
+ mutex.lock();
+ animationRunning = true;
+ if (idle)
+ wait.wakeOne();
+ mutex.unlock();
}
-void QSGThreadedRendererAnimationDriver::stopped()
+void QSGCanvasPrivate::_q_animationStopped()
{
#ifdef THREAD_DEBUG
qWarning("AnimationDriver: Main Thread: stopped");
#endif
- renderer->mutex.lock();
- renderer->animationRunning = false;
- renderer->mutex.unlock();
+ mutex.lock();
+ animationRunning = false;
+ mutex.unlock();
}
void QSGCanvas::paintEvent(QPaintEvent *)
@@ -238,8 +212,11 @@ void QSGCanvas::showEvent(QShowEvent *e)
if (d->threadedRendering) {
d->contextInThread = true;
doneCurrent();
- if (!d->animationDriver)
- d->animationDriver = new QSGThreadedRendererAnimationDriver(d, this);
+ if (!d->animationDriver) {
+ d->animationDriver = new QAnimationDriver(this);
+ connect(d->animationDriver, SIGNAL(started()), this, SLOT(_q_animationStarted()), Qt::DirectConnection);
+ connect(d->animationDriver, SIGNAL(stopped()), this, SLOT(_q_animationStopped()), Qt::DirectConnection);
+ }
d->animationDriver->install();
d->mutex.lock();
d->thread->start();
@@ -250,7 +227,8 @@ void QSGCanvas::showEvent(QShowEvent *e)
if (!d->context || !d->context->isReady()) {
d->initializeSceneGraph();
- d->animationDriver = new QSGAnimationDriver(this, this);
+ d->animationDriver = new QAnimationDriver(this);
+ connect(d->animationDriver, SIGNAL(started()), this, SLOT(update()));
}
d->animationDriver->install();
@@ -471,7 +449,7 @@ QSGCanvasPrivate::QSGCanvasPrivate()
, thread(new MyThread(this))
, animationDriver(0)
{
- threadedRendering = qmlThreadedRenderer();
+ threadedRendering = !qmlNoThreadedRenderer();
}
QSGCanvasPrivate::~QSGCanvasPrivate()
@@ -1894,4 +1872,6 @@ QSGEngine *QSGCanvas::sceneGraphEngine() const
return 0;
}
+#include "moc_qsgcanvas.cpp"
+
QT_END_NAMESPACE
diff --git a/src/declarative/items/qsgcanvas.h b/src/declarative/items/qsgcanvas.h
index 8f3b3038f8..d076d098ab 100644
--- a/src/declarative/items/qsgcanvas.h
+++ b/src/declarative/items/qsgcanvas.h
@@ -105,7 +105,9 @@ private slots:
void maybeUpdate();
private:
- Q_DISABLE_COPY(QSGCanvas);
+ Q_DISABLE_COPY(QSGCanvas)
+ Q_PRIVATE_SLOT(d_func(), void _q_animationStarted())
+ Q_PRIVATE_SLOT(d_func(), void _q_animationStopped())
};
QT_END_NAMESPACE
diff --git a/src/declarative/items/qsgcanvas_p.h b/src/declarative/items/qsgcanvas_p.h
index 63bd2dfb28..c0aabaadd8 100644
--- a/src/declarative/items/qsgcanvas_p.h
+++ b/src/declarative/items/qsgcanvas_p.h
@@ -77,18 +77,6 @@ public:
class QSGCanvasPrivate;
-class QSGThreadedRendererAnimationDriver : public QAnimationDriver
-{
-public:
- QSGThreadedRendererAnimationDriver(QSGCanvasPrivate *r, QObject *parent);
-
-protected:
- virtual void started();
- virtual void stopped();
-
- QSGCanvasPrivate *renderer;
-};
-
class QTouchEvent;
class QSGCanvasPrivate : public QGLWidgetPrivate
{
@@ -148,6 +136,9 @@ public:
void renderSceneGraph();
void runThread();
+ void _q_animationStarted();
+ void _q_animationStopped();
+
QSGItem::UpdatePaintNodeData updatePaintNodeData;
QSGItem *dirtyItemList;