blob: 910810ce2fd8c0691154c11af7c593fe7743b658 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include <mbgl/util/throttler.hpp>
namespace mbgl {
namespace util {
Throttler::Throttler(Duration frequency_, std::function<void()>&& function_)
: frequency(frequency_)
, function(std::move(function_))
, pendingInvocation(false)
, lastInvocation(TimePoint::min())
{}
void Throttler::invoke() {
if (pendingInvocation) {
return;
}
Duration timeToNextInvocation = lastInvocation == TimePoint::min()
? Duration::zero()
: (lastInvocation + frequency) - Clock::now();
if (timeToNextInvocation <= Duration::zero()) {
lastInvocation = Clock::now();
function();
} else {
pendingInvocation = true;
timer.start(timeToNextInvocation, Duration::zero(), [this]{
pendingInvocation = false;
lastInvocation = Clock::now();
function();
});
}
}
} // namespace util
} // namespace mbgl
|