From f6b8dd4be9677bae18f3d6e50ee706cc3693b933 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Tue, 30 Jun 2015 16:13:40 +0300 Subject: [PATCH] Add simple static method to retrieve the current loop In the lines of how we do for getting information of the current thread. --- src/mbgl/map/map_context.cpp | 2 +- src/mbgl/map/raster_tile_data.cpp | 2 +- src/mbgl/map/source.cpp | 2 +- src/mbgl/map/sprite.cpp | 4 ++-- src/mbgl/map/vector_tile_data.cpp | 2 +- src/mbgl/text/glyph_pbf.cpp | 2 +- src/mbgl/util/run_loop.hpp | 8 ++++++-- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/mbgl/map/map_context.cpp b/src/mbgl/map/map_context.cpp index fc4766f3a..b4bebb4f6 100644 --- a/src/mbgl/map/map_context.cpp +++ b/src/mbgl/map/map_context.cpp @@ -106,7 +106,7 @@ void MapContext::setStyleURL(const std::string& url) { base = styleURL.substr(0, pos + 1); } - styleRequest = fs->request({ Resource::Kind::Style, styleURL }, util::RunLoop::current.get()->get(), [this, base](const Response &res) { + styleRequest = fs->request({ Resource::Kind::Style, styleURL }, util::RunLoop::getLoop(), [this, base](const Response &res) { styleRequest = nullptr; if (res.status == Response::Successful) { diff --git a/src/mbgl/map/raster_tile_data.cpp b/src/mbgl/map/raster_tile_data.cpp index a8a1ab03d..ce26586ff 100644 --- a/src/mbgl/map/raster_tile_data.cpp +++ b/src/mbgl/map/raster_tile_data.cpp @@ -30,7 +30,7 @@ void RasterTileData::request(float pixelRatio, state = State::loading; FileSource* fs = util::ThreadContext::getFileSource(); - req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::current.get()->get(), [url, callback, this](const Response &res) { + req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) { req = nullptr; if (res.status != Response::Successful) { diff --git a/src/mbgl/map/source.cpp b/src/mbgl/map/source.cpp index 58f3924ec..d732292e0 100644 --- a/src/mbgl/map/source.cpp +++ b/src/mbgl/map/source.cpp @@ -148,7 +148,7 @@ void Source::load() { } FileSource* fs = util::ThreadContext::getFileSource(); - req = fs->request({ Resource::Kind::Source, info.url }, util::RunLoop::current.get()->get(), [this](const Response &res) { + req = fs->request({ Resource::Kind::Source, info.url }, util::RunLoop::getLoop(), [this](const Response &res) { req = nullptr; if (res.status != Response::Successful) { diff --git a/src/mbgl/map/sprite.cpp b/src/mbgl/map/sprite.cpp index 8d05ea9f7..6a310c21c 100644 --- a/src/mbgl/map/sprite.cpp +++ b/src/mbgl/map/sprite.cpp @@ -42,7 +42,7 @@ Sprite::Sprite(const std::string& baseUrl, float pixelRatio_) std::string jsonURL(baseUrl + (pixelRatio_ > 1 ? "@2x" : "") + ".json"); FileSource* fs = util::ThreadContext::getFileSource(); - jsonRequest = fs->request({ Resource::Kind::JSON, jsonURL }, util::RunLoop::current.get()->get(), [this, jsonURL](const Response &res) { + jsonRequest = fs->request({ Resource::Kind::JSON, jsonURL }, util::RunLoop::getLoop(), [this, jsonURL](const Response &res) { jsonRequest = nullptr; if (res.status == Response::Successful) { body = res.data; @@ -56,7 +56,7 @@ Sprite::Sprite(const std::string& baseUrl, float pixelRatio_) emitSpriteLoadedIfComplete(); }); - spriteRequest = fs->request({ Resource::Kind::Image, spriteURL }, util::RunLoop::current.get()->get(), [this, spriteURL](const Response &res) { + spriteRequest = fs->request({ Resource::Kind::Image, spriteURL }, util::RunLoop::getLoop(), [this, spriteURL](const Response &res) { spriteRequest = nullptr; if (res.status == Response::Successful) { image = res.data; diff --git a/src/mbgl/map/vector_tile_data.cpp b/src/mbgl/map/vector_tile_data.cpp index c87cc370e..57b42aaaf 100644 --- a/src/mbgl/map/vector_tile_data.cpp +++ b/src/mbgl/map/vector_tile_data.cpp @@ -42,7 +42,7 @@ void VectorTileData::request(float pixelRatio, const std::function& call state = State::loading; FileSource* fs = util::ThreadContext::getFileSource(); - req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::current.get()->get(), [url, callback, this](const Response &res) { + req = fs->request({ Resource::Kind::Tile, url }, util::RunLoop::getLoop(), [url, callback, this](const Response &res) { req = nullptr; if (res.status != Response::Successful) { diff --git a/src/mbgl/text/glyph_pbf.cpp b/src/mbgl/text/glyph_pbf.cpp index 142461ec7..24993ed72 100644 --- a/src/mbgl/text/glyph_pbf.cpp +++ b/src/mbgl/text/glyph_pbf.cpp @@ -30,7 +30,7 @@ GlyphPBF::GlyphPBF(const std::string& glyphURL, // The prepare call jumps back to the main thread. FileSource* fs = util::ThreadContext::getFileSource(); - req = fs->request({ Resource::Kind::Glyphs, url }, util::RunLoop::current.get()->get(), [&, successCallback, failureCallback](const Response &res) { + req = fs->request({ Resource::Kind::Glyphs, url }, util::RunLoop::getLoop(), [&, successCallback, failureCallback](const Response &res) { req = nullptr; if (res.status != Response::Successful) { diff --git a/src/mbgl/util/run_loop.hpp b/src/mbgl/util/run_loop.hpp index c0a56e956..2175ea977 100644 --- a/src/mbgl/util/run_loop.hpp +++ b/src/mbgl/util/run_loop.hpp @@ -19,6 +19,10 @@ public: RunLoop(uv_loop_t*); ~RunLoop(); + static uv_loop_t* getLoop() { + return current.get()->get(); + } + void stop(); // Invoke fn(args...) on this RunLoop. @@ -69,8 +73,6 @@ public: uv_loop_t* get() { return async.get()->loop; } - static uv::tls current; - private: template class Invoker : public WorkTask { @@ -123,6 +125,8 @@ private: Queue queue; std::mutex mutex; uv::async async; + + static uv::tls current; }; }