Skip to content

Commit

Permalink
No rate calculation at jlibtorrent level.
Browse files Browse the repository at this point in the history
  • Loading branch information
aldenml committed Mar 4, 2015
1 parent 8f0193a commit ee3768a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 57 deletions.
10 changes: 4 additions & 6 deletions src/com/frostwire/jlibtorrent/Session.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public final class Session {
private final session s;

private long lastStatsRequestTime;
private SessionStats.StatsSnapshot[] lastStats;
private SessionStats lastStats;

private final SparseArray<ArrayList<AlertListener>> listeners;
private final SparseArray<AlertListener[]> listenerSnapshots;
Expand All @@ -51,7 +51,7 @@ public Session(Fingerprint print, Pair<Integer, Integer> prange, String iface, L

this.s = new session(print.getSwig(), prange.to_int_int_pair(), iface, flags, alert_mask);

lastStats = new SessionStats.StatsSnapshot[2];
this.lastStats = new SessionStats(0, null);

this.listeners = new SparseArray<ArrayList<AlertListener>>();
this.listenerSnapshots = new SparseArray<AlertListener[]>();
Expand Down Expand Up @@ -752,7 +752,7 @@ public void deletePortMapping(int handle) {
}

public SessionStats getStats() {
return new SessionStats(lastStats);
return lastStats;
}

public SessionSettings getSettings() {
Expand Down Expand Up @@ -857,9 +857,7 @@ public void run() {

if (type == AlertType.SESSION_STATS.getSwig()) {
alert = castAlert(swigAlert);
SessionStats.StatsSnapshot snapshot = new SessionStats.StatsSnapshot((SessionStatsAlert) alert);
lastStats[0] = lastStats[1];
lastStats[1] = snapshot;
SessionStats lastStats = new SessionStats((SessionStatsAlert) alert);
}

if (listeners.indexOfKey(type) >= 0) {
Expand Down
73 changes: 22 additions & 51 deletions src/com/frostwire/jlibtorrent/SessionStats.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,21 +20,27 @@ public final class SessionStats {
private static final int RECV_BYTES_IDX = LibTorrent.findMetricIdx("net.recv_bytes");
private static final int SENT_BYTES_IDX = LibTorrent.findMetricIdx("net.sent_bytes");

private final StatsSnapshot[] snapshots;
SessionStats(long timestamp, long[] values) {
this.timestamp = timestamp;
this.values = values;
}

SessionStats(StatsSnapshot[] snapshots) {
this.snapshots = snapshots;
SessionStats(SessionStatsAlert alert) {
this(alert.getStatsTimestamp(), alert.getValues());
}

private Map<String, Long> nonZeroValues() {
if (snapshots == null || snapshots[1] == null) {
public final long timestamp;
public final long[] values;

public Map<String, Long> nonZeroValues() {
if (timestamp <= 0 || values == null) {
return Collections.emptyMap();
}

HashMap<String, Long> m = new HashMap<String, Long>();

for (StatsMetric sm : STATS_METRICS) {
long value = snapshots[1].values[sm.getValueIndex()];
long value = values[sm.getValueIndex()];
if (value != 0) {
m.put(sm.getName(), value);
}
Expand All @@ -44,65 +50,30 @@ private Map<String, Long> nonZeroValues() {
}

public long getDHTNodes() {
return value(1, DHT_NODES_IDX);
return value(DHT_NODES_IDX);
}

public int getPayloadDownloadRate() {
float seconds = seconds();

if (seconds == 0) {
return 0;
}

return (int) ((value(0, RECV_PAYLOAD_BYTES_IDX) - value(1, RECV_PAYLOAD_BYTES_IDX)) / seconds);
public long getPayloadDownload() {
return value(RECV_PAYLOAD_BYTES_IDX);
}

public int getPayloadUploadRate() {
float seconds = seconds();

if (seconds == 0) {
return 0;
}

return (int) ((value(0, SENT_PAYLOAD_BYTES_IDX) - value(1, SENT_PAYLOAD_BYTES_IDX)) / seconds);
public long getPayloadUpload() {
return value(SENT_PAYLOAD_BYTES_IDX);
}

public long getTotalDownload() {
return value(1, RECV_BYTES_IDX);
return value(RECV_BYTES_IDX);
}

public long getTotalUpload() {
return value(1, SENT_BYTES_IDX);
}

private float seconds() {
if (snapshots == null || snapshots[0] == null || snapshots[1] == null) {
return 0;
}

return (snapshots[0].timestamp - snapshots[1].timestamp) / 1000000.f;
return value(SENT_BYTES_IDX);
}

private long value(int snapshotIdx, int valueIdx) {
if (snapshots == null || snapshots[snapshotIdx] == null) {
private long value(int valueIdx) {
if (timestamp <= 0 || values == null) {
return 0;
}

return snapshots[snapshotIdx].values[valueIdx];
}

static final class StatsSnapshot {

public StatsSnapshot(long timestamp, long[] values) {
this.timestamp = timestamp;
this.values = values;
}

public StatsSnapshot(SessionStatsAlert alert) {
this(alert.getStatsTimestamp(), alert.getValues());
}

public final long timestamp;
public final long[] values;
return values[valueIdx];
}
}

0 comments on commit ee3768a

Please sign in to comment.