diff options
author | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2018-01-26 00:42:03 +0200 |
---|---|---|
committer | Thiago Marcos P. Santos <tmpsantos@gmail.com> | 2018-02-09 20:28:54 +0200 |
commit | a4e95c3da322113f8db732133cb9541a38accbaf (patch) | |
tree | 530fed79c1ca79022bbbb258979e8e3a9e24c824 /platform/qt | |
parent | 4f8a23cd8fe920ca7009e0ca6689d0c5bcb8c7eb (diff) | |
download | qtlocation-mapboxgl-a4e95c3da322113f8db732133cb9541a38accbaf.tar.gz |
[qt] Only use the MapRenderer as scheduler if there is no other
Optimization of when running on the Main Thread that has a RunLoop.
Diffstat (limited to 'platform/qt')
-rw-r--r-- | platform/qt/src/qmapboxgl_map_renderer.cpp | 26 | ||||
-rw-r--r-- | platform/qt/src/qmapboxgl_map_renderer.hpp | 2 |
2 files changed, 19 insertions, 9 deletions
diff --git a/platform/qt/src/qmapboxgl_map_renderer.cpp b/platform/qt/src/qmapboxgl_map_renderer.cpp index 65fb37f094..81293d7da1 100644 --- a/platform/qt/src/qmapboxgl_map_renderer.cpp +++ b/platform/qt/src/qmapboxgl_map_renderer.cpp @@ -5,6 +5,7 @@ QMapboxGLMapRenderer::QMapboxGLMapRenderer(qreal pixelRatio, mbgl::DefaultFileSource &fs, mbgl::ThreadPool &tp, QMapboxGLSettings::GLContextMode mode) : m_renderer(std::make_unique<mbgl::Renderer>(m_backend, pixelRatio, fs, tp, static_cast<mbgl::GLContextMode>(mode))) + , m_threadWithScheduler(Scheduler::GetCurrent() != nullptr) { } @@ -48,19 +49,26 @@ void QMapboxGLMapRenderer::render() // The OpenGL implementation automatically enables the OpenGL context for us. mbgl::BackendScope scope(m_backend, mbgl::BackendScope::ScopeType::Implicit); - Scheduler::SetCurrent(this); + // If we don't have a Scheduler on this thread, which + // is usually the case for render threads, use this + // object as scheduler. + if (!m_threadWithScheduler) { + Scheduler::SetCurrent(this); + } m_renderer->render(*params); - std::queue<std::weak_ptr<mbgl::Mailbox>> taskQueue; - { - std::unique_lock<std::mutex> lock(m_taskQueueMutex); - std::swap(taskQueue, m_taskQueue); - } + if (!m_threadWithScheduler) { + std::queue<std::weak_ptr<mbgl::Mailbox>> taskQueue; + { + std::unique_lock<std::mutex> lock(m_taskQueueMutex); + std::swap(taskQueue, m_taskQueue); + } - while (!taskQueue.empty()) { - mbgl::Mailbox::maybeReceive(taskQueue.front()); - taskQueue.pop(); + while (!taskQueue.empty()) { + mbgl::Mailbox::maybeReceive(taskQueue.front()); + taskQueue.pop(); + } } } diff --git a/platform/qt/src/qmapboxgl_map_renderer.hpp b/platform/qt/src/qmapboxgl_map_renderer.hpp index e5ead3df32..c15840a85d 100644 --- a/platform/qt/src/qmapboxgl_map_renderer.hpp +++ b/platform/qt/src/qmapboxgl_map_renderer.hpp @@ -48,4 +48,6 @@ private: std::mutex m_taskQueueMutex; std::queue<std::weak_ptr<mbgl::Mailbox>> m_taskQueue; + + bool m_threadWithScheduler; }; |