From 655f2c2b6f54c361ab69fce069fe8efc00ec2113 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Fri, 26 Jan 2018 00:42:03 +0200 Subject: [qt] Only use the MapRenderer as scheduler if there is no other Optimization of when running on the Main Thread that has a RunLoop. --- platform/qt/src/qmapboxgl_map_renderer.cpp | 26 +++++++++++++++++--------- 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(m_backend, pixelRatio, fs, tp, static_cast(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> taskQueue; - { - std::unique_lock lock(m_taskQueueMutex); - std::swap(taskQueue, m_taskQueue); - } + if (!m_threadWithScheduler) { + std::queue> taskQueue; + { + std::unique_lock 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> m_taskQueue; + + bool m_threadWithScheduler; }; -- cgit v1.2.1