Wifi usability: Comments from API review council are addressed

Addressed all comments from API review council:
1. Rename WifiUsabilityStatsListener to OnWifiUsabilityStatsListener.
2. Change the modifier of member variables in WifiUsabilityStatsEntry.java to private and use getters.
3. Document the unit of predicitonHoirzonSec and its expected range.
4. Add @ProbeStaus in probeStatusSinceLastUpdate.
5. Rename probeElapsedTimeMsSinceLastUpdate to
ProbeElapsedTimeSinceLastUpdateMs.
6. Marked @NonNull for Argument 3 in onWifiUsabilityStats.

Bug: 126391553
Bug: 126699865
Bug: 113262380

Test: frameworks/base/wifi/tests/runtests.sh

Change-Id: I20d9ad05dc0bb537b09006ca44a447401b3e1001
Signed-off-by: Mingguang Xu <mingguangxu@google.com>
This commit is contained in:
Mingguang Xu
2019-03-08 09:58:23 -08:00
parent 908309feb5
commit e77cabc488
10 changed files with 299 additions and 174 deletions

View File

@@ -635,7 +635,7 @@ java_defaults {
"wifi/java/android/net/wifi/ISoftApCallback.aidl",
"wifi/java/android/net/wifi/ITrafficStateCallback.aidl",
"wifi/java/android/net/wifi/IWifiManager.aidl",
"wifi/java/android/net/wifi/IWifiUsabilityStatsListener.aidl",
"wifi/java/android/net/wifi/IOnWifiUsabilityStatsListener.aidl",
"wifi/java/android/net/wifi/aware/IWifiAwareDiscoverySessionCallback.aidl",
"wifi/java/android/net/wifi/aware/IWifiAwareEventCallback.aidl",
"wifi/java/android/net/wifi/aware/IWifiAwareMacAddressProvider.aidl",

View File

@@ -4746,7 +4746,7 @@ package android.net.wifi {
}
public class WifiManager {
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void addWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.WifiUsabilityStatsListener);
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void addOnWifiUsabilityStatsListener(@NonNull java.util.concurrent.Executor, @NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void connect(int, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void disable(int, @Nullable android.net.wifi.WifiManager.ActionListener);
@@ -4761,7 +4761,7 @@ package android.net.wifi {
method public boolean isPortableHotspotSupported();
method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled();
method public boolean isWifiScannerSupported();
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void removeWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.WifiUsabilityStatsListener);
method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener);
method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener);
method @RequiresPermission("android.permission.WIFI_SET_DEVICE_MOBILITY_STATE") public void setDeviceMobilityState(int);
method @RequiresPermission(android.Manifest.permission.CHANGE_WIFI_STATE) public boolean setWifiApConfiguration(android.net.wifi.WifiConfiguration);
@@ -4806,8 +4806,8 @@ package android.net.wifi {
method public void onSuccess();
}
public static interface WifiManager.WifiUsabilityStatsListener {
method public void onStatsUpdated(int, boolean, android.net.wifi.WifiUsabilityStatsEntry);
public static interface WifiManager.OnWifiUsabilityStatsListener {
method public void onWifiUsabilityStats(int, boolean, @NonNull android.net.wifi.WifiUsabilityStatsEntry);
}
public class WifiNetworkConnectionStatistics implements android.os.Parcelable {
@@ -4942,35 +4942,35 @@ package android.net.wifi {
public final class WifiUsabilityStatsEntry implements android.os.Parcelable {
method public int describeContents();
method public int getLinkSpeedMbps();
method public int getProbeElapsedTimeSinceLastUpdateMillis();
method public int getProbeMcsRateSinceLastUpdate();
method public int getProbeStatusSinceLastUpdate();
method public int getRssi();
method public int getRxLinkSpeedMbps();
method public long getTimeStampMillis();
method public long getTotalBackgroundScanTimeMillis();
method public long getTotalBeaconRx();
method public long getTotalCcaBusyFreqTimeMillis();
method public long getTotalHotspot2ScanTimeMillis();
method public long getTotalNanScanTimeMillis();
method public long getTotalPnoScanTimeMillis();
method public long getTotalRadioOnFreqTimeMillis();
method public long getTotalRadioOnTimeMillis();
method public long getTotalRadioRxTimeMillis();
method public long getTotalRadioTxTimeMillis();
method public long getTotalRoamScanTimeMillis();
method public long getTotalRxSuccess();
method public long getTotalScanTimeMillis();
method public long getTotalTxBad();
method public long getTotalTxRetries();
method public long getTotalTxSuccess();
method public void writeToParcel(android.os.Parcel, int);
field @NonNull public static final android.os.Parcelable.Creator<android.net.wifi.WifiUsabilityStatsEntry> CREATOR;
field public static final int PROBE_STATUS_FAILURE = 3; // 0x3
field public static final int PROBE_STATUS_NO_PROBE = 1; // 0x1
field public static final int PROBE_STATUS_SUCCESS = 2; // 0x2
field public static final int PROBE_STATUS_UNKNOWN = 0; // 0x0
field public final int linkSpeedMbps;
field public final int probeElapsedTimeMsSinceLastUpdate;
field public final int probeMcsRateSinceLastUpdate;
field public final int probeStatusSinceLastUpdate;
field public final int rssi;
field public final int rxLinkSpeedMbps;
field public final long timeStampMs;
field public final long totalBackgroundScanTimeMs;
field public final long totalBeaconRx;
field public final long totalCcaBusyFreqTimeMs;
field public final long totalHotspot2ScanTimeMs;
field public final long totalNanScanTimeMs;
field public final long totalPnoScanTimeMs;
field public final long totalRadioOnFreqTimeMs;
field public final long totalRadioOnTimeMs;
field public final long totalRadioRxTimeMs;
field public final long totalRadioTxTimeMs;
field public final long totalRoamScanTimeMs;
field public final long totalRxSuccess;
field public final long totalScanTimeMs;
field public final long totalTxBad;
field public final long totalTxRetries;
field public final long totalTxSuccess;
}
}

View File

@@ -1954,7 +1954,7 @@ message WifiUsabilityStatsEntry {
optional LinkProbeStatus probe_status_since_last_update = 24;
// The elapsed time of the most recent link probe since last stats update;
optional int32 probe_elapsed_time_ms_since_last_update = 25;
optional int32 probe_elapsed_time_since_last_update_ms = 25;
// The MCS rate of the most recent link probe since last stats update
optional int32 probe_mcs_rate_since_last_update = 26;

View File

@@ -23,7 +23,7 @@ import android.net.wifi.WifiUsabilityStatsEntry;
*
* @hide
*/
oneway interface IWifiUsabilityStatsListener
oneway interface IOnWifiUsabilityStatsListener
{
/**
* Service to manager callback providing current Wi-Fi usability stats.
@@ -36,6 +36,6 @@ oneway interface IWifiUsabilityStatsListener
* Wi-Fi usability stats.
* @param stats The updated Wi-Fi usability statistics.
*/
void onStatsUpdated(int seqNum, boolean isSameBssidAndFreq,
void onWifiUsabilityStats(int seqNum, boolean isSameBssidAndFreq,
in WifiUsabilityStatsEntry stats);
}

View File

@@ -28,7 +28,7 @@ import android.net.wifi.IDppCallback;
import android.net.wifi.INetworkRequestMatchCallback;
import android.net.wifi.ISoftApCallback;
import android.net.wifi.ITrafficStateCallback;
import android.net.wifi.IWifiUsabilityStatsListener;
import android.net.wifi.IOnWifiUsabilityStatsListener;
import android.net.wifi.PasspointManagementObjectDefinition;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiActivityEnergyInfo;
@@ -190,9 +190,9 @@ interface IWifiManager
void unregisterSoftApCallback(int callbackIdentifier);
void addWifiUsabilityStatsListener(in IBinder binder, in IWifiUsabilityStatsListener listener, int listenerIdentifier);
void addOnWifiUsabilityStatsListener(in IBinder binder, in IOnWifiUsabilityStatsListener listener, int listenerIdentifier);
void removeWifiUsabilityStatsListener(int listenerIdentifier);
void removeOnWifiUsabilityStatsListener(int listenerIdentifier);
void registerTrafficStateCallback(in IBinder binder, in ITrafficStateCallback callback, int callbackIdentifier);

View File

@@ -4785,13 +4785,13 @@ public class WifiManager {
/**
* Interface for Wi-Fi usability statistics listener. Should be implemented by applications and
* set when calling {@link WifiManager#addWifiUsabilityStatsListener(Executor,
* WifiUsabilityStatsListener)}.
* set when calling {@link WifiManager#addOnWifiUsabilityStatsListener(Executor,
* OnWifiUsabilityStatsListener)}.
*
* @hide
*/
@SystemApi
public interface WifiUsabilityStatsListener {
public interface OnWifiUsabilityStatsListener {
/**
* Called when Wi-Fi usability statistics is updated.
*
@@ -4803,15 +4803,15 @@ public class WifiManager {
* Wi-Fi usability stats.
* @param stats The updated Wi-Fi usability statistics.
*/
void onStatsUpdated(int seqNum, boolean isSameBssidAndFreq,
WifiUsabilityStatsEntry stats);
void onWifiUsabilityStats(int seqNum, boolean isSameBssidAndFreq,
@NonNull WifiUsabilityStatsEntry stats);
}
/**
* Adds a listener for Wi-Fi usability statistics. See {@link WifiUsabilityStatsListener}.
* Adds a listener for Wi-Fi usability statistics. See {@link OnWifiUsabilityStatsListener}.
* Multiple listeners can be added. Callers will be invoked periodically by framework to
* inform clients about the current Wi-Fi usability statistics. Callers can remove a previously
* added listener using {@link removeWifiUsabilityStatsListener}.
* added listener using {@link removeOnWifiUsabilityStatsListener}.
*
* @param executor The executor on which callback will be invoked.
* @param listener Listener for Wifi usability statistics.
@@ -4820,25 +4820,25 @@ public class WifiManager {
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE)
public void addWifiUsabilityStatsListener(@NonNull @CallbackExecutor Executor executor,
@NonNull WifiUsabilityStatsListener listener) {
public void addOnWifiUsabilityStatsListener(@NonNull @CallbackExecutor Executor executor,
@NonNull OnWifiUsabilityStatsListener listener) {
if (executor == null) throw new IllegalArgumentException("executor cannot be null");
if (listener == null) throw new IllegalArgumentException("listener cannot be null");
if (mVerboseLoggingEnabled) {
Log.v(TAG, "addWifiUsabilityStatsListener: listener=" + listener);
Log.v(TAG, "addOnWifiUsabilityStatsListener: listener=" + listener);
}
try {
mService.addWifiUsabilityStatsListener(new Binder(),
new IWifiUsabilityStatsListener.Stub() {
mService.addOnWifiUsabilityStatsListener(new Binder(),
new IOnWifiUsabilityStatsListener.Stub() {
@Override
public void onStatsUpdated(int seqNum, boolean isSameBssidAndFreq,
public void onWifiUsabilityStats(int seqNum, boolean isSameBssidAndFreq,
WifiUsabilityStatsEntry stats) {
if (mVerboseLoggingEnabled) {
Log.v(TAG, "WifiUsabilityStatsListener: onStatsUpdated: seqNum="
+ seqNum);
Log.v(TAG, "OnWifiUsabilityStatsListener: "
+ "onWifiUsabilityStats: seqNum=" + seqNum);
}
Binder.withCleanCallingIdentity(() ->
executor.execute(() -> listener.onStatsUpdated(seqNum,
executor.execute(() -> listener.onWifiUsabilityStats(seqNum,
isSameBssidAndFreq, stats)));
}
},
@@ -4859,13 +4859,13 @@ public class WifiManager {
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.WIFI_UPDATE_USABILITY_STATS_SCORE)
public void removeWifiUsabilityStatsListener(@NonNull WifiUsabilityStatsListener listener) {
public void removeOnWifiUsabilityStatsListener(@NonNull OnWifiUsabilityStatsListener listener) {
if (listener == null) throw new IllegalArgumentException("listener cannot be null");
if (mVerboseLoggingEnabled) {
Log.v(TAG, "removeWifiUsabilityStatsListener: listener=" + listener);
Log.v(TAG, "removeOnWifiUsabilityStatsListener: listener=" + listener);
}
try {
mService.removeWifiUsabilityStatsListener(listener.hashCode());
mService.removeOnWifiUsabilityStatsListener(listener.hashCode());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -4879,7 +4879,8 @@ public class WifiManager {
*
* @param seqNum Sequence number of the Wi-Fi usability score.
* @param score The Wi-Fi usability score.
* @param predictionHorizonSec Prediction horizon of the Wi-Fi usability score.
* @param predictionHorizonSec Prediction horizon of the Wi-Fi usability score in second,
* expected range: [0, 100].
*
* @hide
*/

View File

@@ -51,87 +51,88 @@ public final class WifiUsabilityStatsEntry implements Parcelable {
public static final int PROBE_STATUS_FAILURE = 3;
/** Absolute milliseconds from device boot when these stats were sampled */
public final long timeStampMs;
private final long mTimeStampMillis;
/** The RSSI (in dBm) at the sample time */
public final int rssi;
private final int mRssi;
/** Link speed at the sample time in Mbps */
public final int linkSpeedMbps;
private final int mLinkSpeedMbps;
/** The total number of tx success counted from the last radio chip reset */
public final long totalTxSuccess;
private final long mTotalTxSuccess;
/** The total number of MPDU data packet retries counted from the last radio chip reset */
public final long totalTxRetries;
private final long mTotalTxRetries;
/** The total number of tx bad counted from the last radio chip reset */
public final long totalTxBad;
private final long mTotalTxBad;
/** The total number of rx success counted from the last radio chip reset */
public final long totalRxSuccess;
private final long mTotalRxSuccess;
/** The total time the wifi radio is on in ms counted from the last radio chip reset */
public final long totalRadioOnTimeMs;
private final long mTotalRadioOnTimeMillis;
/** The total time the wifi radio is doing tx in ms counted from the last radio chip reset */
public final long totalRadioTxTimeMs;
private final long mTotalRadioTxTimeMillis;
/** The total time the wifi radio is doing rx in ms counted from the last radio chip reset */
public final long totalRadioRxTimeMs;
private final long mTotalRadioRxTimeMillis;
/** The total time spent on all types of scans in ms counted from the last radio chip reset */
public final long totalScanTimeMs;
private final long mTotalScanTimeMillis;
/** The total time spent on nan scans in ms counted from the last radio chip reset */
public final long totalNanScanTimeMs;
private final long mTotalNanScanTimeMillis;
/** The total time spent on background scans in ms counted from the last radio chip reset */
public final long totalBackgroundScanTimeMs;
private final long mTotalBackgroundScanTimeMillis;
/** The total time spent on roam scans in ms counted from the last radio chip reset */
public final long totalRoamScanTimeMs;
private final long mTotalRoamScanTimeMillis;
/** The total time spent on pno scans in ms counted from the last radio chip reset */
public final long totalPnoScanTimeMs;
private final long mTotalPnoScanTimeMillis;
/** The total time spent on hotspot2.0 scans and GAS exchange in ms counted from the last radio
* chip reset */
public final long totalHotspot2ScanTimeMs;
private final long mTotalHotspot2ScanTimeMillis;
/** The total time CCA is on busy status on the current frequency in ms counted from the last
* radio chip reset */
public final long totalCcaBusyFreqTimeMs;
/** The total radio on time of the current frequency from the last radio chip reset */
public final long totalRadioOnFreqTimeMs;
private final long mTotalCcaBusyFreqTimeMillis;
/** The total radio on time on the current frequency from the last radio chip reset */
private final long mTotalRadioOnFreqTimeMillis;
/** The total number of beacons received from the last radio chip reset */
public final long totalBeaconRx;
private final long mTotalBeaconRx;
/** The status of link probe since last stats update */
public final int probeStatusSinceLastUpdate;
@ProbeStatus private final int mProbeStatusSinceLastUpdate;
/** The elapsed time of the most recent link probe since last stats update */
public final int probeElapsedTimeMsSinceLastUpdate;
private final int mProbeElapsedTimeSinceLastUpdateMillis;
/** The MCS rate of the most recent link probe since last stats update */
public final int probeMcsRateSinceLastUpdate;
private final int mProbeMcsRateSinceLastUpdate;
/** Rx link speed at the sample time in Mbps */
public final int rxLinkSpeedMbps;
private final int mRxLinkSpeedMbps;
/** Constructor function {@hide} */
public WifiUsabilityStatsEntry(long timeStampMs, int rssi,
int linkSpeedMbps, long totalTxSuccess, long totalTxRetries,
long totalTxBad, long totalRxSuccess, long totalRadioOnTimeMs,
long totalRadioTxTimeMs, long totalRadioRxTimeMs, long totalScanTimeMs,
long totalNanScanTimeMs, long totalBackgroundScanTimeMs, long totalRoamScanTimeMs,
long totalPnoScanTimeMs, long totalHotspot2ScanTimeMs, long totalCcaBusyFreqTimeMs,
long totalRadioOnFreqTimeMs, long totalBeaconRx,
@ProbeStatus int probeStatusSinceLastUpdate, int probeElapsedTimeMsSinceLastUpdate,
public WifiUsabilityStatsEntry(long timeStampMillis, int rssi, int linkSpeedMbps,
long totalTxSuccess, long totalTxRetries, long totalTxBad, long totalRxSuccess,
long totalRadioOnTimeMillis, long totalRadioTxTimeMillis, long totalRadioRxTimeMillis,
long totalScanTimeMillis, long totalNanScanTimeMillis,
long totalBackgroundScanTimeMillis,
long totalRoamScanTimeMillis, long totalPnoScanTimeMillis,
long totalHotspot2ScanTimeMillis,
long totalCcaBusyFreqTimeMillis, long totalRadioOnFreqTimeMillis, long totalBeaconRx,
@ProbeStatus int probeStatusSinceLastUpdate, int probeElapsedTimeSinceLastUpdateMillis,
int probeMcsRateSinceLastUpdate, int rxLinkSpeedMbps) {
this.timeStampMs = timeStampMs;
this.rssi = rssi;
this.linkSpeedMbps = linkSpeedMbps;
this.totalTxSuccess = totalTxSuccess;
this.totalTxRetries = totalTxRetries;
this.totalTxBad = totalTxBad;
this.totalRxSuccess = totalRxSuccess;
this.totalRadioOnTimeMs = totalRadioOnTimeMs;
this.totalRadioTxTimeMs = totalRadioTxTimeMs;
this.totalRadioRxTimeMs = totalRadioRxTimeMs;
this.totalScanTimeMs = totalScanTimeMs;
this.totalNanScanTimeMs = totalNanScanTimeMs;
this.totalBackgroundScanTimeMs = totalBackgroundScanTimeMs;
this.totalRoamScanTimeMs = totalRoamScanTimeMs;
this.totalPnoScanTimeMs = totalPnoScanTimeMs;
this.totalHotspot2ScanTimeMs = totalHotspot2ScanTimeMs;
this.totalCcaBusyFreqTimeMs = totalCcaBusyFreqTimeMs;
this.totalRadioOnFreqTimeMs = totalRadioOnFreqTimeMs;
this.totalBeaconRx = totalBeaconRx;
this.probeStatusSinceLastUpdate = probeStatusSinceLastUpdate;
this.probeElapsedTimeMsSinceLastUpdate = probeElapsedTimeMsSinceLastUpdate;
this.probeMcsRateSinceLastUpdate = probeMcsRateSinceLastUpdate;
this.rxLinkSpeedMbps = rxLinkSpeedMbps;
mTimeStampMillis = timeStampMillis;
mRssi = rssi;
mLinkSpeedMbps = linkSpeedMbps;
mTotalTxSuccess = totalTxSuccess;
mTotalTxRetries = totalTxRetries;
mTotalTxBad = totalTxBad;
mTotalRxSuccess = totalRxSuccess;
mTotalRadioOnTimeMillis = totalRadioOnTimeMillis;
mTotalRadioTxTimeMillis = totalRadioTxTimeMillis;
mTotalRadioRxTimeMillis = totalRadioRxTimeMillis;
mTotalScanTimeMillis = totalScanTimeMillis;
mTotalNanScanTimeMillis = totalNanScanTimeMillis;
mTotalBackgroundScanTimeMillis = totalBackgroundScanTimeMillis;
mTotalRoamScanTimeMillis = totalRoamScanTimeMillis;
mTotalPnoScanTimeMillis = totalPnoScanTimeMillis;
mTotalHotspot2ScanTimeMillis = totalHotspot2ScanTimeMillis;
mTotalCcaBusyFreqTimeMillis = totalCcaBusyFreqTimeMillis;
mTotalRadioOnFreqTimeMillis = totalRadioOnFreqTimeMillis;
mTotalBeaconRx = totalBeaconRx;
mProbeStatusSinceLastUpdate = probeStatusSinceLastUpdate;
mProbeElapsedTimeSinceLastUpdateMillis = probeElapsedTimeSinceLastUpdateMillis;
mProbeMcsRateSinceLastUpdate = probeMcsRateSinceLastUpdate;
mRxLinkSpeedMbps = rxLinkSpeedMbps;
}
/** Implement the Parcelable interface */
@@ -141,29 +142,29 @@ public final class WifiUsabilityStatsEntry implements Parcelable {
/** Implement the Parcelable interface */
public void writeToParcel(Parcel dest, int flags) {
dest.writeLong(timeStampMs);
dest.writeInt(rssi);
dest.writeInt(linkSpeedMbps);
dest.writeLong(totalTxSuccess);
dest.writeLong(totalTxRetries);
dest.writeLong(totalTxBad);
dest.writeLong(totalRxSuccess);
dest.writeLong(totalRadioOnTimeMs);
dest.writeLong(totalRadioTxTimeMs);
dest.writeLong(totalRadioRxTimeMs);
dest.writeLong(totalScanTimeMs);
dest.writeLong(totalNanScanTimeMs);
dest.writeLong(totalBackgroundScanTimeMs);
dest.writeLong(totalRoamScanTimeMs);
dest.writeLong(totalPnoScanTimeMs);
dest.writeLong(totalHotspot2ScanTimeMs);
dest.writeLong(totalCcaBusyFreqTimeMs);
dest.writeLong(totalRadioOnFreqTimeMs);
dest.writeLong(totalBeaconRx);
dest.writeInt(probeStatusSinceLastUpdate);
dest.writeInt(probeElapsedTimeMsSinceLastUpdate);
dest.writeInt(probeMcsRateSinceLastUpdate);
dest.writeInt(rxLinkSpeedMbps);
dest.writeLong(mTimeStampMillis);
dest.writeInt(mRssi);
dest.writeInt(mLinkSpeedMbps);
dest.writeLong(mTotalTxSuccess);
dest.writeLong(mTotalTxRetries);
dest.writeLong(mTotalTxBad);
dest.writeLong(mTotalRxSuccess);
dest.writeLong(mTotalRadioOnTimeMillis);
dest.writeLong(mTotalRadioTxTimeMillis);
dest.writeLong(mTotalRadioRxTimeMillis);
dest.writeLong(mTotalScanTimeMillis);
dest.writeLong(mTotalNanScanTimeMillis);
dest.writeLong(mTotalBackgroundScanTimeMillis);
dest.writeLong(mTotalRoamScanTimeMillis);
dest.writeLong(mTotalPnoScanTimeMillis);
dest.writeLong(mTotalHotspot2ScanTimeMillis);
dest.writeLong(mTotalCcaBusyFreqTimeMillis);
dest.writeLong(mTotalRadioOnFreqTimeMillis);
dest.writeLong(mTotalBeaconRx);
dest.writeInt(mProbeStatusSinceLastUpdate);
dest.writeInt(mProbeElapsedTimeSinceLastUpdateMillis);
dest.writeInt(mProbeMcsRateSinceLastUpdate);
dest.writeInt(mRxLinkSpeedMbps);
}
/** Implement the Parcelable interface */
@@ -186,4 +187,121 @@ public final class WifiUsabilityStatsEntry implements Parcelable {
return new WifiUsabilityStatsEntry[size];
}
};
/** Absolute milliseconds from device boot when these stats were sampled */
public long getTimeStampMillis() {
return mTimeStampMillis;
}
/** The RSSI (in dBm) at the sample time */
public int getRssi() {
return mRssi;
}
/** Link speed at the sample time in Mbps */
public int getLinkSpeedMbps() {
return mLinkSpeedMbps;
}
/** The total number of tx success counted from the last radio chip reset */
public long getTotalTxSuccess() {
return mTotalTxSuccess;
}
/** The total number of MPDU data packet retries counted from the last radio chip reset */
public long getTotalTxRetries() {
return mTotalTxRetries;
}
/** The total number of tx bad counted from the last radio chip reset */
public long getTotalTxBad() {
return mTotalTxBad;
}
/** The total number of rx success counted from the last radio chip reset */
public long getTotalRxSuccess() {
return mTotalRxSuccess;
}
/** The total time the wifi radio is on in ms counted from the last radio chip reset */
public long getTotalRadioOnTimeMillis() {
return mTotalRadioOnTimeMillis;
}
/** The total time the wifi radio is doing tx in ms counted from the last radio chip reset */
public long getTotalRadioTxTimeMillis() {
return mTotalRadioTxTimeMillis;
}
/** The total time the wifi radio is doing rx in ms counted from the last radio chip reset */
public long getTotalRadioRxTimeMillis() {
return mTotalRadioRxTimeMillis;
}
/** The total time spent on all types of scans in ms counted from the last radio chip reset */
public long getTotalScanTimeMillis() {
return mTotalScanTimeMillis;
}
/** The total time spent on nan scans in ms counted from the last radio chip reset */
public long getTotalNanScanTimeMillis() {
return mTotalNanScanTimeMillis;
}
/** The total time spent on background scans in ms counted from the last radio chip reset */
public long getTotalBackgroundScanTimeMillis() {
return mTotalBackgroundScanTimeMillis;
}
/** The total time spent on roam scans in ms counted from the last radio chip reset */
public long getTotalRoamScanTimeMillis() {
return mTotalRoamScanTimeMillis;
}
/** The total time spent on pno scans in ms counted from the last radio chip reset */
public long getTotalPnoScanTimeMillis() {
return mTotalPnoScanTimeMillis;
}
/** The total time spent on hotspot2.0 scans and GAS exchange in ms counted from the last radio
* chip reset */
public long getTotalHotspot2ScanTimeMillis() {
return mTotalHotspot2ScanTimeMillis;
}
/** The total time CCA is on busy status on the current frequency in ms counted from the last
* radio chip reset */
public long getTotalCcaBusyFreqTimeMillis() {
return mTotalCcaBusyFreqTimeMillis;
}
/** The total radio on time on the current frequency from the last radio chip reset */
public long getTotalRadioOnFreqTimeMillis() {
return mTotalRadioOnFreqTimeMillis;
}
/** The total number of beacons received from the last radio chip reset */
public long getTotalBeaconRx() {
return mTotalBeaconRx;
}
/** The status of link probe since last stats update */
@ProbeStatus public int getProbeStatusSinceLastUpdate() {
return mProbeStatusSinceLastUpdate;
}
/** The elapsed time of the most recent link probe since last stats update */
public int getProbeElapsedTimeSinceLastUpdateMillis() {
return mProbeElapsedTimeSinceLastUpdateMillis;
}
/** The MCS rate of the most recent link probe since last stats update */
public int getProbeMcsRateSinceLastUpdate() {
return mProbeMcsRateSinceLastUpdate;
}
/** Rx link speed at the sample time in Mbps */
public int getRxLinkSpeedMbps() {
return mRxLinkSpeedMbps;
}
}

View File

@@ -23,10 +23,10 @@ import android.net.DhcpInfo;
import android.net.Network;
import android.net.wifi.IDppCallback;
import android.net.wifi.INetworkRequestMatchCallback;
import android.net.wifi.IOnWifiUsabilityStatsListener;
import android.net.wifi.ISoftApCallback;
import android.net.wifi.ITrafficStateCallback;
import android.net.wifi.IWifiManager;
import android.net.wifi.IWifiUsabilityStatsListener;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiActivityEnergyInfo;
import android.net.wifi.WifiConfiguration;
@@ -467,13 +467,13 @@ public class BaseWifiService extends IWifiManager.Stub {
}
@Override
public void addWifiUsabilityStatsListener(
IBinder binder, IWifiUsabilityStatsListener listener, int listenerIdentifier) {
public void addOnWifiUsabilityStatsListener(
IBinder binder, IOnWifiUsabilityStatsListener listener, int listenerIdentifier) {
throw new UnsupportedOperationException();
}
@Override
public void removeWifiUsabilityStatsListener(int listenerIdentifier) {
public void removeOnWifiUsabilityStatsListener(int listenerIdentifier) {
throw new UnsupportedOperationException();
}

View File

@@ -59,9 +59,9 @@ import android.net.wifi.WifiManager.LocalOnlyHotspotReservation;
import android.net.wifi.WifiManager.LocalOnlyHotspotSubscription;
import android.net.wifi.WifiManager.NetworkRequestMatchCallback;
import android.net.wifi.WifiManager.NetworkRequestUserSelectionCallback;
import android.net.wifi.WifiManager.OnWifiUsabilityStatsListener;
import android.net.wifi.WifiManager.SoftApCallback;
import android.net.wifi.WifiManager.TrafficStateCallback;
import android.net.wifi.WifiManager.WifiUsabilityStatsListener;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
@@ -105,7 +105,7 @@ public class WifiManagerTest {
@Mock SoftApCallback mSoftApCallback;
@Mock TrafficStateCallback mTrafficStateCallback;
@Mock NetworkRequestMatchCallback mNetworkRequestMatchCallback;
@Mock WifiUsabilityStatsListener mWifiUsabilityStatsListener;
@Mock OnWifiUsabilityStatsListener mOnWifiUsabilityStatsListener;
private Executor mExecutor;
private Handler mHandler;
@@ -1348,29 +1348,29 @@ i * Verify that a call to cancel WPS immediately returns a failure.
}
/**
* Verify the call to addWifiUsabilityStatsListener goes to WifiServiceImpl.
* Verify the call to addOnWifiUsabilityStatsListener goes to WifiServiceImpl.
*/
@Test
public void addWifiUsabilityStatsListeneroesToWifiServiceImpl() throws Exception {
public void addOnWifiUsabilityStatsListeneroesToWifiServiceImpl() throws Exception {
mExecutor = new SynchronousExecutor();
mWifiManager.addWifiUsabilityStatsListener(mExecutor, mWifiUsabilityStatsListener);
verify(mWifiService).addWifiUsabilityStatsListener(any(IBinder.class),
any(IWifiUsabilityStatsListener.Stub.class), anyInt());
mWifiManager.addOnWifiUsabilityStatsListener(mExecutor, mOnWifiUsabilityStatsListener);
verify(mWifiService).addOnWifiUsabilityStatsListener(any(IBinder.class),
any(IOnWifiUsabilityStatsListener.Stub.class), anyInt());
}
/**
* Verify the call to removeWifiUsabilityStatsListener goes to WifiServiceImpl.
* Verify the call to removeOnWifiUsabilityStatsListener goes to WifiServiceImpl.
*/
@Test
public void removeWifiUsabilityListenerGoesToWifiServiceImpl() throws Exception {
public void removeOnWifiUsabilityListenerGoesToWifiServiceImpl() throws Exception {
ArgumentCaptor<Integer> listenerIdentifier = ArgumentCaptor.forClass(Integer.class);
mExecutor = new SynchronousExecutor();
mWifiManager.addWifiUsabilityStatsListener(mExecutor, mWifiUsabilityStatsListener);
verify(mWifiService).addWifiUsabilityStatsListener(any(IBinder.class),
any(IWifiUsabilityStatsListener.Stub.class), listenerIdentifier.capture());
mWifiManager.addOnWifiUsabilityStatsListener(mExecutor, mOnWifiUsabilityStatsListener);
verify(mWifiService).addOnWifiUsabilityStatsListener(any(IBinder.class),
any(IOnWifiUsabilityStatsListener.Stub.class), listenerIdentifier.capture());
mWifiManager.removeWifiUsabilityStatsListener(mWifiUsabilityStatsListener);
verify(mWifiService).removeWifiUsabilityStatsListener(
mWifiManager.removeOnWifiUsabilityStatsListener(mOnWifiUsabilityStatsListener);
verify(mWifiService).removeOnWifiUsabilityStatsListener(
eq((int) listenerIdentifier.getValue()));
}

View File

@@ -81,29 +81,35 @@ public class WifiUsabilityStatsEntryTest {
private static void assertWifiUsabilityStatsEntryEquals(
WifiUsabilityStatsEntry expected,
WifiUsabilityStatsEntry actual) {
assertEquals(expected.timeStampMs, actual.timeStampMs);
assertEquals(expected.rssi, actual.rssi);
assertEquals(expected.linkSpeedMbps, actual.linkSpeedMbps);
assertEquals(expected.totalTxSuccess, actual.totalTxSuccess);
assertEquals(expected.totalTxRetries, actual.totalTxRetries);
assertEquals(expected.totalTxBad, actual.totalTxBad);
assertEquals(expected.totalRxSuccess, actual.totalRxSuccess);
assertEquals(expected.totalRadioOnTimeMs, actual.totalRadioOnTimeMs);
assertEquals(expected.totalRadioTxTimeMs, actual.totalRadioTxTimeMs);
assertEquals(expected.totalRadioRxTimeMs, actual.totalRadioRxTimeMs);
assertEquals(expected.totalScanTimeMs, actual.totalScanTimeMs);
assertEquals(expected.totalNanScanTimeMs, actual.totalNanScanTimeMs);
assertEquals(expected.totalBackgroundScanTimeMs, actual.totalBackgroundScanTimeMs);
assertEquals(expected.totalRoamScanTimeMs, actual.totalRoamScanTimeMs);
assertEquals(expected.totalPnoScanTimeMs, actual.totalPnoScanTimeMs);
assertEquals(expected.totalHotspot2ScanTimeMs, actual.totalHotspot2ScanTimeMs);
assertEquals(expected.totalCcaBusyFreqTimeMs, actual.totalCcaBusyFreqTimeMs);
assertEquals(expected.totalRadioOnFreqTimeMs, actual.totalRadioOnFreqTimeMs);
assertEquals(expected.totalBeaconRx, actual.totalBeaconRx);
assertEquals(expected.probeStatusSinceLastUpdate, actual.probeStatusSinceLastUpdate);
assertEquals(expected.probeElapsedTimeMsSinceLastUpdate,
actual.probeElapsedTimeMsSinceLastUpdate);
assertEquals(expected.probeMcsRateSinceLastUpdate, actual.probeMcsRateSinceLastUpdate);
assertEquals(expected.rxLinkSpeedMbps, actual.rxLinkSpeedMbps);
assertEquals(expected.getTimeStampMillis(), actual.getTimeStampMillis());
assertEquals(expected.getRssi(), actual.getRssi());
assertEquals(expected.getLinkSpeedMbps(), actual.getLinkSpeedMbps());
assertEquals(expected.getTotalTxSuccess(), actual.getTotalTxSuccess());
assertEquals(expected.getTotalTxRetries(), actual.getTotalTxRetries());
assertEquals(expected.getTotalTxBad(), actual.getTotalTxBad());
assertEquals(expected.getTotalRxSuccess(), actual.getTotalRxSuccess());
assertEquals(expected.getTotalRadioOnTimeMillis(), actual.getTotalRadioOnTimeMillis());
assertEquals(expected.getTotalRadioTxTimeMillis(), actual.getTotalRadioTxTimeMillis());
assertEquals(expected.getTotalRadioRxTimeMillis(), actual.getTotalRadioRxTimeMillis());
assertEquals(expected.getTotalScanTimeMillis(), actual.getTotalScanTimeMillis());
assertEquals(expected.getTotalNanScanTimeMillis(), actual.getTotalNanScanTimeMillis());
assertEquals(expected.getTotalBackgroundScanTimeMillis(),
actual.getTotalBackgroundScanTimeMillis());
assertEquals(expected.getTotalRoamScanTimeMillis(), actual.getTotalRoamScanTimeMillis());
assertEquals(expected.getTotalPnoScanTimeMillis(), actual.getTotalPnoScanTimeMillis());
assertEquals(expected.getTotalHotspot2ScanTimeMillis(),
actual.getTotalHotspot2ScanTimeMillis());
assertEquals(expected.getTotalCcaBusyFreqTimeMillis(),
actual.getTotalCcaBusyFreqTimeMillis());
assertEquals(expected.getTotalRadioOnFreqTimeMillis(),
actual.getTotalRadioOnFreqTimeMillis());
assertEquals(expected.getTotalBeaconRx(), actual.getTotalBeaconRx());
assertEquals(expected.getProbeStatusSinceLastUpdate(),
actual.getProbeStatusSinceLastUpdate());
assertEquals(expected.getProbeElapsedTimeSinceLastUpdateMillis(),
actual.getProbeElapsedTimeSinceLastUpdateMillis());
assertEquals(expected.getProbeMcsRateSinceLastUpdate(),
actual.getProbeMcsRateSinceLastUpdate());
assertEquals(expected.getRxLinkSpeedMbps(), actual.getRxLinkSpeedMbps());
}
}