summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorOscar Shu <xshu@google.com>2018-10-02 18:11:48 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2018-10-02 18:11:48 +0000
commit91c4e97cd423872b3b9e0358efb9081ee7344890 (patch)
treeeaa11d44bc7943248a2ca4bc7455041cd235215c /service
parent666a511081fd80908ab7ce437d35a48a07791df5 (diff)
parentf5e766890949a9abc6079678b0d36b52d4b5c483 (diff)
Merge "Metrics for wifi link layer stats usage"
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java1
-rw-r--r--service/java/com/android/server/wifi/WifiMetrics.java56
2 files changed, 56 insertions, 1 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index 7781805b2..3bae1ba26 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -4897,6 +4897,7 @@ public class ClientModeImpl extends StateMachine {
if (message.arg1 == mRssiPollToken) {
WifiLinkLayerStats stats = getWifiLinkLayerStats();
mWifiDataStall.checkForDataStall(mLastLinkLayerStats, stats);
+ mWifiMetrics.incrementWifiLinkLayerUsageStats(stats);
mLastLinkLayerStats = stats;
// Get Info and continue polling
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index 1bcd22d0c..5f1e09b75 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -30,7 +30,6 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.SystemProperties;
-
import android.provider.Settings;
import android.util.Base64;
import android.util.Log;
@@ -55,6 +54,7 @@ import com.android.server.wifi.nano.WifiMetricsProto.SoftApConnectedClientsEvent
import com.android.server.wifi.nano.WifiMetricsProto.StaEvent;
import com.android.server.wifi.nano.WifiMetricsProto.StaEvent.ConfigInfo;
import com.android.server.wifi.nano.WifiMetricsProto.WifiIsUnusableEvent;
+import com.android.server.wifi.nano.WifiMetricsProto.WifiLinkLayerUsageStats;
import com.android.server.wifi.nano.WifiMetricsProto.WpsMetrics;
import com.android.server.wifi.rtt.RttMetrics;
import com.android.server.wifi.util.InformationElementUtil;
@@ -130,6 +130,7 @@ public class WifiMetrics {
private WifiAwareMetrics mWifiAwareMetrics;
private RttMetrics mRttMetrics;
private final PnoScanMetrics mPnoScanMetrics = new PnoScanMetrics();
+ private final WifiLinkLayerUsageStats mWifiLinkLayerUsageStats = new WifiLinkLayerUsageStats();
private final WpsMetrics mWpsMetrics = new WpsMetrics();
private final ExperimentValues mExperimentValues = new ExperimentValues();
private Handler mHandler;
@@ -140,6 +141,7 @@ public class WifiMetrics {
private Context mContext;
private FrameworkFacade mFacade;
private WifiDataStall mWifiDataStall;
+ private WifiLinkLayerStats mLastLinkLayerStats;
/** Tracks if we should be logging WifiIsUnusableEvent */
private boolean mUnusableEventLogging = false;
@@ -541,6 +543,45 @@ public class WifiMetrics {
}
/**
+ * Increment cumulative counters for link layer stats.
+ * @param newStats
+ */
+ public void incrementWifiLinkLayerUsageStats(WifiLinkLayerStats newStats) {
+ if (newStats == null) {
+ return;
+ }
+ if (mLastLinkLayerStats == null) {
+ mLastLinkLayerStats = newStats;
+ return;
+ }
+ if (!newLinkLayerStatsIsValid(mLastLinkLayerStats, newStats)) {
+ // This could mean the radio chip is reset or the data is incorrectly reported.
+ // Don't increment any counts and discard the possibly corrupt |newStats| completely.
+ mLastLinkLayerStats = null;
+ return;
+ }
+ mWifiLinkLayerUsageStats.loggingDurationMs +=
+ (newStats.timeStampInMs - mLastLinkLayerStats.timeStampInMs);
+ mWifiLinkLayerUsageStats.radioOnTimeMs += (newStats.on_time - mLastLinkLayerStats.on_time);
+ mWifiLinkLayerUsageStats.radioTxTimeMs += (newStats.tx_time - mLastLinkLayerStats.tx_time);
+ mWifiLinkLayerUsageStats.radioRxTimeMs += (newStats.rx_time - mLastLinkLayerStats.rx_time);
+ mWifiLinkLayerUsageStats.radioScanTimeMs +=
+ (newStats.on_time_scan - mLastLinkLayerStats.on_time_scan);
+ mLastLinkLayerStats = newStats;
+ }
+
+ private boolean newLinkLayerStatsIsValid(WifiLinkLayerStats oldStats,
+ WifiLinkLayerStats newStats) {
+ if (newStats.on_time < oldStats.on_time
+ || newStats.tx_time < oldStats.tx_time
+ || newStats.rx_time < oldStats.rx_time
+ || newStats.on_time_scan < oldStats.on_time_scan) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
* Increment total number of attempts to start a pno scan
*/
public void incrementPnoScanStartAttempCount() {
@@ -2222,6 +2263,17 @@ public class WifiMetrics {
pw.println("mPnoScanMetrics.numPnoFoundNetworkEvents="
+ mPnoScanMetrics.numPnoFoundNetworkEvents);
+ pw.println("mWifiLinkLayerUsageStats.loggingDurationMs="
+ + mWifiLinkLayerUsageStats.loggingDurationMs);
+ pw.println("mWifiLinkLayerUsageStats.radioOnTimeMs="
+ + mWifiLinkLayerUsageStats.radioOnTimeMs);
+ pw.println("mWifiLinkLayerUsageStats.radioTxTimeMs="
+ + mWifiLinkLayerUsageStats.radioTxTimeMs);
+ pw.println("mWifiLinkLayerUsageStats.radioRxTimeMs="
+ + mWifiLinkLayerUsageStats.radioRxTimeMs);
+ pw.println("mWifiLinkLayerUsageStats.radioScanTimeMs="
+ + mWifiLinkLayerUsageStats.radioScanTimeMs);
+
pw.println("mWifiLogProto.connectToNetworkNotificationCount="
+ mConnectToNetworkNotificationCount.toString());
pw.println("mWifiLogProto.connectToNetworkNotificationActionCount="
@@ -2569,6 +2621,7 @@ public class WifiMetrics {
mWifiLogProto.wifiRttLog = mRttMetrics.consolidateProto();
mWifiLogProto.pnoScanMetrics = mPnoScanMetrics;
+ mWifiLogProto.wifiLinkLayerUsageStats = mWifiLinkLayerUsageStats;
/**
* Convert the SparseIntArray of "Connect to Network" notification types and counts to
@@ -2742,6 +2795,7 @@ public class WifiMetrics {
mAvailableSavedPasspointProviderProfilesInScanHistogram.clear();
mAvailableSavedPasspointProviderBssidsInScanHistogram.clear();
mPnoScanMetrics.clear();
+ mWifiLinkLayerUsageStats.clear();
mConnectToNetworkNotificationCount.clear();
mConnectToNetworkNotificationActionCount.clear();
mNumOpenNetworkRecommendationUpdates = 0;