summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2016-10-06 16:10:09 +0200
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-10-06 10:16:45 -0700
commit08809b4d446940d31d777c787971ea6ae6b3fa1c (patch)
treea155f96340b8d1b421eb73cea6eeefcb009b629f
parent7bcb04a609415132db112b02507118835d519e36 (diff)
downloadqtlocation-mapboxgl-08809b4d446940d31d777c787971ea6ae6b3fa1c.tar.gz
[macos,ios] initialize util::RunLoop in SDK rather than by default
-rw-r--r--platform/darwin/src/run_loop.cpp2
-rw-r--r--platform/ios/src/MGLMapView.mm8
-rw-r--r--platform/macos/src/MGLMapView.mm8
-rw-r--r--test/tile/raster_tile.test.cpp2
-rw-r--r--test/tile/vector_tile.test.cpp2
5 files changed, 21 insertions, 1 deletions
diff --git a/platform/darwin/src/run_loop.cpp b/platform/darwin/src/run_loop.cpp
index 6e9a1c50b0..63bd8d2f53 100644
--- a/platform/darwin/src/run_loop.cpp
+++ b/platform/darwin/src/run_loop.cpp
@@ -8,7 +8,6 @@ namespace mbgl {
namespace util {
static ThreadLocal<RunLoop>& current = *new ThreadLocal<RunLoop>;
-static RunLoop mainRunLoop;
class RunLoop::Impl {
public:
@@ -22,6 +21,7 @@ RunLoop* RunLoop::Get() {
RunLoop::RunLoop(Type)
: impl(std::make_unique<Impl>()) {
+ assert(!current.get());
current.set(this);
impl->async = std::make_unique<AsyncTask>(std::bind(&RunLoop::process, this));
}
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 9067efc033..fd3725ecd2 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -24,6 +24,7 @@
#include <mbgl/util/projection.hpp>
#include <mbgl/util/default_styles.hpp>
#include <mbgl/util/chrono.hpp>
+#import <mbgl/util/run_loop.hpp>
#import "Mapbox.h"
#import "MGLFeature_Private.h"
@@ -126,6 +127,11 @@ enum { MGLAnnotationTagNotFound = UINT32_MAX };
/// the annotation itself.
typedef std::map<MGLAnnotationTag, MGLAnnotationContext> MGLAnnotationContextMap;
+/// Initializes the run loop shim that lives on the main thread.
+void MGLinitializeRunLoop() {
+ static mbgl::util::RunLoop mainRunLoop;
+}
+
mbgl::util::UnitBezier MGLUnitBezierForMediaTimingFunction(CAMediaTimingFunction *function)
{
if ( ! function)
@@ -357,6 +363,8 @@ public:
- (void)commonInit
{
+ MGLinitializeRunLoop();
+
_isTargetingInterfaceBuilder = NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent;
_opaque = YES;
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index 8fca7b86ff..d61b336c9f 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -30,6 +30,7 @@
#import <mbgl/math/wrap.hpp>
#import <mbgl/util/constants.hpp>
#import <mbgl/util/chrono.hpp>
+#import <mbgl/util/run_loop.hpp>
#import <unordered_map>
#import <unordered_set>
@@ -112,6 +113,11 @@ NSImage *MGLDefaultMarkerImage() {
return [[NSImage alloc] initWithContentsOfFile:path];
}
+/// Initializes the run loop shim that lives on the main thread.
+void MGLinitializeRunLoop() {
+ static mbgl::util::RunLoop mainRunLoop;
+}
+
/// Converts a media timing function into a unit bezier object usable in mbgl.
mbgl::util::UnitBezier MGLUnitBezierForMediaTimingFunction(CAMediaTimingFunction *function) {
if (!function) {
@@ -234,6 +240,8 @@ public:
}
- (void)commonInit {
+ MGLinitializeRunLoop();
+
_isTargetingInterfaceBuilder = NSProcessInfo.processInfo.mgl_isInterfaceBuilderDesignablesAgent;
// Set up cross-platform controllers and resources.
diff --git a/test/tile/raster_tile.test.cpp b/test/tile/raster_tile.test.cpp
index a5a7e65b35..4e9e907321 100644
--- a/test/tile/raster_tile.test.cpp
+++ b/test/tile/raster_tile.test.cpp
@@ -4,6 +4,7 @@
#include <mbgl/tile/tile_loader_impl.hpp>
#include <mbgl/actor/thread_pool.hpp>
+#include <mbgl/util/run_loop.hpp>
#include <mbgl/map/transform.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/style/update_parameters.hpp>
@@ -15,6 +16,7 @@ class RasterTileTest {
public:
FakeFileSource fileSource;
TransformState transformState;
+ util::RunLoop loop;
ThreadPool threadPool { 1 };
AnnotationManager annotationManager { 1.0 };
style::Style style { fileSource, 1.0 };
diff --git a/test/tile/vector_tile.test.cpp b/test/tile/vector_tile.test.cpp
index e22b88a61d..fa75e24480 100644
--- a/test/tile/vector_tile.test.cpp
+++ b/test/tile/vector_tile.test.cpp
@@ -4,6 +4,7 @@
#include <mbgl/tile/tile_loader_impl.hpp>
#include <mbgl/actor/thread_pool.hpp>
+#include <mbgl/util/run_loop.hpp>
#include <mbgl/map/transform.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/style/update_parameters.hpp>
@@ -15,6 +16,7 @@ class VectorTileTest {
public:
FakeFileSource fileSource;
TransformState transformState;
+ util::RunLoop loop;
ThreadPool threadPool { 1 };
AnnotationManager annotationManager { 1.0 };
style::Style style { fileSource, 1.0 };