[core] Introduce Timer abstraction
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
'../platform/default/image.cpp',
|
||||
'../platform/default/png_reader.cpp',
|
||||
'../platform/default/jpeg_reader.cpp',
|
||||
'../platform/default/timer.cpp',
|
||||
],
|
||||
|
||||
'variables': {
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
'../platform/default/image.cpp',
|
||||
'../platform/default/png_reader.cpp',
|
||||
'../platform/default/jpeg_reader.cpp',
|
||||
'../platform/default/timer.cpp',
|
||||
],
|
||||
|
||||
'variables': {
|
||||
|
||||
@@ -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',
|
||||
|
||||
30
include/mbgl/util/timer.hpp
Normal file
30
include/mbgl/util/timer.hpp
Normal file
@@ -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
|
||||
40
platform/default/timer.cpp
Normal file
40
platform/default/timer.cpp
Normal file
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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_) {}
|
||||
|
||||
Reference in New Issue
Block a user