aboutsummaryrefslogtreecommitdiff
path: root/src/shaper.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/shaper.erl')
-rw-r--r--src/shaper.erl27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/shaper.erl b/src/shaper.erl
index 811315f0f..19a557c73 100644
--- a/src/shaper.erl
+++ b/src/shaper.erl
@@ -33,25 +33,26 @@ new1({maxrate, MaxRate}) ->
lasttime = now_to_usec(now())}.
-update(none, Size) ->
- none;
+update(none, _Size) ->
+ {none, 0};
update(#maxrate{} = State, Size) ->
MinInterv = 1000 * Size /
(2 * State#maxrate.maxrate - State#maxrate.lastrate),
Interv = (now_to_usec(now()) - State#maxrate.lasttime) / 1000,
%io:format("State: ~p, Size=~p~nM=~p, I=~p~n",
% [State, Size, MinInterv, Interv]),
- if
- MinInterv > Interv ->
- timer:sleep(1 + trunc(MinInterv - Interv));
- true ->
- ok
- end,
- Now = now_to_usec(now()),
- State#maxrate{
- lastrate = (State#maxrate.lastrate +
- 1000000 * Size / (Now - State#maxrate.lasttime))/2,
- lasttime = Now}.
+ Pause = if
+ MinInterv > Interv ->
+ 1 + trunc(MinInterv - Interv);
+ true ->
+ 0
+ end,
+ NextNow = now_to_usec(now()) + Pause * 1000,
+ {State#maxrate{
+ lastrate = (State#maxrate.lastrate +
+ 1000000 * Size / (NextNow - State#maxrate.lasttime))/2,
+ lasttime = NextNow},
+ Pause}.
now_to_usec({MSec, Sec, USec}) ->