diff options
-rw-r--r-- | gyp/platform-android.gypi | 1 | ||||
-rw-r--r-- | gyp/platform-ios.gypi | 1 | ||||
-rw-r--r-- | gyp/platform-linux.gypi | 1 | ||||
-rw-r--r-- | gyp/platform-osx.gypi | 1 | ||||
-rw-r--r-- | include/mbgl/util/timer.hpp | 30 | ||||
-rw-r--r-- | platform/default/timer.cpp | 40 | ||||
-rw-r--r-- | src/mbgl/storage/default_file_source.cpp | 6 | ||||
-rw-r--r-- | src/mbgl/storage/default_file_source_impl.hpp | 3 |
8 files changed, 78 insertions, 5 deletions
diff --git a/gyp/platform-android.gypi b/gyp/platform-android.gypi index 02f46b0636..c9a7d3b6a0 100644 --- a/gyp/platform-android.gypi +++ b/gyp/platform-android.gypi @@ -19,6 +19,7 @@ '../platform/default/image.cpp', '../platform/default/png_reader.cpp', '../platform/default/jpeg_reader.cpp', + '../platform/default/timer.cpp', ], 'variables': { diff --git a/gyp/platform-ios.gypi b/gyp/platform-ios.gypi index 240fa28e41..6a29fbd61c 100644 --- a/gyp/platform-ios.gypi +++ b/gyp/platform-ios.gypi @@ -12,6 +12,7 @@ 'sources': [ '../platform/default/async_task.cpp', '../platform/default/run_loop.cpp', + '../platform/default/timer.cpp', '../platform/darwin/log_nslog.mm', '../platform/darwin/string_nsstring.mm', '../platform/darwin/application_root.mm', diff --git a/gyp/platform-linux.gypi b/gyp/platform-linux.gypi index ce2fe3b147..eb54bdf9e3 100644 --- a/gyp/platform-linux.gypi +++ b/gyp/platform-linux.gypi @@ -20,6 +20,7 @@ '../platform/default/image.cpp', '../platform/default/png_reader.cpp', '../platform/default/jpeg_reader.cpp', + '../platform/default/timer.cpp', ], 'variables': { diff --git a/gyp/platform-osx.gypi b/gyp/platform-osx.gypi index a410826b51..1ccbd3d59b 100644 --- a/gyp/platform-osx.gypi +++ b/gyp/platform-osx.gypi @@ -12,6 +12,7 @@ 'sources': [ '../platform/default/async_task.cpp', '../platform/default/run_loop.cpp', + '../platform/default/timer.cpp', '../platform/darwin/log_nslog.mm', '../platform/darwin/string_nsstring.mm', '../platform/darwin/application_root.mm', diff --git a/include/mbgl/util/timer.hpp b/include/mbgl/util/timer.hpp new file mode 100644 index 0000000000..932bb47950 --- /dev/null +++ b/include/mbgl/util/timer.hpp @@ -0,0 +1,30 @@ +#ifndef MBGL_UTIL_TIMER +#define MBGL_UTIL_TIMER + +#include <mbgl/util/noncopyable.hpp> +#include <mbgl/util/chrono.hpp> + +#include <memory> +#include <functional> + +namespace mbgl { +namespace util { + +class Timer : private util::noncopyable { +public: + Timer(); + ~Timer(); + + void start(Duration timeout, Duration repeat, std::function<void()>&&); + void stop(); + void unref(); + +private: + class Impl; + std::unique_ptr<Impl> impl; +}; + +} +} + +#endif diff --git a/platform/default/timer.cpp b/platform/default/timer.cpp new file mode 100644 index 0000000000..b77eaac845 --- /dev/null +++ b/platform/default/timer.cpp @@ -0,0 +1,40 @@ +#include <mbgl/util/timer.hpp> + +#include <mbgl/util/run_loop.hpp> +#include <mbgl/util/uv_detail.hpp> + +namespace mbgl { +namespace util { + +class Timer::Impl { +public: + Impl() + : timer(reinterpret_cast<uv_loop_t*>(RunLoop::getLoopHandle())) { + } + + uv::timer timer; +}; + +Timer::Timer() + : impl(std::make_unique<Impl>()) { +} + +Timer::~Timer() { +} + +void Timer::start(Duration timeout, Duration repeat, std::function<void()>&& cb) { + impl->timer.start(std::chrono::duration_cast<std::chrono::milliseconds>(timeout).count(), + std::chrono::duration_cast<std::chrono::milliseconds>(repeat).count(), + std::move(cb)); +} + +void Timer::stop() { + impl->timer.stop(); +} + +void Timer::unref() { + impl->timer.unref(); +} + +} +} diff --git a/src/mbgl/storage/default_file_source.cpp b/src/mbgl/storage/default_file_source.cpp index 63a0e329fb..367c083360 100644 --- a/src/mbgl/storage/default_file_source.cpp +++ b/src/mbgl/storage/default_file_source.cpp @@ -7,7 +7,6 @@ #include <mbgl/platform/platform.hpp> #include <mbgl/platform/log.hpp> -#include <mbgl/util/uv_detail.hpp> #include <mbgl/util/thread.hpp> #include <mbgl/util/mapbox.hpp> #include <mbgl/util/exception.hpp> @@ -236,11 +235,10 @@ void DefaultFileSource::Impl::reschedule(DefaultFileRequestImpl& request) { update(request); } else if (timeout > Seconds::zero()) { if (!request.timerRequest) { - request.timerRequest = std::make_unique<uv::timer>(util::RunLoop::getLoop()); + request.timerRequest = std::make_unique<util::Timer>(); } - // timeout is in seconds, but the timer takes milliseconds. - request.timerRequest->start(asMilliseconds(timeout).count(), 0, [this, &request] { + request.timerRequest->start(timeout, Duration::zero(), [this, &request] { assert(!request.realRequest); startRealRequest(request); }); diff --git a/src/mbgl/storage/default_file_source_impl.hpp b/src/mbgl/storage/default_file_source_impl.hpp index 9580d4e783..e2136b49fd 100644 --- a/src/mbgl/storage/default_file_source_impl.hpp +++ b/src/mbgl/storage/default_file_source_impl.hpp @@ -7,6 +7,7 @@ #include <mbgl/util/async_task.hpp> #include <mbgl/util/noncopyable.hpp> #include <mbgl/util/chrono.hpp> +#include <mbgl/util/timer.hpp> #include <set> #include <unordered_map> @@ -40,7 +41,7 @@ public: const Resource resource; std::unique_ptr<WorkRequest> cacheRequest; RequestBase* realRequest = nullptr; - std::unique_ptr<uv::timer> timerRequest; + std::unique_ptr<util::Timer> timerRequest; inline DefaultFileRequestImpl(const Resource& resource_) : resource(resource_) {} |