summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author peroulas <peroulas@google.com> 2024-11-19 21:56:01 -0800
committer peroulas <peroulas@google.com> 2024-11-25 09:25:23 -0800
commitb58c958687b464a1468c5c2a52e95afa5752fdb8 (patch)
treed8eaaef1425eba2e02b3c5f294082e8c4bcc8a82
parent63314b7abc08940131edeffa1f4d1f78c7670f57 (diff)
Logs RSSI poll on/off
Records are placed into the capture buffer. Flag: EXEMPT does not affect functionality. Bug: 369386989 Test: New tests written. Change-Id: I7bb707610c93a7872f942e11971d3bbf377d4d9a
-rw-r--r--service/java/com/android/server/wifi/ClientModeImpl.java17
-rw-r--r--service/java/com/android/server/wifi/WifiMetrics.java42
-rw-r--r--service/java/com/android/server/wifi/WifiScoreReport.java2
-rw-r--r--service/proto/src/metrics.proto24
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java43
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java83
6 files changed, 182 insertions, 29 deletions
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index e1c8157aab..0e26ebc1b1 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -160,6 +160,7 @@ import com.android.server.wifi.proto.nano.WifiMetricsProto;
import com.android.server.wifi.proto.nano.WifiMetricsProto.StaEvent;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiIsUnusableEvent;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiUsabilityStats;
+import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiUsabilityStatsEntry;
import com.android.server.wifi.util.ActionListenerWrapper;
import com.android.server.wifi.util.InformationElementUtil;
import com.android.server.wifi.util.NativeUtil;
@@ -6477,6 +6478,8 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
mRssiPollToken++;
if (mEnableRssiPolling) {
sendMessage(CMD_RSSI_POLL, mRssiPollToken, 0);
+ mWifiMetrics.logAsynchronousEvent(mInterfaceName,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED);
} else {
updateLinkLayerStatsRssiAndScoreReport();
}
@@ -6693,7 +6696,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
}
case CMD_ONESHOT_RSSI_POLL: {
if (!mEnableRssiPolling) {
- updateLinkLayerStatsRssiDataStallScoreReport();
+ updateLinkLayerStatsRssiDataStallScoreReport(true);
}
break;
}
@@ -6705,7 +6708,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
break;
}
if (message.arg1 == mRssiPollToken) {
- updateLinkLayerStatsRssiDataStallScoreReport();
+ updateLinkLayerStatsRssiDataStallScoreReport(false);
mWifiScoreCard.noteSignalPoll(mWifiInfo);
// Update the polling interval as needed before sending the delayed message
// so that the next polling can happen after the updated interval
@@ -6737,10 +6740,14 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
updateLinkLayerStatsRssiSpeedFrequencyCapabilities(txBytes, rxBytes);
sendMessageDelayed(obtainMessage(CMD_RSSI_POLL, mRssiPollToken, 0),
mWifiGlobals.getPollRssiIntervalMillis());
+ mWifiMetrics.logAsynchronousEvent(mInterfaceName,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED);
}
else {
mRssiMonitor.setShortPollRssiInterval();
removeMessages(CMD_RSSI_POLL);
+ mWifiMetrics.logAsynchronousEvent(mInterfaceName,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_DISABLED);
}
break;
}
@@ -6900,8 +6907,10 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
/**
* Fetches link stats, updates Wifi Data Stall, Score Card and Score Report.
+ *
+ * oneshot indicates that this update request came from CMD_ONESHOT_RSSI_POLL.
*/
- private WifiLinkLayerStats updateLinkLayerStatsRssiDataStallScoreReport() {
+ private WifiLinkLayerStats updateLinkLayerStatsRssiDataStallScoreReport(boolean oneshot) {
// Get Info and continue polling
long txBytes;
long rxBytes;
@@ -6925,7 +6934,7 @@ public class ClientModeImpl extends StateMachine implements ClientMode {
// mWifiMetrics.logScorerPredictionResult
mWifiMetrics.updateWiFiEvaluationAndScorerStats(mWifiScoreReport.getLingering(),
mWifiInfo, mLastConnectionCapabilities);
- mWifiMetrics.updateWifiUsabilityStatsEntries(mInterfaceName, mWifiInfo, stats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(mInterfaceName, mWifiInfo, stats, oneshot);
if (getClientRoleForMetrics(getConnectedWifiConfiguration())
== WIFI_CONNECTION_RESULT_REPORTED__ROLE__ROLE_CLIENT_PRIMARY) {
mWifiMetrics.logScorerPredictionResult(mWifiInjector.hasActiveModem(),
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index c49a8f838b..4e4b13ce3d 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -497,7 +497,8 @@ public class WifiMetrics {
// Each WifiUsabilityStatsEntry contains the stats for one instant in time. This LinkedList
// is used as a ring buffer and contains the history of the most recent
// MAX_WIFI_USABILITY_STATS_ENTRIES_RING_BUFFER_SIZE WifiUsabilityStatsEntry values.
- private final LinkedList<WifiUsabilityStatsEntry> mWifiUsabilityStatsEntriesRingBuffer =
+ @VisibleForTesting
+ public final LinkedList<WifiUsabilityStatsEntry> mWifiUsabilityStatsEntriesRingBuffer =
new LinkedList<>();
// One WifiUsabilityStats contains a single time series of WifiUsabilityStatsEntry along with
// some metadata. These LinkedList's below contain sets of time series that are labeled as
@@ -5291,6 +5292,8 @@ public class WifiMetrics {
line.append(",max_supported_rx_linkspeed=" + entry.maxSupportedRxLinkspeed);
line.append(",voip_mode=" + entry.voipMode);
line.append(",thread_device_role=" + entry.threadDeviceRole);
+ line.append(",capture_event_type=" + entry.captureEventType);
+ line.append(",capture_event_type_subcode=" + entry.captureEventTypeSubcode);
pw.println(line.toString());
}
@@ -7145,12 +7148,11 @@ public class WifiMetrics {
/**
* Extract data from |info| and |stats| to build a WifiUsabilityStatsEntry and then adds it
* into an internal ring buffer.
- * @param ifaceName
- * @param info
- * @param stats
+ *
+ * oneshot is used to indicate that this call came from CMD_ONESHOT_RSSI_POLL.
*/
public void updateWifiUsabilityStatsEntries(String ifaceName, WifiInfo info,
- WifiLinkLayerStats stats) {
+ WifiLinkLayerStats stats, boolean oneshot) {
// This is only collected for primary STA currently because RSSI polling is disabled for
// non-primary STAs.
synchronized (mLock) {
@@ -7575,6 +7577,10 @@ public class WifiMetrics {
wifiUsabilityStatsEntry.rateStats[i] = rate;
}
}
+ wifiUsabilityStatsEntry.captureEventType = oneshot
+ ? WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_ONESHOT_RSSI_POLL
+ : WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_SYNCHRONOUS;
+
mWifiUsabilityStatsEntriesRingBuffer.add(wifiUsabilityStatsEntry);
mWifiUsabilityStatsEntryCounter++;
if (mScoreBreachLowTimeMillis != -1) {
@@ -8143,6 +8149,32 @@ public class WifiMetrics {
return out;
}
+ /**
+ * Used to log an asynchronous event (such as WiFi disconnect) into the ring buffer.
+ */
+ public void logAsynchronousEvent(String ifaceName, int e, int c) {
+ if (!isPrimary(ifaceName)) {
+ return;
+ }
+ WifiUsabilityStatsEntry wifiUsabilityStatsEntry =
+ mWifiUsabilityStatsEntriesRingBuffer.size()
+ < MAX_WIFI_USABILITY_STATS_ENTRIES_RING_BUFFER_SIZE
+ ? new WifiUsabilityStatsEntry() : mWifiUsabilityStatsEntriesRingBuffer.remove()
+ .clear();
+ wifiUsabilityStatsEntry.timeStampMs = mClock.getElapsedSinceBootMillis();
+ wifiUsabilityStatsEntry.captureEventType = e;
+ wifiUsabilityStatsEntry.captureEventTypeSubcode = c;
+ mWifiUsabilityStatsEntriesRingBuffer.add(wifiUsabilityStatsEntry);
+ }
+ /**
+ * Used to log an asynchronous event (such as WiFi disconnect) into the ring buffer.
+ *
+ * Helper function when the subcode is not needed.
+ */
+ public void logAsynchronousEvent(String ifaceName, int e) {
+ logAsynchronousEvent(ifaceName, e, -1);
+ }
+
private WifiUsabilityStats createWifiUsabilityStatsWithLabel(int label, int triggerType,
int firmwareAlertCode) {
WifiUsabilityStats wifiUsabilityStats = new WifiUsabilityStats();
diff --git a/service/java/com/android/server/wifi/WifiScoreReport.java b/service/java/com/android/server/wifi/WifiScoreReport.java
index 92b1835d21..6f0f718c03 100644
--- a/service/java/com/android/server/wifi/WifiScoreReport.java
+++ b/service/java/com/android/server/wifi/WifiScoreReport.java
@@ -257,7 +257,7 @@ public class WifiScoreReport {
}
// TODO(b/153075963): This should not be plumbed through WifiMetrics
- mWifiMetrics.updateWifiUsabilityStatsEntries(mInterfaceName, mWifiInfo, stats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(mInterfaceName, mWifiInfo, stats, false);
}
@Override
diff --git a/service/proto/src/metrics.proto b/service/proto/src/metrics.proto
index 59f7ca9729..21be8a4144 100644
--- a/service/proto/src/metrics.proto
+++ b/service/proto/src/metrics.proto
@@ -2578,6 +2578,23 @@ message WifiUsabilityStatsEntry {
NETWORK_TYPE_NR = 7;
}
+ enum CaptureEventType {
+ // Unknown event
+ CAPTURE_EVENT_TYPE_UNKNOWN = 0;
+
+ // This is a synchronous event
+ CAPTURE_EVENT_TYPE_SYNCHRONOUS = 1;
+
+ // RSSI polling turned on
+ CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED = 2;
+
+ // RSSI polling turned off
+ CAPTURE_EVENT_TYPE_RSSI_POLLING_DISABLED = 3;
+
+ // Data sample came from CMD_ONESHOT_RSSI_POLL.
+ CAPTURE_EVENT_TYPE_ONESHOT_RSSI_POLL = 4;
+ }
+
// Absolute milliseconds from device boot when these stats were sampled
optional int64 time_stamp_ms = 1;
@@ -2780,6 +2797,13 @@ message WifiUsabilityStatsEntry {
// Device Role of thread. Refers to ThreadNetworkController@DeviceRole
optional int32 thread_device_role = 62;
+
+ // Capture buffer event type
+ optional CaptureEventType capture_event_type = 63;
+
+ // Some capture event types (eg. ip reachability lost) have a code associated
+ // with them. This code is stored here.
+ optional int32 capture_event_type_subcode = 64;
}
message ContentionTimeStats {
diff --git a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
index 6326bb9374..45f084ecb7 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/ClientModeImplTest.java
@@ -187,6 +187,7 @@ import com.android.server.wifi.p2p.WifiP2pServiceImpl;
import com.android.server.wifi.proto.nano.WifiMetricsProto;
import com.android.server.wifi.proto.nano.WifiMetricsProto.StaEvent;
import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiIsUnusableEvent;
+import com.android.server.wifi.proto.nano.WifiMetricsProto.WifiUsabilityStatsEntry;
import com.android.server.wifi.util.ActionListenerWrapper;
import com.android.server.wifi.util.NativeUtil;
import com.android.server.wifi.util.RssiUtilTest;
@@ -4142,6 +4143,43 @@ public class ClientModeImplTest extends WifiBaseTest {
}
/**
+ * Verify that RSSI polling starts/ stops/ one-offs are properly recorded in the capture buffer.
+ */
+ @Test
+ public void testCaptureBufferRssiOnOff() throws Exception {
+ // Log should indicate RSSI polling turned on.
+ mCmi.enableRssiPolling(true);
+ connect();
+ verify(mWifiMetrics).logAsynchronousEvent(
+ eq(WIFI_IFACE_NAME),
+ eq(WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED));
+ reset(mWifiMetrics);
+
+ // Normal RSSI polling loop. No events should be logged.
+ mLooper.moveTimeForward(3000);
+ mLooper.dispatchAll();
+ verify(mWifiMetrics, never()).logAsynchronousEvent(anyString(), anyInt());
+ verify(mWifiMetrics, never()).logAsynchronousEvent(anyString(), anyInt(), anyInt());
+ reset(mWifiMetrics);
+
+ // Normal RSSI polling loop. No events should be logged here either.
+ mLooper.moveTimeForward(3000);
+ mLooper.dispatchAll();
+ verify(mWifiMetrics, never()).logAsynchronousEvent(anyString(), anyInt());
+ verify(mWifiMetrics, never()).logAsynchronousEvent(anyString(), anyInt(), anyInt());
+ reset(mWifiMetrics);
+
+ // Turn off RSSI polling. This should show up in the capture buffer.
+ mCmi.enableRssiPolling(false);
+ mLooper.moveTimeForward(3000);
+ mLooper.dispatchAll();
+ verify(mWifiMetrics).logAsynchronousEvent(
+ eq(WIFI_IFACE_NAME),
+ eq(WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_DISABLED));
+ reset(mWifiMetrics);
+ }
+
+ /**
* Verify link bandwidth update in connected mode
*/
@Test
@@ -6119,7 +6157,7 @@ public class ClientModeImplTest extends WifiBaseTest {
.thenReturn(WifiIsUnusableEvent.TYPE_UNKNOWN);
mCmi.sendMessage(ClientModeImpl.CMD_RSSI_POLL, 1);
mLooper.dispatchAll();
- verify(mWifiMetrics).updateWifiUsabilityStatsEntries(any(), any(), eq(stats));
+ verify(mWifiMetrics).updateWifiUsabilityStatsEntries(any(), any(), eq(stats), eq(false));
when(mWifiDataStall.checkDataStallAndThroughputSufficiency(any(), any(), any(), any(),
any(), anyLong(), anyLong()))
@@ -6127,7 +6165,8 @@ public class ClientModeImplTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(10L);
mCmi.sendMessage(ClientModeImpl.CMD_RSSI_POLL, 1);
mLooper.dispatchAll();
- verify(mWifiMetrics, times(2)).updateWifiUsabilityStatsEntries(any(), any(), eq(stats));
+ verify(mWifiMetrics, times(2)).updateWifiUsabilityStatsEntries(any(), any(), eq(stats),
+ eq(false));
}
/**
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
index e113846e60..135ead7c86 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
@@ -4334,7 +4334,7 @@ public class WifiMetricsTest extends WifiBaseTest {
when(info.getLinkSpeed()).thenReturn(nextRandInt());
WifiLinkLayerStats stats = start;
for (int i = 0; i < WifiMetrics.NUM_WIFI_USABILITY_STATS_ENTRIES_PER_WIFI_GOOD; i++) {
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats, false);
stats = nextRandomStats(stats);
}
return stats;
@@ -4347,8 +4347,8 @@ public class WifiMetricsTest extends WifiBaseTest {
when(info.getLinkSpeed()).thenReturn(nextRandInt());
WifiLinkLayerStats stats1 = start;
WifiLinkLayerStats stats2 = nextRandomStats(stats1);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1, false);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
mWifiMetrics.addToWifiUsabilityStatsList(TEST_IFACE_NAME, WifiUsabilityStats.LABEL_BAD,
WifiUsabilityStats.TYPE_DATA_STALL_BAD_TX, -1);
return nextRandomStats(stats2);
@@ -4381,14 +4381,14 @@ public class WifiMetricsTest extends WifiBaseTest {
mWifiMetrics.incrementWifiUsabilityScoreCount(TEST_IFACE_NAME, 2, 55, 15);
mWifiMetrics.logLinkProbeSuccess(
TEST_IFACE_NAME, nextRandInt(), nextRandInt(), nextRandInt(), 12);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1, false);
mWifiMetrics.incrementWifiScoreCount(TEST_IFACE_NAME, 58);
mWifiMetrics.incrementWifiUsabilityScoreCount(TEST_IFACE_NAME, 3, 56, 15);
mWifiMetrics.logLinkProbeFailure(TEST_IFACE_NAME, nextRandInt(), nextRandInt(),
nextRandInt(), nextRandInt());
mWifiMetrics.enterDeviceMobilityState(DEVICE_MOBILITY_STATE_HIGH_MVMT);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
assertEquals(stats2.beacon_rx, mWifiMetrics.getTotalBeaconRxCount());
dumpProtoAndDeserialize();
@@ -4454,6 +4454,55 @@ public class WifiMetricsTest extends WifiBaseTest {
}
/**
+ * Verify that records are properly added to mWifiUsabilityStatsEntriesRingBuffer and that the
+ * size does not grow indefinitely.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testLogAsynchronousEvent() throws Exception {
+ when(mClock.getElapsedSinceBootMillis()).thenReturn((long) 123);
+
+ // Buffer starts out empty.
+ assertEquals(0, mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.size());
+
+ // Check that exactly one record is added and with default subcode.
+ mWifiMetrics.logAsynchronousEvent(TEST_IFACE_NAME,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED);
+ assertEquals(1, mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.size());
+ WifiUsabilityStatsEntry actual = mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.get(0);
+ assertEquals(123, actual.timeStampMs);
+ assertEquals(WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED,
+ actual.captureEventType);
+ assertEquals(-1, actual.captureEventTypeSubcode);
+
+ // Check that exactly one record is added with given subcode.
+ mWifiMetrics.logAsynchronousEvent(TEST_IFACE_NAME,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_DISABLED, -9876);
+ assertEquals(2, mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.size());
+ actual = mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.get(1);
+ assertEquals(123, actual.timeStampMs);
+ assertEquals(WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_DISABLED,
+ actual.captureEventType);
+ assertEquals(-9876, actual.captureEventTypeSubcode);
+
+ // Fill the ring buffer
+ for (int i = 0; i < WifiMetrics.MAX_WIFI_USABILITY_STATS_ENTRIES_RING_BUFFER_SIZE - 2;
+ i++) {
+ mWifiMetrics.logAsynchronousEvent(TEST_IFACE_NAME,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED);
+ }
+ assertEquals(WifiMetrics.MAX_WIFI_USABILITY_STATS_ENTRIES_RING_BUFFER_SIZE,
+ mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.size());
+
+ // Should not grow further.
+ mWifiMetrics.logAsynchronousEvent(TEST_IFACE_NAME,
+ WifiUsabilityStatsEntry.CAPTURE_EVENT_TYPE_RSSI_POLLING_ENABLED);
+ assertEquals(WifiMetrics.MAX_WIFI_USABILITY_STATS_ENTRIES_RING_BUFFER_SIZE,
+ mWifiMetrics.mWifiUsabilityStatsEntriesRingBuffer.size());
+ }
+
+ /**
* Tests device mobility state metrics as states are changed.
*/
@Test
@@ -4617,7 +4666,7 @@ public class WifiMetricsTest extends WifiBaseTest {
ActiveModeManager.ROLE_CLIENT_SECONDARY_LONG_LIVED);
mModeChangeCallbackArgumentCaptor.getValue()
.onActiveModeManagerRoleChanged(concreteClientModeManager);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats, false);
verify(mOnWifiUsabilityStatsListener, never()).onWifiUsabilityStats(anyInt(), anyBoolean(),
any());
@@ -4627,7 +4676,7 @@ public class WifiMetricsTest extends WifiBaseTest {
when(concreteClientModeManager.getRole()).thenReturn(ActiveModeManager.ROLE_CLIENT_PRIMARY);
mModeChangeCallbackArgumentCaptor.getValue()
.onActiveModeManagerRoleChanged(concreteClientModeManager);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats, false);
// Client should get the stats.
verify(mOnWifiUsabilityStatsListener).onWifiUsabilityStats(anyInt(), anyBoolean(),
@@ -4763,7 +4812,7 @@ public class WifiMetricsTest extends WifiBaseTest {
when(info.getRssi()).thenReturn(nextRandInt());
when(info.getLinkSpeed()).thenReturn(nextRandInt());
WifiLinkLayerStats linkLayerStats = nextRandomStats(new WifiLinkLayerStats());
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats, false);
verify(mOnWifiUsabilityStatsListener, never()).onWifiUsabilityStats(anyInt(),
anyBoolean(), any());
@@ -4792,7 +4841,7 @@ public class WifiMetricsTest extends WifiBaseTest {
when(info.getRssi()).thenReturn(nextRandInt());
when(info.getLinkSpeed()).thenReturn(nextRandInt());
WifiLinkLayerStats linkLayerStats = nextRandomStats(new WifiLinkLayerStats());
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, linkLayerStats, false);
// Client should not get any message listener add failed.
verify(mOnWifiUsabilityStatsListener, never()).onWifiUsabilityStats(anyInt(),
@@ -4812,7 +4861,7 @@ public class WifiMetricsTest extends WifiBaseTest {
long eventTimeMs = nextRandInt();
when(mClock.getElapsedSinceBootMillis()).thenReturn(eventTimeMs);
WifiLinkLayerStats stats1 = nextRandomStats(new WifiLinkLayerStats());
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1, false);
// Firmware alert occurs
mWifiMetrics.logFirmwareAlert(TEST_IFACE_NAME, 2);
@@ -5691,13 +5740,13 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiIsUnusableEvent.TYPE_DATA_STALL_BAD_TX, -1);
}
when(mClock.getElapsedSinceBootMillis()).thenReturn(elapsedTimeAfterBreach);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
}
// Simulate adding one LABEL_BAD WifiUsabilityStats
private void addOneBadWifiUsabilityStats(WifiInfo info) {
WifiLinkLayerStats stats1 = new WifiLinkLayerStats();
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1, false);
mWifiMetrics.addToWifiUsabilityStatsList(TEST_IFACE_NAME, WifiUsabilityStats.LABEL_BAD,
WifiUsabilityStats.TYPE_DATA_STALL_BAD_TX, -1);
}
@@ -5707,13 +5756,13 @@ public class WifiMetricsTest extends WifiBaseTest {
int upper = WifiMetrics.LOW_WIFI_SCORE + 7;
int lower = WifiMetrics.LOW_WIFI_SCORE - 8;
mWifiMetrics.incrementWifiScoreCount(TEST_IFACE_NAME, upper);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
stats2 = nextRandomStats(stats2);
long timeMs = 0;
when(mClock.getElapsedSinceBootMillis()).thenReturn(timeMs);
// Wifi score breaches low
mWifiMetrics.incrementWifiScoreCount(TEST_IFACE_NAME, lower);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
stats2 = nextRandomStats(stats2);
return stats2;
}
@@ -5724,13 +5773,13 @@ public class WifiMetricsTest extends WifiBaseTest {
int upper = WifiMetrics.LOW_WIFI_USABILITY_SCORE + 7;
int lower = WifiMetrics.LOW_WIFI_USABILITY_SCORE - 8;
mWifiMetrics.incrementWifiUsabilityScoreCount(TEST_IFACE_NAME, 1, upper, 30);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
stats2 = nextRandomStats(stats2);
long timeMs = 0;
when(mClock.getElapsedSinceBootMillis()).thenReturn(timeMs);
// Wifi usability score breaches low
mWifiMetrics.incrementWifiUsabilityScoreCount(TEST_IFACE_NAME, 2, lower, 30);
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats2, false);
stats2 = nextRandomStats(stats2);
return stats2;
}
@@ -5774,7 +5823,7 @@ public class WifiMetricsTest extends WifiBaseTest {
when(info.getRssi()).thenReturn(nextRandInt());
when(info.getLinkSpeed()).thenReturn(nextRandInt());
WifiLinkLayerStats stats1 = nextRandomStats(new WifiLinkLayerStats());
- mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1);
+ mWifiMetrics.updateWifiUsabilityStatsEntries(TEST_IFACE_NAME, info, stats1, false);
// Add 1 LABEL_GOOD
WifiLinkLayerStats statsGood = addGoodWifiUsabilityStats(nextRandomStats(stats1));