diff options
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | common/curl_request.cpp | 2 | ||||
-rw-r--r-- | common/foundation_request.mm | 31 | ||||
-rw-r--r-- | common/glfw_view.hpp | 4 | ||||
-rw-r--r-- | include/mbgl/map/map.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/map/transform.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/platform/platform.hpp | 8 | ||||
-rw-r--r-- | include/mbgl/platform/request.hpp | 9 | ||||
-rw-r--r-- | include/mbgl/style/style.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/util/filesource.hpp | 6 | ||||
-rw-r--r-- | include/mbgl/util/time.hpp | 7 | ||||
-rw-r--r-- | include/mbgl/util/uv.hpp | 154 | ||||
-rw-r--r-- | include/mbgl/util/uv_detail.hpp | 158 | ||||
m--------- | ios/mapbox-gl-cocoa | 0 | ||||
-rw-r--r-- | linux/main.cpp | 1 | ||||
-rw-r--r-- | mapboxgl.gyp | 45 | ||||
-rw-r--r-- | src/map/map.cpp | 7 | ||||
-rw-r--r-- | src/map/sprite.cpp | 2 | ||||
-rw-r--r-- | src/map/tile_data.cpp | 1 | ||||
-rw-r--r-- | src/map/transform.cpp | 5 | ||||
-rw-r--r-- | src/platform/request.cpp | 2 | ||||
-rw-r--r-- | src/style/style.cpp | 5 | ||||
-rw-r--r-- | src/text/glyph_store.cpp | 2 | ||||
-rw-r--r-- | src/util/raster.cpp | 2 | ||||
-rw-r--r-- | src/util/time.cpp | 12 | ||||
-rw-r--r-- | src/util/uv.cpp | 19 | ||||
-rw-r--r-- | test/fixtures/fixture_request.cpp | 2 | ||||
-rw-r--r-- | test/test.gyp | 1 |
28 files changed, 260 insertions, 233 deletions
@@ -27,7 +27,7 @@ build/test/Makefile: src common config.gypi test/test.gyp test: build/test/Makefile $(MAKE) -C build/test BUILDTYPE=Testing V=$(V) test -test/%: build/test/Makefile +test_%: build/test/Makefile $(MAKE) -C build/test BUILDTYPE=Testing V=$(V) $* (cd build/Testing && exec ./test_$*) diff --git a/common/curl_request.cpp b/common/curl_request.cpp index b7e5e8b5cc..88b7712f66 100644 --- a/common/curl_request.cpp +++ b/common/curl_request.cpp @@ -1,7 +1,7 @@ #include <mbgl/platform/platform.hpp> #include <mbgl/platform/request.hpp> -#include <mbgl/util/uv.hpp> +#include <mbgl/util/uv_detail.hpp> #include <mbgl/util/std.hpp> #include <queue> diff --git a/common/foundation_request.mm b/common/foundation_request.mm index 4684ff55fb..b7eafdb96c 100644 --- a/common/foundation_request.mm +++ b/common/foundation_request.mm @@ -12,28 +12,15 @@ #include <mbgl/platform/request.hpp> #include <mbgl/platform/platform.hpp> #include <mbgl/util/std.hpp> -#include <uv.h> +#include <mbgl/util/uv.hpp> -uv_once_t request_initialize = UV_ONCE_INIT; +dispatch_once_t request_initialize = 0; NSURLSession *session = nullptr; #if TARGET_OS_IPHONE std::atomic<int> active_tasks; #endif -void request_initialize_cb() { - NSURLSessionConfiguration *sessionConfig = - [NSURLSessionConfiguration defaultSessionConfiguration]; - sessionConfig.timeoutIntervalForResource = 30; - sessionConfig.HTTPMaximumConnectionsPerHost = 8; - sessionConfig.requestCachePolicy = NSURLRequestUseProtocolCachePolicy; - - session = [NSURLSession sessionWithConfiguration:sessionConfig]; - -#if TARGET_OS_IPHONE - active_tasks = 0; -#endif -} // We're using a child class to make sure ARC is working correctly, as well as to add activity // indicators on iOS. @@ -69,7 +56,19 @@ std::shared_ptr<mbgl::platform::Request> mbgl::platform::request_http(const std::string &url, std::function<void(Response *)> callback, std::shared_ptr<uv::loop> loop) { - uv_once(&request_initialize, request_initialize_cb); + dispatch_once(&request_initialize, ^{ + NSURLSessionConfiguration *sessionConfig = + [NSURLSessionConfiguration defaultSessionConfiguration]; + sessionConfig.timeoutIntervalForResource = 30; + sessionConfig.HTTPMaximumConnectionsPerHost = 8; + sessionConfig.requestCachePolicy = NSURLRequestUseProtocolCachePolicy; + + session = [NSURLSession sessionWithConfiguration:sessionConfig]; + +#if TARGET_OS_IPHONE + active_tasks = 0; +#endif + }); std::shared_ptr<FoundationRequest> req = std::make_shared<FoundationRequest>(url, callback, loop); diff --git a/common/glfw_view.hpp b/common/glfw_view.hpp index efef3431a9..d2f6872fc7 100644 --- a/common/glfw_view.hpp +++ b/common/glfw_view.hpp @@ -9,8 +9,6 @@ #endif #include <GLFW/glfw3.h> -#include <uv.h> - class GLFWView : public mbgl::View { public: GLFWView(bool fullscreen = false); @@ -43,8 +41,6 @@ public: double last_click = -1; GLFWwindow *window = nullptr; - - uv_loop_t *loop = nullptr; }; #endif diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index be01b456cc..554962c713 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -156,7 +156,7 @@ private: private: bool async = false; std::shared_ptr<uv::loop> loop; - uv_thread_t thread; + std::unique_ptr<uv::thread> thread; uv_async_t *async_terminate = nullptr; uv_async_t *async_render = nullptr; uv_async_t *async_cleanup = nullptr; diff --git a/include/mbgl/map/transform.hpp b/include/mbgl/map/transform.hpp index df7839ea96..d0f56b7fba 100644 --- a/include/mbgl/map/transform.hpp +++ b/include/mbgl/map/transform.hpp @@ -80,7 +80,7 @@ private: private: View &view; - mutable uv::rwlock mtx; + std::unique_ptr<uv::rwlock> mtx; // This reflects the current state of the transform, representing the actual position of the // map. After calling a transform function with a timer, this will likely remain the same until diff --git a/include/mbgl/platform/platform.hpp b/include/mbgl/platform/platform.hpp index 02aeb594b6..43c6ce4f5e 100644 --- a/include/mbgl/platform/platform.hpp +++ b/include/mbgl/platform/platform.hpp @@ -1,16 +1,12 @@ #ifndef MBGL_PLATFORM_PLATFORM #define MBGL_PLATFORM_PLATFORM +#include <mbgl/util/uv.hpp> + #include <memory> #include <functional> #include <string> -typedef struct uv_loop_s uv_loop_t; - -namespace uv { -class loop; -} - namespace mbgl { namespace platform { diff --git a/include/mbgl/platform/request.hpp b/include/mbgl/platform/request.hpp index 7d2da8888c..0cbacf645d 100644 --- a/include/mbgl/platform/request.hpp +++ b/include/mbgl/platform/request.hpp @@ -7,14 +7,7 @@ #include <atomic> #include <mbgl/util/noncopyable.hpp> - -// Forward definition. -typedef struct uv_loop_s uv_loop_t; -typedef struct uv_async_s uv_async_t; - -namespace uv { -class loop; -} +#include <mbgl/util/uv.hpp> namespace mbgl { namespace platform { diff --git a/include/mbgl/style/style.hpp b/include/mbgl/style/style.hpp index 3df58ab42b..1f24674e42 100644 --- a/include/mbgl/style/style.hpp +++ b/include/mbgl/style/style.hpp @@ -62,7 +62,7 @@ private: PropertyTransition defaultTransition; bool initial_render_complete = false; - mutable uv::rwlock mtx; + std::unique_ptr<uv::rwlock> mtx; }; } diff --git a/include/mbgl/util/filesource.hpp b/include/mbgl/util/filesource.hpp index 0d339cbac7..18c63ddfeb 100644 --- a/include/mbgl/util/filesource.hpp +++ b/include/mbgl/util/filesource.hpp @@ -1,14 +1,12 @@ #ifndef MBGL_UTIL_FILESOURCE #define MBGL_UTIL_FILESOURCE +#include <mbgl/util/uv.hpp> + #include <string> #include <memory> #include <functional> -namespace uv { -class loop; -} - namespace mbgl { namespace platform { diff --git a/include/mbgl/util/time.hpp b/include/mbgl/util/time.hpp index eacee2c982..9d61edf75e 100644 --- a/include/mbgl/util/time.hpp +++ b/include/mbgl/util/time.hpp @@ -1,7 +1,7 @@ #ifndef MBGL_UTIL_TIME #define MBGL_UTIL_TIME -#include <uv.h> +#include <cstdint> namespace mbgl { @@ -13,9 +13,8 @@ namespace util { // Returns time in nanoseconds since an arbitrary point in the past. This has // no relation to the current time, but is continuously increasing, so // comparisons between different timestamps produce meaningful values. -inline timestamp now() { - return uv_hrtime(); -} +timestamp now(); + } // used for time conversions diff --git a/include/mbgl/util/uv.hpp b/include/mbgl/util/uv.hpp index 518e007afe..4ceb8b873f 100644 --- a/include/mbgl/util/uv.hpp +++ b/include/mbgl/util/uv.hpp @@ -1,159 +1,19 @@ #ifndef MBGL_UTIL_UV #define MBGL_UTIL_UV -#include <uv.h> -#include <functional> -#include <cassert> - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-parameter" -#endif - -#include <boost/lockfree/queue.hpp> - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - #include <string> +typedef struct uv_async_s uv_async_t; +typedef struct uv_handle_s uv_handle_t; +typedef struct uv_loop_s uv_loop_t; namespace uv { -inline std::string cwd() { - size_t max = 0; - std::string dir; - do { - max += 256; - dir.resize(max); - uv_cwd(const_cast<char *>(dir.data()), &max); - } while (max == dir.size()); - dir.resize(max - 1); - return dir; -} - -class loop { -public: - inline loop() { - if (uv_loop_init(&l) != 0) { - throw std::runtime_error("failed to initialize loop"); - } - } - - inline ~loop() { uv_loop_close(&l); } - - inline uv_loop_t *operator*() { return &l; } - -private: - uv_loop_t l; -}; - -class mutex { -public: - inline mutex() { - if (uv_mutex_init(&mtx) != 0) { - throw std::runtime_error("failed to initialize mutex"); - } - } - inline ~mutex() { uv_mutex_destroy(&mtx); } - inline void lock() { uv_mutex_lock(&mtx); } - inline void unlock() { uv_mutex_unlock(&mtx); } - -private: - uv_mutex_t mtx; -}; - -class lock { -public: - lock(mutex &mtx) : mtx(mtx) { mtx.lock(); } - ~lock() { mtx.unlock(); } - -private: - mutex &mtx; -}; - -class rwlock { -public: - inline rwlock() { - if (uv_rwlock_init(&mtx) != 0) { - throw std::runtime_error("failed to initialize read-write lock"); - } - } - inline ~rwlock() { uv_rwlock_destroy(&mtx); } - inline void rdlock() { uv_rwlock_rdlock(&mtx); } - inline void wrlock() { uv_rwlock_wrlock(&mtx); } - inline void rdunlock() { uv_rwlock_rdunlock(&mtx); } - inline void wrunlock() { uv_rwlock_wrunlock(&mtx); } - -private: - uv_rwlock_t mtx; -}; - -class readlock { -public: - inline readlock(rwlock &mtx) : mtx(mtx) { mtx.rdlock(); } - inline ~readlock() { mtx.rdunlock(); } - -private: - rwlock &mtx; -}; - -class writelock { -public: - inline writelock(rwlock &mtx) : mtx(mtx) { mtx.wrlock(); } - inline ~writelock() { mtx.wrunlock(); } - -private: - rwlock &mtx; -}; - -class once { -public: - typedef void (*callback)(); - void operator()(void (*callback)(void)) { - uv_once(&o, callback); - } - -private: - uv_once_t o = UV_ONCE_INIT; -}; - -template <typename T> -class work { -public: - typedef void (*work_callback)(T &object); - typedef void (*after_work_callback)(T &object); - - template<typename... Args> - work(const std::shared_ptr<loop> &loop, work_callback work_cb, after_work_callback after_work_cb, Args&&... args) - : loop(loop), - data(std::forward<Args>(args)...), - work_cb(work_cb), - after_work_cb(after_work_cb) { - req.data = this; - uv_queue_work(**loop, &req, do_work, after_work); - } - -private: - static void do_work(uv_work_t *req) { - work<T> *w = static_cast<work<T> *>(req->data); - w->work_cb(w->data); - } - - static void after_work(uv_work_t *req, int) { - work<T> *w = static_cast<work<T> *>(req->data); - w->after_work_cb(w->data); - delete w; - } +std::string cwd(); -private: - std::shared_ptr<uv::loop> loop; - uv_work_t req; - T data; - work_callback work_cb; - after_work_callback after_work_cb; -}; +class thread; +class rwlock; +class loop; } diff --git a/include/mbgl/util/uv_detail.hpp b/include/mbgl/util/uv_detail.hpp new file mode 100644 index 0000000000..c65c247ba1 --- /dev/null +++ b/include/mbgl/util/uv_detail.hpp @@ -0,0 +1,158 @@ +#ifndef MBGL_UTIL_UV_DETAIL +#define MBGL_UTIL_UV_DETAIL + +#include <uv.h> +#include <functional> +#include <cassert> + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-parameter" +#endif + +#include <boost/lockfree/queue.hpp> + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#include <string> + + +namespace uv { + +class thread { +public: + inline operator uv_thread_t *() { return &t; } + +private: + uv_thread_t t; +}; + +class loop { +public: + inline loop() { + if (uv_loop_init(&l) != 0) { + throw std::runtime_error("failed to initialize loop"); + } + } + + inline ~loop() { uv_loop_close(&l); } + + inline uv_loop_t *operator*() { return &l; } + +private: + uv_loop_t l; +}; + +class mutex { +public: + inline mutex() { + if (uv_mutex_init(&mtx) != 0) { + throw std::runtime_error("failed to initialize mutex"); + } + } + inline ~mutex() { uv_mutex_destroy(&mtx); } + inline void lock() { uv_mutex_lock(&mtx); } + inline void unlock() { uv_mutex_unlock(&mtx); } + +private: + uv_mutex_t mtx; +}; + +class lock { +public: + lock(mutex &mtx) : mtx(mtx) { mtx.lock(); } + ~lock() { mtx.unlock(); } + +private: + mutex &mtx; +}; + +class rwlock { +public: + inline rwlock() { + if (uv_rwlock_init(&mtx) != 0) { + throw std::runtime_error("failed to initialize read-write lock"); + } + } + inline ~rwlock() { uv_rwlock_destroy(&mtx); } + inline void rdlock() { uv_rwlock_rdlock(&mtx); } + inline void wrlock() { uv_rwlock_wrlock(&mtx); } + inline void rdunlock() { uv_rwlock_rdunlock(&mtx); } + inline void wrunlock() { uv_rwlock_wrunlock(&mtx); } + +private: + uv_rwlock_t mtx; +}; + +class readlock { +public: + inline readlock(rwlock &mtx) : mtx(mtx) { mtx.rdlock(); } + inline readlock(const std::unique_ptr<rwlock> &mtx) : mtx(*mtx) { mtx->rdlock(); } + inline ~readlock() { mtx.rdunlock(); } + +private: + rwlock &mtx; +}; + +class writelock { +public: + inline writelock(rwlock &mtx) : mtx(mtx) { mtx.wrlock(); } + inline writelock(const std::unique_ptr<rwlock> &mtx) : mtx(*mtx) { mtx->wrlock(); } + inline ~writelock() { mtx.wrunlock(); } + +private: + rwlock &mtx; +}; + +class once { +public: + typedef void (*callback)(); + void operator()(void (*callback)(void)) { + uv_once(&o, callback); + } + +private: + uv_once_t o = UV_ONCE_INIT; +}; + +template <typename T> +class work { +public: + typedef void (*work_callback)(T &object); + typedef void (*after_work_callback)(T &object); + + template<typename... Args> + work(const std::shared_ptr<loop> &loop, work_callback work_cb, after_work_callback after_work_cb, Args&&... args) + : loop(loop), + data(std::forward<Args>(args)...), + work_cb(work_cb), + after_work_cb(after_work_cb) { + req.data = this; + uv_queue_work(**loop, &req, do_work, after_work); + } + +private: + static void do_work(uv_work_t *req) { + work<T> *w = static_cast<work<T> *>(req->data); + w->work_cb(w->data); + } + + static void after_work(uv_work_t *req, int) { + work<T> *w = static_cast<work<T> *>(req->data); + w->after_work_cb(w->data); + delete w; + } + +private: + std::shared_ptr<uv::loop> loop; + uv_work_t req; + T data; + work_callback work_cb; + after_work_callback after_work_cb; +}; + +} + +#endif diff --git a/ios/mapbox-gl-cocoa b/ios/mapbox-gl-cocoa -Subproject ced284d8a7bfc66540d8af50f811fd4df0e0886 +Subproject 9d4320aefaa3868ecd5d0a4e0ce902b0adef78c diff --git a/linux/main.cpp b/linux/main.cpp index b1241d64e0..a4f9a6298d 100644 --- a/linux/main.cpp +++ b/linux/main.cpp @@ -1,5 +1,6 @@ #include <mbgl/mbgl.hpp> #include <mbgl/platform/platform.hpp> +#include <mbgl/util/uv.hpp> #include <signal.h> #include <getopt.h> diff --git a/mapboxgl.gyp b/mapboxgl.gyp index 2b27222520..5af90fbc97 100644 --- a/mapboxgl.gyp +++ b/mapboxgl.gyp @@ -54,41 +54,36 @@ ], }, { - 'target_name': 'bundle_styles', + 'target_name': 'touch_styles', 'type': 'none', 'hard_dependency': 1, 'actions': [ { 'action_name': 'Touch Stylesheet Directory', 'inputs': ['styles'], - 'outputs': ['styles'], - 'action': ['touch', 'styles'], # required for xcode http://openradar.appspot.com/7232149 + 'outputs': ['<(PRODUCT_DIR)/'], # need to specify a distinct directory + 'action': ['touch', 'styles'], } ], + }, + { + 'target_name': 'bundle_styles', + 'type': 'none', + 'hard_dependency': 1, + 'dependencies': [ 'touch_styles' ], # required for xcode http://openradar.appspot.com/7232149 'direct_dependent_settings': { - 'mac_bundle_resources': [ - 'styles', - ], + 'mac_bundle_resources': [ 'styles' ], } }, { 'target_name': 'copy_styles', 'type': 'none', 'hard_dependency': 1, - 'actions': [ - { - 'action_name': 'Touch Stylesheet Directory', - 'inputs': ['styles'], - 'outputs': ['styles'], - 'action': ['touch', 'styles'], # required for xcode http://openradar.appspot.com/7232149 - } - ], - 'copies': [ - { - 'files': [ 'styles' ], - 'destination': '<(PRODUCT_DIR)' - } - ] + 'dependencies': [ 'touch_styles' ], # required for xcode http://openradar.appspot.com/7232149 + 'copies': [{ + 'files': [ 'styles' ], + 'destination': '<(PRODUCT_DIR)' + }], }, { 'target_name': 'copy_fixtures', @@ -108,12 +103,10 @@ 'target_name': 'copy_certificate_bundle', 'type': 'none', 'hard_dependency': 1, - 'copies': [ - { - 'files': [ 'common/ca-bundle.crt' ], - 'destination': '<(PRODUCT_DIR)' - } - ] + 'copies': [{ + 'files': [ 'common/ca-bundle.crt' ], + 'destination': '<(PRODUCT_DIR)' + }], }, { 'target_name': 'mapboxgl', diff --git a/src/map/map.cpp b/src/map/map.cpp index ef7b9548bd..81cbd394ba 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -9,7 +9,7 @@ #include <mbgl/util/clip_ids.hpp> #include <mbgl/util/string.hpp> #include <mbgl/util/constants.hpp> -#include <mbgl/util/uv.hpp> +#include <mbgl/util/uv_detail.hpp> #include <mbgl/util/std.hpp> #include <mbgl/style/style.hpp> #include <mbgl/text/glyph_store.hpp> @@ -32,6 +32,7 @@ using namespace mbgl; Map::Map(View& view) : loop(std::make_shared<uv::loop>()), + thread(std::make_unique<uv::thread>()), view(view), transform(view), fileSource(std::make_shared<FileSource>()), @@ -78,7 +79,7 @@ void Map::start() { uv_async_init(**loop, async_cleanup, cleanup); async_cleanup->data = this; - uv_thread_create(&thread, [](void *arg) { + uv_thread_create(*thread, [](void *arg) { Map *map = static_cast<Map *>(arg); map->run(); }, this); @@ -89,7 +90,7 @@ void Map::stop() { uv_async_send(async_terminate); } - uv_thread_join(&thread); + uv_thread_join(*thread); // Run the event loop once to make sure our async delete handlers are called. uv_run(**loop, UV_RUN_ONCE); diff --git a/src/map/sprite.cpp b/src/map/sprite.cpp index f396fec07d..88e940c00e 100644 --- a/src/map/sprite.cpp +++ b/src/map/sprite.cpp @@ -6,7 +6,7 @@ #include <string> #include <mbgl/platform/platform.hpp> #include <mbgl/util/filesource.hpp> -#include <mbgl/util/uv.hpp> +#include <mbgl/util/uv_detail.hpp> #include <mbgl/util/std.hpp> #include <rapidjson/document.h> diff --git a/src/map/tile_data.cpp b/src/map/tile_data.cpp index a94eb00fbf..4333e2d2fd 100644 --- a/src/map/tile_data.cpp +++ b/src/map/tile_data.cpp @@ -5,6 +5,7 @@ #include <mbgl/util/token.hpp> #include <mbgl/util/string.hpp> #include <mbgl/util/filesource.hpp> +#include <mbgl/util/uv_detail.hpp> using namespace mbgl; diff --git a/src/map/transform.cpp b/src/map/transform.cpp index 6338df6a48..a68cffdc7e 100644 --- a/src/map/transform.cpp +++ b/src/map/transform.cpp @@ -5,6 +5,7 @@ #include <mbgl/util/std.hpp> #include <mbgl/util/math.hpp> #include <mbgl/util/time.hpp> +#include <mbgl/util/uv_detail.hpp> #include <mbgl/util/transition.hpp> #include <mbgl/platform/platform.hpp> #include <cstdio> @@ -16,9 +17,7 @@ const double R2D = 180.0 / M_PI; const double M2PI = 2 * M_PI; const double MIN_ROTATE_SCALE = 8; -Transform::Transform(View &view) - : view(view) { - +Transform::Transform(View &view) : view(view), mtx(std::make_unique<uv::rwlock>()) { setScale(current.scale); setAngle(current.angle); } diff --git a/src/platform/request.cpp b/src/platform/request.cpp index 9382892a91..efd17895db 100644 --- a/src/platform/request.cpp +++ b/src/platform/request.cpp @@ -1,7 +1,7 @@ #include <mbgl/platform/request.hpp> #include <mbgl/platform/platform.hpp> #include <mbgl/util/std.hpp> -#include <mbgl/util/uv.hpp> +#include <mbgl/util/uv_detail.hpp> using namespace mbgl::platform; diff --git a/src/style/style.cpp b/src/style/style.cpp index 03881f96a0..22c7610105 100644 --- a/src/style/style.cpp +++ b/src/style/style.cpp @@ -6,6 +6,8 @@ #include <mbgl/util/constants.hpp> #include <mbgl/util/time.hpp> #include <mbgl/util/error.hpp> +#include <mbgl/util/std.hpp> +#include <mbgl/util/uv_detail.hpp> #include <csscolorparser/csscolorparser.hpp> #include <rapidjson/document.h> @@ -13,7 +15,8 @@ namespace mbgl { -Style::Style() { +Style::Style() + : mtx(std::make_unique<uv::rwlock>()) { } void Style::updateProperties(float z, timestamp now) { diff --git a/src/text/glyph_store.cpp b/src/text/glyph_store.cpp index 4b90b51c24..c32e1642e5 100644 --- a/src/text/glyph_store.cpp +++ b/src/text/glyph_store.cpp @@ -9,7 +9,7 @@ #include <mbgl/util/math.hpp> #include <mbgl/util/filesource.hpp> #include <mbgl/platform/platform.hpp> -#include <uv.h> +#include <mbgl/util/uv_detail.hpp> #include <algorithm> namespace mbgl { diff --git a/src/util/raster.cpp b/src/util/raster.cpp index 4a040f9cb6..fe5acbd526 100644 --- a/src/util/raster.cpp +++ b/src/util/raster.cpp @@ -7,7 +7,7 @@ #include <mbgl/platform/platform.hpp> #include <mbgl/platform/gl.hpp> #include <mbgl/util/time.hpp> -#include <mbgl/util/uv.hpp> +#include <mbgl/util/uv_detail.hpp> #include <mbgl/util/std.hpp> #include <png.h> diff --git a/src/util/time.cpp b/src/util/time.cpp new file mode 100644 index 0000000000..4cd8077f98 --- /dev/null +++ b/src/util/time.cpp @@ -0,0 +1,12 @@ +#include <mbgl/util/time.hpp> +#include <mbgl/util/uv_detail.hpp> + +namespace mbgl { +namespace util { + +timestamp now() { + return uv_hrtime(); +} + +} +} diff --git a/src/util/uv.cpp b/src/util/uv.cpp new file mode 100644 index 0000000000..65c790b9c0 --- /dev/null +++ b/src/util/uv.cpp @@ -0,0 +1,19 @@ +#include <mbgl/util/uv.hpp> + +#include <uv.h> + +namespace uv { + +std::string cwd() { + size_t max = 0; + std::string dir; + do { + max += 256; + dir.resize(max); + uv_cwd(const_cast<char *>(dir.data()), &max); + } while (max == dir.size()); + dir.resize(max - 1); + return dir; +} + +} diff --git a/test/fixtures/fixture_request.cpp b/test/fixtures/fixture_request.cpp index b73020590c..1a7ed2ccc3 100644 --- a/test/fixtures/fixture_request.cpp +++ b/test/fixtures/fixture_request.cpp @@ -1,6 +1,6 @@ #include <mbgl/platform/platform.hpp> #include <mbgl/platform/request.hpp> -#include <mbgl/util/uv.hpp> +#include <mbgl/util/uv_detail.hpp> #include <mbgl/platform/log.hpp> const std::string base_directory = []{ diff --git a/test/test.gyp b/test/test.gyp index 3bf8b5b335..07709ecc86 100644 --- a/test/test.gyp +++ b/test/test.gyp @@ -208,7 +208,6 @@ "dependencies": [ "../deps/gtest/gtest.gyp:gtest", "../mapboxgl.gyp:mapboxgl", - '../mapboxgl.gyp:bundle_styles', "link_gl", ] }, |