From c8623f0fe9ba447c890063bc74850a06b9022bf5 Mon Sep 17 00:00:00 2001 From: Mingguang Xu Date: Thu, 3 Sep 2020 15:50:12 -0700 Subject: Add metrics for Adaptive Connectivity toggle Add a new UserActionEvent to track the state change of Adaptive Connectivity and attach its state to StaEvent. Bug: 166644305 Test: atest com.android.server.wifi Updated-PDD: TRUE Signed-off-by: Mingguang Xu Change-Id: If33df01ec4292afae29eae61f129923ec82bd0ae Merged-In: I72762fc129c9f026ca9323b11e4e159ed2706cb7 --- .../java/com/android/server/wifi/WifiMetrics.java | 21 +++++++++++++++ .../com/android/server/wifi/WifiScoreReport.java | 5 ++++ service/proto/src/metrics.proto | 7 +++++ .../com/android/server/wifi/WifiMetricsTest.java | 31 ++++++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java index 1ac361ef3..75d53fc95 100644 --- a/service/java/com/android/server/wifi/WifiMetrics.java +++ b/service/java/com/android/server/wifi/WifiMetrics.java @@ -242,6 +242,7 @@ public class WifiMetrics { private int mLastPollRxLinkSpeed = -1; private int mLastPollFreq = -1; private int mLastScore = -1; + private boolean mAdaptiveConnectivityEnabled = true; /** * Metrics are stored within an instance of the WifiLog proto during runtime, @@ -4908,6 +4909,7 @@ public class WifiMetrics { if (mWifiDataStall != null) { staEvent.isCellularDataAvailable = mWifiDataStall.isCellularDataAvailable(); } + staEvent.isAdaptiveConnectivityEnabled = mAdaptiveConnectivityEnabled; mSupplicantStateChangeBitmask = 0; mLastPollRssi = -127; mLastPollFreq = -1; @@ -5124,6 +5126,7 @@ public class WifiMetrics { if (event.totalRxBytes > 0) sb.append(" totalRxBytes=").append(event.totalRxBytes); sb.append(" screenOn=").append(event.screenOn); sb.append(" cellularData=").append(event.isCellularDataAvailable); + sb.append(" adaptiveConnectivity=").append(event.isAdaptiveConnectivityEnabled); if (event.supplicantStateChangesBitmask != 0) { sb.append(", ").append(supplicantStateChangesBitmaskToString( event.supplicantStateChangesBitmask)); @@ -5343,6 +5346,15 @@ public class WifiMetrics { return result; } + /** + * Converts Adaptive Connectivity state to UserActionEvent type. + * @param value + */ + public static int convertAdaptiveConnectivityStateToUserActionEventType(boolean value) { + return value ? UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_ON + : UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_OFF; + } + static class MeteredNetworkStatsBuilder { // A map from network identifier to MeteredDetail Map mNetworkMap = new ArrayMap<>(); @@ -6713,4 +6725,13 @@ public class WifiMetrics { mCarrierWifiMetrics.numConnectionNonAuthFailure++; } } + + /** + * Set Adaptive Connectivity state (On/Off) + */ + public void setAdaptiveConnectivityState(boolean adaptiveConnectivityEnabled) { + synchronized (mLock) { + mAdaptiveConnectivityEnabled = adaptiveConnectivityEnabled; + } + } } diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java index 381be7f2b..f6eed70ee 100644 --- a/service/java/com/android/server/wifi/WifiScoreReport.java +++ b/service/java/com/android/server/wifi/WifiScoreReport.java @@ -322,6 +322,10 @@ public class WifiScoreReport { super.onChange(selfChange); mAdaptiveConnectivityEnabled = getValue(); Log.d(TAG, "Adaptive connectivity status changed: " + mAdaptiveConnectivityEnabled); + mWifiMetrics.setAdaptiveConnectivityState(mAdaptiveConnectivityEnabled); + mWifiMetrics.logUserActionEvent( + mWifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType( + mAdaptiveConnectivityEnabled)); } /** @@ -335,6 +339,7 @@ public class WifiScoreReport { } mFrameworkFacade.registerContentObserver(mContext, uri, true, this); mAdaptiveConnectivityEnabled = mAdaptiveConnectivityEnabledSettingObserver.getValue(); + mWifiMetrics.setAdaptiveConnectivityState(mAdaptiveConnectivityEnabled); } public boolean getValue() { diff --git a/service/proto/src/metrics.proto b/service/proto/src/metrics.proto index a7f706fb8..1c3b27872 100644 --- a/service/proto/src/metrics.proto +++ b/service/proto/src/metrics.proto @@ -1471,6 +1471,9 @@ message StaEvent { // Whether cellular data network is available optional bool is_cellular_data_available = 25; + + //Whether Adaptive Connectivity is enabled + optional bool is_adaptive_connectivity_enabled = 26; } // Wi-Fi Aware metrics @@ -3158,6 +3161,10 @@ message UserActionEvent { EVENT_CONFIGURE_METERED_STATUS_AUTO = 12; // User adds a new network or updates configurations for an existing network. EVENT_ADD_OR_UPDATE_NETWORK = 13; + // User sets the adaptive connectivity to on + EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_ON = 14; + // User sets the adaptive connectivity to off + EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_OFF = 15; } // The type of user action diff --git a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java index b4cd7592c..b69b30208 100644 --- a/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java +++ b/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java @@ -2302,6 +2302,7 @@ public class WifiMetricsTest extends WifiBaseTest { mTestLooper.dispatchAll(); wifiMetrics.setScreenState(true); when(mWifiDataStall.isCellularDataAvailable()).thenReturn(true); + wifiMetrics.setAdaptiveConnectivityState(true); for (int i = 0; i < mTestStaLogInts.length; i++) { int[] lia = mTestStaLogInts[i]; wifiMetrics.logStaEvent(lia[0], lia[1], lia[2] == 1 ? mTestWifiConfig : null); @@ -2342,6 +2343,7 @@ public class WifiMetricsTest extends WifiBaseTest { evs[7] == 1 ? mTestWifiConfig : null, event.configInfo); assertEquals(true, event.screenOn); assertEquals(true, event.isCellularDataAvailable); + assertEquals(true, event.isAdaptiveConnectivityEnabled); j++; } assertEquals(mExpectedValues.length, j); @@ -2553,6 +2555,35 @@ public class WifiMetricsTest extends WifiBaseTest { assertNull(userActionEvents[0].targetNetworkInfo); } + /** + * Test the logging of UserActionEvent for Adaptive Connectivity toggle + */ + @Test + public void testLogUserActionEventForAdaptiveConnectivity() throws Exception { + long testStartTimeMillis = 123123L; + boolean adaptiveConnectivityEnabled = true; + when(mClock.getElapsedSinceBootMillis()).thenReturn(testStartTimeMillis); + mWifiMetrics.logUserActionEvent( + mWifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType( + adaptiveConnectivityEnabled)); + long testStartTimeMillis2 = 200000L; + boolean adaptiveConnectivityEnabled2 = false; + when(mClock.getElapsedSinceBootMillis()).thenReturn(testStartTimeMillis2); + mWifiMetrics.logUserActionEvent( + mWifiMetrics.convertAdaptiveConnectivityStateToUserActionEventType( + adaptiveConnectivityEnabled2)); + dumpProtoAndDeserialize(); + + WifiMetricsProto.UserActionEvent[] userActionEvents = mDecodedProto.userActionEvents; + assertEquals(2, userActionEvents.length); + assertEquals(WifiMetricsProto.UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_ON, + userActionEvents[0].eventType); + assertEquals(testStartTimeMillis, userActionEvents[0].startTimeMillis); + assertEquals(WifiMetricsProto.UserActionEvent.EVENT_CONFIGURE_ADAPTIVE_CONNECTIVITY_OFF, + userActionEvents[1].eventType); + assertEquals(testStartTimeMillis2, userActionEvents[1].startTimeMillis); + } + /** * Verify that the max length of the UserActionEvent list is limited to MAX_USER_ACTION_EVENTS. */ -- cgit v1.2.3