From 08809b4d446940d31d777c787971ea6ae6b3fa1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Thu, 6 Oct 2016 16:10:09 +0200 Subject: [PATCH] [macos,ios] initialize util::RunLoop in SDK rather than by default --- platform/darwin/src/run_loop.cpp | 2 +- platform/ios/src/MGLMapView.mm | 8 ++++++++ platform/macos/src/MGLMapView.mm | 8 ++++++++ test/tile/raster_tile.test.cpp | 2 ++ test/tile/vector_tile.test.cpp | 2 ++ 5 files changed, 21 insertions(+), 1 deletion(-) diff --git a/platform/darwin/src/run_loop.cpp b/platform/darwin/src/run_loop.cpp index 6e9a1c50b..63bd8d2f5 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& current = *new ThreadLocal; -static RunLoop mainRunLoop; class RunLoop::Impl { public: @@ -22,6 +21,7 @@ RunLoop* RunLoop::Get() { RunLoop::RunLoop(Type) : impl(std::make_unique()) { + assert(!current.get()); current.set(this); impl->async = std::make_unique(std::bind(&RunLoop::process, this)); } diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm index 9067efc03..fd3725ecd 100644 --- a/platform/ios/src/MGLMapView.mm +++ b/platform/ios/src/MGLMapView.mm @@ -24,6 +24,7 @@ #include #include #include +#import #import "Mapbox.h" #import "MGLFeature_Private.h" @@ -126,6 +127,11 @@ enum { MGLAnnotationTagNotFound = UINT32_MAX }; /// the annotation itself. typedef std::map 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 8fca7b86f..d61b336c9 100644 --- a/platform/macos/src/MGLMapView.mm +++ b/platform/macos/src/MGLMapView.mm @@ -30,6 +30,7 @@ #import #import #import +#import #import #import @@ -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 a5a7e65b3..4e9e90732 100644 --- a/test/tile/raster_tile.test.cpp +++ b/test/tile/raster_tile.test.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -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 e22b88a61..fa75e2448 100644 --- a/test/tile/vector_tile.test.cpp +++ b/test/tile/vector_tile.test.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include @@ -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 };