Software /
code /
prosody
Comparison
util/throttle.lua @ 8245:9499db96c032
util.throttle: Fix initial time setting (double accounting the first time) and fractional balance updates (0.1*10 was not the same as 1*1)
author | Waqas Hussain <waqas20@gmail.com> |
---|---|
date | Sun, 17 Sep 2017 13:29:14 -0400 |
parent | 7988:dc758422d896 |
child | 8272:64165865b131 |
comparison
equal
deleted
inserted
replaced
8244:6a27e5f276f7 | 8245:9499db96c032 |
---|---|
10 | 10 |
11 function throttle:update() | 11 function throttle:update() |
12 local newt = gettime(); | 12 local newt = gettime(); |
13 local elapsed = newt - self.t; | 13 local elapsed = newt - self.t; |
14 self.t = newt; | 14 self.t = newt; |
15 local balance = floor(self.rate * elapsed) + self.balance; | 15 local balance = (self.rate * elapsed) + self.balance; |
16 if balance > self.max then | 16 if balance > self.max then |
17 self.balance = self.max; | 17 self.balance = self.max; |
18 else | 18 else |
19 self.balance = balance; | 19 self.balance = balance; |
20 end | 20 end |
38 return false, balance, (cost-balance); | 38 return false, balance, (cost-balance); |
39 end | 39 end |
40 end | 40 end |
41 | 41 |
42 local function create(max, period) | 42 local function create(max, period) |
43 return setmetatable({ rate = max / period, max = max, t = 0, balance = max }, throttle_mt); | 43 return setmetatable({ rate = max / period, max = max, t = gettime(), balance = max }, throttle_mt); |
44 end | 44 end |
45 | 45 |
46 return { | 46 return { |
47 create = create; | 47 create = create; |
48 }; | 48 }; |