From 5be5bab730ffd49fe501c7f24e5ed188c662c377 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Fri, 27 May 2016 15:44:06 +0300 Subject: [PATCH] [Qt] Share the same RunLoop if in the same thread --- platform/qt/src/qmapboxgl.cpp | 16 +++++++++++++++- platform/qt/src/qmapboxgl_p.hpp | 3 --- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index dd4cab056..ff9a08598 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #if QT_VERSION >= 0x050000 @@ -23,6 +24,7 @@ #include #include #include +#include #include @@ -67,6 +69,12 @@ static_assert(mbgl::underlying_type(QMapboxGL::MapChangeWillStartRenderingMap) = static_assert(mbgl::underlying_type(QMapboxGL::MapChangeDidFinishRenderingMap) == mbgl::underlying_type(mbgl::MapChangeDidFinishRenderingMap), "error"); static_assert(mbgl::underlying_type(QMapboxGL::MapChangeDidFinishRenderingMapFullyRendered) == mbgl::underlying_type(mbgl::MapChangeDidFinishRenderingMapFullyRendered), "error"); +namespace { + +QThreadStorage> loop; + +} + QMapboxGLSettings::QMapboxGLSettings() : m_mapMode(QMapboxGLSettings::ContinuousMap) , m_contextMode(QMapboxGLSettings::SharedGLContext) @@ -159,8 +167,14 @@ void QMapboxGLSettings::setAccessToken(const QString &token) QMapboxGL::QMapboxGL(QObject *parent_, const QMapboxGLSettings &settings) : QObject(parent_) - , d_ptr(new QMapboxGLPrivate(this, settings)) { + // Multiple QMapboxGL running on the same thread + // will share the same mbgl::util::RunLoop + if (!loop.hasLocalData()) { + loop.setLocalData(std::make_shared()); + } + + d_ptr = new QMapboxGLPrivate(this, settings); } QMapboxGL::~QMapboxGL() diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp index 1e52f4336..fdbfb7f2c 100644 --- a/platform/qt/src/qmapboxgl_p.hpp +++ b/platform/qt/src/qmapboxgl_p.hpp @@ -5,7 +5,6 @@ #include #include #include -#include #include #include @@ -34,8 +33,6 @@ public: QMapboxGL *q_ptr = nullptr; - mbgl::util::RunLoop loop; - std::unique_ptr fileSourceObj; std::unique_ptr mapObj;