From: Gunnar Sletta Date: Thu, 7 Aug 2014 09:31:23 +0000 (+0200) Subject: Merge branch '5.3' into dev X-Git-Tag: v5.3.99+beta1~193^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9737b35ac0638dd301b670e940f4e424aab4b4f3;p=platform%2Fupstream%2Fqtdeclarative.git Merge branch '5.3' into dev Conflicts: src/quick/items/context2d/qquickcontext2d.cpp src/quick/items/context2d/qquickcontext2dtexture.cpp Change-Id: I1a9b911b3a92333a5dddbaf43275f71bad2006f0 --- 9737b35ac0638dd301b670e940f4e424aab4b4f3 diff --cc src/qml/qml/qqmlcomponent.cpp index 616f54d,b5af502..e087785 --- a/src/qml/qml/qqmlcomponent.cpp +++ b/src/qml/qml/qqmlcomponent.cpp @@@ -1542,9 -1540,8 +1542,8 @@@ void QmlIncubatorObject::statusChanged( callData->args[0] = QV4::Primitive::fromUInt32(s); f->call(callData); if (scope.hasException()) { - ctx->catchException(); QQmlError error = QV4::ExecutionEngine::catchExceptionAsQmlError(ctx); - QQmlEnginePrivate::warning(QQmlEnginePrivate::get(v8->engine()), error); + QQmlEnginePrivate::warning(QQmlEnginePrivate::get(d()->v8->engine()), error); } } } diff --cc src/quick/items/context2d/qquickcontext2d.cpp index 4b70934,7964f65..57c7bd4 --- a/src/quick/items/context2d/qquickcontext2d.cpp +++ b/src/quick/items/context2d/qquickcontext2d.cpp @@@ -4024,13 -4084,8 +4024,15 @@@ public QOffscreenSurface *surface; }; +class QQuickContext2DTextureCleanup : public QRunnable +{ +public: + QQuickContext2DTexture *texture; + void run() Q_DECL_OVERRIDE { delete texture; } +}; + + QMutex QQuickContext2D::mutex; + QQuickContext2D::QQuickContext2D(QObject *parent) : QQuickCanvasContext(parent) , m_buffer(new QQuickContext2DCommandBuffer) @@@ -4059,13 -4116,7 +4063,13 @@@ QQuickContext2D::~QQuickContext2D( cleaner->moveToThread(m_texture->thread()); cleaner->deleteLater(); } else { - m_texture->deleteLater(); + if (m_canvas->window()) { + QQuickContext2DTextureCleanup *c = new QQuickContext2DTextureCleanup; + c->texture = m_texture; + m_canvas->window()->scheduleRenderJob(c, QQuickWindow::AfterSynchronizingStage); + } else { - delete m_texture; ++ m_texture->deleteLater(); + } } } else { // Image based does not have GL resources, but must still be deleted diff --cc src/quick/items/context2d/qquickcontext2dtexture.cpp index 7e88e18,c8bea6f..17d4fea --- a/src/quick/items/context2d/qquickcontext2dtexture.cpp +++ b/src/quick/items/context2d/qquickcontext2dtexture.cpp @@@ -500,18 -501,18 +509,18 @@@ bool QQuickContext2DFBOTexture::doMulti void QQuickContext2DFBOTexture::grabImage(const QRectF& rf) { Q_ASSERT(rf.isValid()); - if (!m_fbo) { - m_context->setGrabbedImage(QImage()); - return; - } - - QImage grabbed; - { - GLAcquireContext ctx(m_context->glContext(), m_context->surface()); - grabbed = m_fbo->toImage().scaled(m_fboSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation).mirrored().copy(rf.toRect()); + QQuickContext2D::mutex.lock(); + if (m_context) { + if (!m_fbo) { + m_context->setGrabbedImage(QImage()); + } else { + QImage grabbed; + GLAcquireContext ctx(m_gl, m_surface); - grabbed = m_fbo->toImage().mirrored().copy(rf.toRect()); ++ grabbed = m_fbo->toImage().scaled(m_fboSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation).mirrored().copy(rf.toRect()); + m_context->setGrabbedImage(grabbed); + } } - - m_context->setGrabbedImage(grabbed); + QQuickContext2D::mutex.unlock(); } void QQuickContext2DFBOTexture::compositeTile(QQuickContext2DTile* tile)