Merge "Wifi Tx/Rx rate computation" am: bccf93311c am: 33600a3d38

am: e929425a9e

Change-Id: Ia38e00d785c56c295007aa19f3fe1e70d6a8b494
This commit is contained in:
Randy Pan
2016-11-10 16:32:56 +00:00
committed by android-build-merger

View File

@@ -22,6 +22,7 @@ import android.net.NetworkInfo.DetailedState;
import android.net.NetworkUtils; import android.net.NetworkUtils;
import android.text.TextUtils; import android.text.TextUtils;
import java.lang.Math;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.Inet4Address; import java.net.Inet4Address;
import java.net.UnknownHostException; import java.net.UnknownHostException;
@@ -136,6 +137,15 @@ public class WifiInfo implements Parcelable {
*/ */
public double rxSuccessRate; public double rxSuccessRate;
private static final long RESET_TIME_STAMP = Long.MIN_VALUE;
private static final long FILTER_TIME_CONSTANT = 3000;
/**
* This factor is used to adjust the rate output under the new algorithm
* such that the result is comparable to the previous algorithm.
*/
private static final long OUTPUT_SCALE_FACTOR = 5000;
private long mLastPacketCountUpdateTimeStamp;
/** /**
* @hide * @hide
*/ */
@@ -157,10 +167,9 @@ public class WifiInfo implements Parcelable {
public int score; public int score;
/** /**
* TODO: get actual timestamp and calculate true rates
* @hide * @hide
*/ */
public void updatePacketRates(WifiLinkLayerStats stats) { public void updatePacketRates(WifiLinkLayerStats stats, long timeStamp) {
if (stats != null) { if (stats != null) {
long txgood = stats.txmpdu_be + stats.txmpdu_bk + stats.txmpdu_vi + stats.txmpdu_vo; long txgood = stats.txmpdu_be + stats.txmpdu_bk + stats.txmpdu_vi + stats.txmpdu_vo;
long txretries = stats.retries_be + stats.retries_bk long txretries = stats.retries_be + stats.retries_bk
@@ -169,18 +178,28 @@ public class WifiInfo implements Parcelable {
long txbad = stats.lostmpdu_be + stats.lostmpdu_bk long txbad = stats.lostmpdu_be + stats.lostmpdu_bk
+ stats.lostmpdu_vi + stats.lostmpdu_vo; + stats.lostmpdu_vi + stats.lostmpdu_vo;
if (txBad <= txbad if (mLastPacketCountUpdateTimeStamp != RESET_TIME_STAMP
&& mLastPacketCountUpdateTimeStamp < timeStamp
&& txBad <= txbad
&& txSuccess <= txgood && txSuccess <= txgood
&& rxSuccess <= rxgood && rxSuccess <= rxgood
&& txRetries <= txretries) { && txRetries <= txretries) {
txBadRate = (txBadRate * 0.5) long timeDelta = timeStamp - mLastPacketCountUpdateTimeStamp;
+ ((double) (txbad - txBad) * 0.5); double lastSampleWeight = Math.exp(-1.0 * timeDelta / FILTER_TIME_CONSTANT);
txSuccessRate = (txSuccessRate * 0.5) double currentSampleWeight = 1.0 - lastSampleWeight;
+ ((double) (txgood - txSuccess) * 0.5);
rxSuccessRate = (rxSuccessRate * 0.5) txBadRate = txBadRate * lastSampleWeight
+ ((double) (rxgood - rxSuccess) * 0.5); + (txbad - txBad) * OUTPUT_SCALE_FACTOR / timeDelta
txRetriesRate = (txRetriesRate * 0.5) * currentSampleWeight;
+ ((double) (txretries - txRetries) * 0.5); txSuccessRate = txSuccessRate * lastSampleWeight
+ (txgood - txSuccess) * OUTPUT_SCALE_FACTOR / timeDelta
* currentSampleWeight;
rxSuccessRate = rxSuccessRate * lastSampleWeight
+ (rxgood - rxSuccess) * OUTPUT_SCALE_FACTOR / timeDelta
* currentSampleWeight;
txRetriesRate = txRetriesRate * lastSampleWeight
+ (txretries - txRetries) * OUTPUT_SCALE_FACTOR / timeDelta
* currentSampleWeight;
} else { } else {
txBadRate = 0; txBadRate = 0;
txSuccessRate = 0; txSuccessRate = 0;
@@ -191,6 +210,7 @@ public class WifiInfo implements Parcelable {
txSuccess = txgood; txSuccess = txgood;
rxSuccess = rxgood; rxSuccess = rxgood;
txRetries = txretries; txRetries = txretries;
mLastPacketCountUpdateTimeStamp = timeStamp;
} else { } else {
txBad = 0; txBad = 0;
txSuccess = 0; txSuccess = 0;
@@ -200,6 +220,7 @@ public class WifiInfo implements Parcelable {
txSuccessRate = 0; txSuccessRate = 0;
rxSuccessRate = 0; rxSuccessRate = 0;
txRetriesRate = 0; txRetriesRate = 0;
mLastPacketCountUpdateTimeStamp = RESET_TIME_STAMP;
} }
} }
@@ -243,6 +264,7 @@ public class WifiInfo implements Parcelable {
mRssi = INVALID_RSSI; mRssi = INVALID_RSSI;
mLinkSpeed = -1; mLinkSpeed = -1;
mFrequency = -1; mFrequency = -1;
mLastPacketCountUpdateTimeStamp = RESET_TIME_STAMP;
} }
/** @hide */ /** @hide */
@@ -268,6 +290,7 @@ public class WifiInfo implements Parcelable {
badRssiCount = 0; badRssiCount = 0;
linkStuckCount = 0; linkStuckCount = 0;
score = 0; score = 0;
mLastPacketCountUpdateTimeStamp = RESET_TIME_STAMP;
} }
/** /**
@@ -295,6 +318,8 @@ public class WifiInfo implements Parcelable {
txRetriesRate = source.txRetriesRate; txRetriesRate = source.txRetriesRate;
txSuccessRate = source.txSuccessRate; txSuccessRate = source.txSuccessRate;
rxSuccessRate = source.rxSuccessRate; rxSuccessRate = source.rxSuccessRate;
mLastPacketCountUpdateTimeStamp =
source.mLastPacketCountUpdateTimeStamp;
score = source.score; score = source.score;
badRssiCount = source.badRssiCount; badRssiCount = source.badRssiCount;
lowRssiCount = source.lowRssiCount; lowRssiCount = source.lowRssiCount;