diff options
author | 2024-11-19 21:56:01 -0800 | |
---|---|---|
committer | 2024-11-25 09:25:23 -0800 | |
commit | b58c958687b464a1468c5c2a52e95afa5752fdb8 (patch) | |
tree | d8eaaef1425eba2e02b3c5f294082e8c4bcc8a82 | |
parent | 63314b7abc08940131edeffa1f4d1f78c7670f57 (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
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)); |