Package org.klomp.snark
Class BandwidthManager
- java.lang.Object
-
- org.klomp.snark.BandwidthManager
-
- All Implemented Interfaces:
BandwidthListener
public class BandwidthManager extends Object implements BandwidthListener
Bandwidth and bandwidth limits Maintain three bandwidth estimators: Sent, received, and requested. There are three layers of BandwidthListeners:BandwidthManager (total) PeerCoordinator (per-torrent) Peer/WebPeer (per-connection)
Here at the top, we use SyntheticRedQueues for accurate and current moving averages of up, down, and requested bandwidth. At the lower layers, simple weighted moving averages of three buckets of time PeerCoordinator.CHECK_PERIOD each are used for up and down, and requested is delegated here. The lower layers must report to the next-higher layer. At the Peer layer, we report inbound piece data per-read, not per-piece, to get a smoother inbound estimate. Only the following data are counted by the BandwidthListeners:- Pieces (both Peer and WebPeer)
- ut_metadata
- Since:
- 0.9.62
-
-
Constructor Summary
Constructors Constructor Description BandwidthManager(I2PAppContext ctx, int upLimit, int downLimit)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
downloaded(int size)
We received this many byteslong
getDownBWLimit()
Current limit in BPSlong
getDownloadRate()
The average rate in Bps(package private) long
getRequestRate()
The average rate in Bpslong
getUpBWLimit()
Current limit in BPSlong
getUploadRate()
The average rate in Bpsboolean
overDownBWLimit()
Are we currently over the limit?boolean
overUpBWLimit()
Are we currently over the limit?(package private) void
setDownBWLimit(long downLimit)
Current limit in Bps(package private) void
setUpBWLimit(long upLimit)
Current limit in Bpsboolean
shouldRequest(Peer peer, int size)
Should we request this many bytes?boolean
shouldSend(int size)
Should we send this many bytes? Do NOT call uploaded() if this returns true.String
toString()
In HTML for debug pagevoid
uploaded(int size)
We unconditionally sent this many bytes
-
-
-
Constructor Detail
-
BandwidthManager
BandwidthManager(I2PAppContext ctx, int upLimit, int downLimit)
-
-
Method Detail
-
setUpBWLimit
void setUpBWLimit(long upLimit)
Current limit in Bps
-
setDownBWLimit
void setDownBWLimit(long downLimit)
Current limit in Bps
-
getRequestRate
long getRequestRate()
The average rate in Bps
-
getUploadRate
public long getUploadRate()
The average rate in Bps- Specified by:
getUploadRate
in interfaceBandwidthListener
-
getDownloadRate
public long getDownloadRate()
The average rate in Bps- Specified by:
getDownloadRate
in interfaceBandwidthListener
-
uploaded
public void uploaded(int size)
We unconditionally sent this many bytes- Specified by:
uploaded
in interfaceBandwidthListener
-
downloaded
public void downloaded(int size)
We received this many bytes- Specified by:
downloaded
in interfaceBandwidthListener
-
shouldSend
public boolean shouldSend(int size)
Should we send this many bytes? Do NOT call uploaded() if this returns true.- Specified by:
shouldSend
in interfaceBandwidthListener
-
shouldRequest
public boolean shouldRequest(Peer peer, int size)
Should we request this many bytes?- Specified by:
shouldRequest
in interfaceBandwidthListener
- Parameters:
peer
- ignored
-
getUpBWLimit
public long getUpBWLimit()
Current limit in BPS- Specified by:
getUpBWLimit
in interfaceBandwidthListener
-
getDownBWLimit
public long getDownBWLimit()
Current limit in BPS- Specified by:
getDownBWLimit
in interfaceBandwidthListener
-
overUpBWLimit
public boolean overUpBWLimit()
Are we currently over the limit?- Specified by:
overUpBWLimit
in interfaceBandwidthListener
-
overDownBWLimit
public boolean overDownBWLimit()
Are we currently over the limit?- Specified by:
overDownBWLimit
in interfaceBandwidthListener
-
-