From 495f06ac4dd8595cd388eb72fbd98ba7d8ddc3b6 Mon Sep 17 00:00:00 2001 From: "Thiago Marcos P. Santos" Date: Wed, 14 Jun 2017 16:52:39 +0300 Subject: [PATCH] [core] Convert AssetFileSource to ThreadedObject --- platform/default/asset_file_source.cpp | 19 +++++++++++-------- src/mbgl/storage/asset_file_source.hpp | 5 +++-- test/storage/asset_file_source.test.cpp | 25 +++++++++---------------- 3 files changed, 23 insertions(+), 26 deletions(-) diff --git a/platform/default/asset_file_source.cpp b/platform/default/asset_file_source.cpp index 183281837..5b8a18dd8 100644 --- a/platform/default/asset_file_source.cpp +++ b/platform/default/asset_file_source.cpp @@ -1,7 +1,8 @@ #include +#include #include #include -#include +#include #include #include #include @@ -14,11 +15,11 @@ namespace mbgl { class AssetFileSource::Impl { public: - Impl(std::string root_) + Impl(ActorRef, std::string root_) : root(std::move(root_)) { } - void request(const std::string& url, FileSource::Callback callback) { + void request(const std::string& url, ActorRef req) { std::string path; if (url.size() <= 8 || url[8] == '/') { @@ -48,7 +49,7 @@ public: } } - callback(response); + req.invoke(&FileSourceRequest::setResponse, response); } private: @@ -56,15 +57,17 @@ private: }; AssetFileSource::AssetFileSource(const std::string& root) - : thread(std::make_unique>( - util::ThreadContext{"AssetFileSource", util::ThreadPriority::Low}, - root)) { + : impl(std::make_unique>("AssetFileSource", root)) { } AssetFileSource::~AssetFileSource() = default; std::unique_ptr AssetFileSource::request(const Resource& resource, Callback callback) { - return thread->invokeWithCallback(&Impl::request, resource.url, callback); + auto req = std::make_unique(std::move(callback)); + + impl->actor().invoke(&Impl::request, resource.url, req->actor()); + + return std::move(req); } } // namespace mbgl diff --git a/src/mbgl/storage/asset_file_source.hpp b/src/mbgl/storage/asset_file_source.hpp index 71e5bbdab..54b8ba56f 100644 --- a/src/mbgl/storage/asset_file_source.hpp +++ b/src/mbgl/storage/asset_file_source.hpp @@ -5,7 +5,7 @@ namespace mbgl { namespace util { -template class Thread; +template class ThreadedObject; } // namespace util class AssetFileSource : public FileSource { @@ -17,7 +17,8 @@ public: private: class Impl; - std::unique_ptr> thread; + + std::unique_ptr> impl; }; } // namespace mbgl diff --git a/test/storage/asset_file_source.test.cpp b/test/storage/asset_file_source.test.cpp index 010a2c9dc..5dd03256d 100644 --- a/test/storage/asset_file_source.test.cpp +++ b/test/storage/asset_file_source.test.cpp @@ -2,9 +2,11 @@ #include #include #include -#include +#include +#include #include +#include using namespace mbgl; @@ -20,16 +22,11 @@ TEST(AssetFileSource, Load) { #else unsigned numThreads = 50; #endif - - auto callback = [&] { - if (!--numThreads) { - loop.stop(); - } - }; + std::atomic_uint completed(numThreads); class TestWorker { public: - TestWorker(mbgl::AssetFileSource* fs_) : fs(fs_) {} + TestWorker(ActorRef, mbgl::AssetFileSource* fs_) : fs(fs_) {} void run(std::function endCallback) { const std::string asset("asset://nonempty"); @@ -59,17 +56,13 @@ TEST(AssetFileSource, Load) { std::function requestCallback; }; - std::vector>> threads; - std::vector> requests; - util::ThreadContext context = { "Test" }; + std::vector>> threads; for (unsigned i = 0; i < numThreads; ++i) { - std::unique_ptr> thread = - std::make_unique>(context, &fs); - - requests.push_back( - thread->invokeWithCallback(&TestWorker::run, callback)); + std::unique_ptr> thread = + std::make_unique>("Test", &fs); + thread->actor().invoke(&TestWorker::run, [&] { if (!--completed) loop.stop(); }); threads.push_back(std::move(thread)); }