summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java2
-rw-r--r--service/java/com/android/server/wifi/WifiLockManager.java4
-rw-r--r--service/java/com/android/server/wifi/WifiMetrics.java26
-rw-r--r--service/java/com/android/server/wifi/WifiMulticastLockManager.java53
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiLockManagerTest.java77
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java16
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java89
-rw-r--r--tests/hostsidetests/multidevices/test/direct/integration/wifi_p2p_group_test.py2
-rw-r--r--tests/hostsidetests/multidevices/test/direct/p2p_utils.py1
9 files changed, 211 insertions, 59 deletions
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java
index dcf4388095..7bc2604102 100644
--- a/service/java/com/android/server/wifi/WifiInjector.java
+++ b/service/java/com/android/server/wifi/WifiInjector.java
@@ -608,7 +608,7 @@ public class WifiInjector {
mSelfRecovery = new SelfRecovery(mContext, mActiveModeWarden, mClock, mWifiNative,
mWifiGlobals);
mWifiMulticastLockManager = new WifiMulticastLockManager(mActiveModeWarden, mBatteryStats,
- wifiLooper, mContext);
+ wifiLooper, mContext, mClock, mWifiMetrics, mWifiPermissionsUtil);
mApplicationQosPolicyRequestHandler = new ApplicationQosPolicyRequestHandler(
mActiveModeWarden, mWifiNative, mWifiHandlerThread, mDeviceConfigFacade, mContext);
diff --git a/service/java/com/android/server/wifi/WifiLockManager.java b/service/java/com/android/server/wifi/WifiLockManager.java
index 33833f4b9a..040aca88bc 100644
--- a/service/java/com/android/server/wifi/WifiLockManager.java
+++ b/service/java/com/android/server/wifi/WifiLockManager.java
@@ -732,7 +732,7 @@ public class WifiLockManager {
return false;
}
uidsAndTags = WorkSourceUtil.getUidsAndTagsForWs(mHighPerfBlamedWorkSource);
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
uidsAndTags.first,
uidsAndTags.second,
mClock.getElapsedSinceBootMillis() - mCurrentSessionStartTimeMs,
@@ -748,7 +748,7 @@ public class WifiLockManager {
return false;
}
uidsAndTags = WorkSourceUtil.getUidsAndTagsForWs(mLowLatencyBlamedWorkSource);
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
uidsAndTags.first,
uidsAndTags.second,
mClock.getElapsedSinceBootMillis() - mCurrentSessionStartTimeMs,
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index 68ac00f1ef..52eac0d037 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -8968,8 +8968,11 @@ public class WifiMetrics {
isAppExemptedFromForeground);
}
- /** Add a WifiLock active session */
- public void addWifiLockActiveSession(int lockType, int[] attrUids, String[] attrTags,
+ /**
+ * Add a WifiLockManager active session. This represents the session during which
+ * low-latency mode was enabled.
+ */
+ public void addWifiLockManagerActiveSession(int lockType, int[] attrUids, String[] attrTags,
long duration, boolean isPowersaveDisableAllowed,
boolean isAppExemptedFromScreenOn, boolean isAppExemptedFromForeground) {
int lockMode;
@@ -8992,6 +8995,25 @@ public class WifiMetrics {
Log.e(TAG, "addWifiLockActiveSession: Invalid lock type: " + lockType);
return;
}
+ writeWifiLockActiveSession(lockMode, attrUids, attrTags, duration,
+ isPowersaveDisableAllowed, isAppExemptedFromScreenOn, isAppExemptedFromForeground);
+ }
+
+ /**
+ * Add a MulticastLockManager active session. This represents the session during which
+ * multicast packet filtering was disabled.
+ */
+ public void addMulticastLockManagerActiveSession(long duration) {
+ // Use a default value for the array and boolean parameters,
+ // since these fields don't apply to multicast locks
+ writeWifiLockActiveSession(
+ WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_MULTICAST_FILTERING_DISABLED,
+ new int[0], new String[0], duration, false, false, false);
+ }
+
+ private void writeWifiLockActiveSession(int lockMode, int[] attrUids, String[] attrTags,
+ long duration, boolean isPowersaveDisableAllowed,
+ boolean isAppExemptedFromScreenOn, boolean isAppExemptedFromForeground) {
WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED,
attrUids,
attrTags,
diff --git a/service/java/com/android/server/wifi/WifiMulticastLockManager.java b/service/java/com/android/server/wifi/WifiMulticastLockManager.java
index e25d9c86c6..598bf5716d 100644
--- a/service/java/com/android/server/wifi/WifiMulticastLockManager.java
+++ b/service/java/com/android/server/wifi/WifiMulticastLockManager.java
@@ -29,6 +29,7 @@ import android.os.WorkSource;
import android.util.Log;
import com.android.server.wifi.proto.WifiStatsLog;
+import com.android.server.wifi.util.WifiPermissionsUtil;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -49,11 +50,16 @@ public class WifiMulticastLockManager {
private final Map<Integer, Integer> mNumLocksPerInactiveOwner = new HashMap<>();
private int mMulticastEnabled = 0;
private int mMulticastDisabled = 0;
+ private boolean mIsFilterDisableSessionActive = false;
+ private long mFilterDisableSessionStartTime;
private final Handler mHandler;
private final Object mLock = new Object();
private boolean mVerboseLoggingEnabled = false;
private final BatteryStatsManager mBatteryStats;
private final ActiveModeWarden mActiveModeWarden;
+ private final Clock mClock;
+ private final WifiMetrics mWifiMetrics;
+ private final WifiPermissionsUtil mWifiPermissionsUtil;
/** Delegate for handling state change events for multicast filtering. */
public interface FilterController {
@@ -68,10 +74,16 @@ public class WifiMulticastLockManager {
ActiveModeWarden activeModeWarden,
BatteryStatsManager batteryStats,
Looper looper,
- Context context) {
+ Context context,
+ Clock clock,
+ WifiMetrics wifiMetrics,
+ WifiPermissionsUtil wifiPermissionsUtil) {
mBatteryStats = batteryStats;
mActiveModeWarden = activeModeWarden;
mHandler = new Handler(looper);
+ mClock = clock;
+ mWifiMetrics = wifiMetrics;
+ mWifiPermissionsUtil = wifiPermissionsUtil;
mActiveModeWarden.registerPrimaryClientModeManagerChangedCallback(
new PrimaryClientModeManagerChangedCallback());
@@ -91,6 +103,7 @@ public class WifiMulticastLockManager {
IBinder mBinder;
String mAttributionTag;
String mPackageName;
+ long mAcquireTime;
Multicaster(int uid, IBinder binder, String tag, String attributionTag,
String packageName) {
@@ -99,6 +112,7 @@ public class WifiMulticastLockManager {
mBinder = binder;
mAttributionTag = attributionTag;
mPackageName = packageName;
+ mAcquireTime = mClock.getElapsedSinceBootMillis();
try {
mBinder.linkToDeath(this, 0);
} catch (RemoteException e) {
@@ -143,6 +157,10 @@ public class WifiMulticastLockManager {
return mPackageName;
}
+ public long getAcquireTime() {
+ return mAcquireTime;
+ }
+
public String toString() {
return "Multicaster{" + mTag + " uid=" + mUid + "}";
}
@@ -219,17 +237,32 @@ public class WifiMulticastLockManager {
public void startFilteringMulticastPackets() {
synchronized (mLock) {
if (!isMulticastEnabled()) {
+ if (mIsFilterDisableSessionActive) {
+ // Log the end of the filtering disabled session,
+ // since we're about to re-enable multicast packet filtering
+ mWifiMetrics.addMulticastLockManagerActiveSession(
+ mClock.getElapsedSinceBootMillis() - mFilterDisableSessionStartTime);
+ }
mActiveModeWarden.getPrimaryClientModeManager()
.getMcastLockManagerFilterController()
.startFilteringMulticastPackets();
+ mIsFilterDisableSessionActive = false;
}
}
}
private void stopFilteringMulticastPackets() {
- mActiveModeWarden.getPrimaryClientModeManager()
- .getMcastLockManagerFilterController()
- .stopFilteringMulticastPackets();
+ synchronized (mLock) {
+ if (!mIsFilterDisableSessionActive) {
+ // Mark the beginning of a filtering disabled session,
+ // since we're about to disable multicast packet filtering
+ mFilterDisableSessionStartTime = mClock.getElapsedSinceBootMillis();
+ }
+ mActiveModeWarden.getPrimaryClientModeManager()
+ .getMcastLockManagerFilterController()
+ .stopFilteringMulticastPackets();
+ mIsFilterDisableSessionActive = true;
+ }
}
/**
@@ -257,9 +290,7 @@ public class WifiMulticastLockManager {
// our new size == 1 (first call), but this function won't
// be called often and by making the stopPacket call each
// time we're less fragile and self-healing.
- mActiveModeWarden.getPrimaryClientModeManager()
- .getMcastLockManagerFilterController()
- .stopFilteringMulticastPackets();
+ stopFilteringMulticastPackets();
}
final long ident = Binder.clearCallingIdentity();
@@ -299,6 +330,10 @@ public class WifiMulticastLockManager {
Multicaster removed = mMulticasters.remove(i);
if (removed != null) {
removed.unlinkDeathRecipient();
+ mWifiMetrics.addMulticastLockManagerAcqSession(
+ uid, removed.getAttributionTag(),
+ mWifiPermissionsUtil.getWifiCallerType(uid, removed.getPackageName()),
+ mClock.getElapsedSinceBootMillis() - removed.getAcquireTime());
}
if (mNumLocksPerActiveOwner.containsKey(uid)) {
@@ -308,9 +343,7 @@ public class WifiMulticastLockManager {
}
if (!isMulticastEnabled()) {
- mActiveModeWarden.getPrimaryClientModeManager()
- .getMcastLockManagerFilterController()
- .startFilteringMulticastPackets();
+ startFilteringMulticastPackets();
}
final long ident = Binder.clearCallingIdentity();
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiLockManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiLockManagerTest.java
index 64831e172d..cbdf1e80e0 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiLockManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiLockManagerTest.java
@@ -597,7 +597,7 @@ public class WifiLockManagerTest extends WifiBaseTest {
mLooper.dispatchAll();
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(expectedMode),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(eq(expectedMode),
eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -646,15 +646,17 @@ public class WifiLockManagerTest extends WifiBaseTest {
releaseWifiLockSuccessful(mBinder2);
mLooper.moveTimeForward(DELAY_LOCK_RELEASE_MS + 1);
mLooper.dispatchAll();
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
assertEquals(WifiManager.WIFI_MODE_NO_LOCKS_HELD,
mWifiLockManager.getStrongestLockMode());
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -791,7 +793,7 @@ public class WifiLockManagerTest extends WifiBaseTest {
mLooper.dispatchAll();
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics, never()).addWifiLockActiveSession(
+ verify(mWifiMetrics, never()).addWifiLockManagerActiveSession(
eq(expectedMode), eq(new int[]{DEFAULT_TEST_UID_1}),
eq(new String[]{null}), anyLong(), anyBoolean(), anyBoolean(), anyBoolean());
@@ -804,7 +806,7 @@ public class WifiLockManagerTest extends WifiBaseTest {
mWifiLockManager.getStrongestLockMode());
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(expectedMode),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(eq(expectedMode),
eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -833,9 +835,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
mWifiLockManager.getStrongestLockMode());
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF),
- eq(new int[0]), eq(new String[0]), anyLong(), anyBoolean(),
- anyBoolean(), anyBoolean());
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF), eq(new int[0]), eq(new String[0]),
+ anyLong(), anyBoolean(), anyBoolean(), anyBoolean());
}
/**
@@ -876,8 +878,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
mWifiLockManager.getStrongestLockMode());
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -1101,8 +1104,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setLowLatencyMode(false);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -1201,8 +1205,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setLowLatencyMode(false);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -1245,8 +1250,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setLowLatencyMode(false);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -1335,8 +1341,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
inOrder.verify(mClientModeManager).setLowLatencyMode(true);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
@@ -1375,9 +1382,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setLowLatencyMode(false);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
- eq(new int[0]), eq(new String[0]), anyLong(), anyBoolean(),
- anyBoolean(), anyBoolean());
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY), eq(new int[0]), eq(new String[0]),
+ anyLong(), anyBoolean(), anyBoolean(), anyBoolean());
}
/**
@@ -1463,8 +1470,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setLowLatencyMode(false);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}), anyLong(), anyBoolean(),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY), eq(new int[]{DEFAULT_TEST_UID_1}),
+ eq(new String[]{null}), anyLong(), anyBoolean(),
anyBoolean(), anyBoolean());
}
@@ -1522,9 +1530,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF),
- eq(new int[0]), eq(new String[0]), anyLong(), anyBoolean(), anyBoolean(),
- anyBoolean());
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_HIGH_PERF), eq(new int[0]), eq(new String[0]),
+ anyLong(), anyBoolean(), anyBoolean(), anyBoolean());
inOrder.verify(mClientModeManager).setLowLatencyMode(true);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
false);
@@ -1557,9 +1565,9 @@ public class WifiLockManagerTest extends WifiBaseTest {
inOrder.verify(mClientModeManager).setLowLatencyMode(false);
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
true);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
- eq(new int[0]), eq(new String[0]), anyLong(), anyBoolean(), anyBoolean(),
- anyBoolean());
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY), eq(new int[0]), eq(new String[0]),
+ anyLong(), anyBoolean(), anyBoolean(), anyBoolean());
inOrder.verify(mClientModeManager).setPowerSave(ClientMode.POWER_SAVE_CLIENT_WIFI_LOCK,
false);
}
@@ -1748,8 +1756,8 @@ public class WifiLockManagerTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(deactivationTime);
mWifiLockManager.updateWifiClientConnected(mClientModeManager, false);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(expectedMode),
- eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(expectedMode), eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}),
eq(deactivationTime - activationTime), eq(true), eq(false), eq(false));
@@ -1800,7 +1808,8 @@ public class WifiLockManagerTest extends WifiBaseTest {
when(mClock.getElapsedSinceBootMillis()).thenReturn(deactivationTime);
mWifiLockManager.updateWifiClientConnected(mClientModeManager, false);
- verify(mWifiMetrics).addWifiLockActiveSession(eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
+ verify(mWifiMetrics).addWifiLockManagerActiveSession(
+ eq(WifiManager.WIFI_MODE_FULL_LOW_LATENCY),
eq(new int[]{DEFAULT_TEST_UID_1}), eq(new String[]{null}),
eq(deactivationTime - activationTime), eq(true), eq(false), 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 e16c2b1272..1e9c381554 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiMetricsTest.java
@@ -5530,7 +5530,7 @@ public class WifiMetricsTest extends WifiBaseTest {
*/
@Test
public void testWifiLockActiveSession() throws Exception {
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 100000, true, false, false);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5538,7 +5538,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_HIGH_PERF, 100000,
true, false, false));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 10000, true, true, false);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5546,7 +5546,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_HIGH_PERF, 10000,
true, true, false));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 10000000, true, true, true);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5554,7 +5554,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_HIGH_PERF,
10000000, true, true, true));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_HIGH_PERF,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 1000, false, false, false);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5562,7 +5562,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_HIGH_PERF, 1000,
false, false, false));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 90000, false, false, false);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5570,7 +5570,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_LOW_LATENCY, 90000,
false, false, false));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 900000, true, false, false);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5578,7 +5578,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_LOW_LATENCY,
900000, true, false, false));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 9000, true, true, false);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
@@ -5586,7 +5586,7 @@ public class WifiMetricsTest extends WifiBaseTest {
WifiStatsLog.WIFI_LOCK_DEACTIVATED__MODE__WIFI_MODE_FULL_LOW_LATENCY, 9000,
true, true, false));
- mWifiMetrics.addWifiLockActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
+ mWifiMetrics.addWifiLockManagerActiveSession(WifiManager.WIFI_MODE_FULL_LOW_LATENCY,
new int[]{TEST_UID}, new String[]{TEST_TAG}, 20000000, true, true, true);
ExtendedMockito.verify(
() -> WifiStatsLog.write(WifiStatsLog.WIFI_LOCK_DEACTIVATED, new int[]{TEST_UID},
diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java
index 1e80cbc6b8..8ce4a8d191 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java
@@ -34,6 +34,7 @@ import androidx.test.filters.SmallTest;
import com.android.server.wifi.ActiveModeWarden.PrimaryClientModeManagerChangedCallback;
import com.android.server.wifi.WifiMulticastLockManager.FilterController;
+import com.android.server.wifi.util.WifiPermissionsUtil;
import org.junit.Before;
import org.junit.Test;
@@ -54,6 +55,7 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
private static final int TEST_UID = 123;
private static final String TEST_ATTRIBUTION_TAG = "attribution-tag";
private static final String TEST_PACKAGE_NAME = "package-name";
+ private static final long START_TIME = 0;
private TestLooper mLooper;
@Mock ConcreteClientModeManager mClientModeManager;
@@ -64,6 +66,9 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
@Mock ActiveModeWarden mActiveModeWarden;
@Mock Context mContext;
@Mock ActivityManager mActivityManager;
+ @Mock Clock mClock;
+ @Mock WifiMetrics mWifiMetrics;
+ @Mock WifiPermissionsUtil mWifiPermissionsUtil;
@Captor ArgumentCaptor<PrimaryClientModeManagerChangedCallback> mPrimaryChangedCallbackCaptor;
@Captor ArgumentCaptor<ActivityManager.OnUidImportanceListener> mUidImportanceListenerCaptor =
ArgumentCaptor.forClass(ActivityManager.OnUidImportanceListener.class);
@@ -88,7 +93,7 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
when(mActiveModeWarden.getPrimaryClientModeManager()).thenReturn(mClientModeManager);
when(mContext.getSystemService(ActivityManager.class)).thenReturn(mActivityManager);
mManager = new WifiMulticastLockManager(mActiveModeWarden, mBatteryStats,
- mLooper.getLooper(), mContext);
+ mLooper.getLooper(), mContext, mClock, mWifiMetrics, mWifiPermissionsUtil);
verify(mActiveModeWarden).registerPrimaryClientModeManagerChangedCallback(
mPrimaryChangedCallbackCaptor.capture());
@@ -385,4 +390,86 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
assertFalse(mManager.isMulticastEnabled());
verify(mFilterController, times(2)).startFilteringMulticastPackets();
}
+
+ /**
+ * Verify that an acquire session is logged in the metrics when a lock is released.
+ */
+ @Test
+ public void testAcquireSessionMetrics() {
+ IBinder binder = mock(IBinder.class);
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
+
+ // Advance clock by 10 ms and release the lock
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME + 10);
+ mManager.releaseLock(TEST_UID, binder, WL_1_TAG);
+ verify(mWifiMetrics).addMulticastLockManagerAcqSession(
+ eq(TEST_UID), eq(TEST_ATTRIBUTION_TAG), anyInt(), eq(10L) /* duration */);
+ }
+
+ /**
+ * Verify that an active session is logged when multicast filtering is re-enabled,
+ * and that an acquire session is logged when a multicast lock is released.
+ */
+ @Test
+ public void testSingleLockActiveSessionMetrics() {
+ IBinder binder = mock(IBinder.class);
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
+
+ // Transition the UID to low importance at t=10
+ // Since this is the only lock, this should re-enable packet filtering
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME + 10);
+ mUidImportanceListenerCaptor.getValue().onUidImportance(
+ TEST_UID, ActivityManager.RunningAppProcessInfo.IMPORTANCE_CACHED);
+ mLooper.dispatchAll();
+
+ // Release the lock at t=20
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME + 20);
+ mManager.releaseLock(TEST_UID, binder, WL_1_TAG);
+
+ // Verify that the active session was logged during the priority switch (t=10)
+ // and that the lock acquire session was logged during the lock release (t=20)
+ verify(mWifiMetrics).addMulticastLockManagerActiveSession(eq(10L));
+ verify(mWifiMetrics).addMulticastLockManagerAcqSession(
+ eq(TEST_UID), eq(TEST_ATTRIBUTION_TAG), anyInt(), eq(20L));
+ }
+
+ /**
+ * See comment for {@link #testSingleLockActiveSessionMetrics()}.
+ * This case considers a multi-lock scenario.
+ */
+ @Test
+ public void testMultiLockActiveSessionMetrics() {
+ int uid1 = TEST_UID;
+ int uid2 = TEST_UID + 1;
+ String attributionTag1 = "attribution-tag-1";
+ String attributionTag2 = "attribution-tag-2";
+ String packageName1 = "package-name-1";
+ String packageName2 = "package-name-2";
+ IBinder binder1 = mock(IBinder.class);
+ IBinder binder2 = mock(IBinder.class);
+
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME);
+ mManager.acquireLock(uid1, binder1, WL_1_TAG, attributionTag1, packageName1);
+ mManager.acquireLock(uid2, binder2, WL_2_TAG, attributionTag2, packageName2);
+
+ // Release lock 1 at t=10. Multicast filtering is still disabled.
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME + 10);
+ mManager.releaseLock(uid1, binder1, WL_1_TAG);
+
+ // Release lock 2 at t=20. Multicast filtering should be re-enabled.
+ when(mClock.getElapsedSinceBootMillis()).thenReturn(START_TIME + 20);
+ mManager.releaseLock(uid2, binder2, WL_2_TAG);
+
+ // An acquire session should have been logged when each lock was released
+ verify(mWifiMetrics).addMulticastLockManagerAcqSession(
+ eq(uid1), eq(attributionTag1), anyInt(), eq(10L));
+ verify(mWifiMetrics).addMulticastLockManagerAcqSession(
+ eq(uid2), eq(attributionTag2), anyInt(), eq(20L));
+
+ // A single active session should have been logged when the final lock was released (t=20)
+ verify(mWifiMetrics, times(1)).addMulticastLockManagerActiveSession(anyLong());
+ verify(mWifiMetrics).addMulticastLockManagerActiveSession(eq(20L));
+ }
}
diff --git a/tests/hostsidetests/multidevices/test/direct/integration/wifi_p2p_group_test.py b/tests/hostsidetests/multidevices/test/direct/integration/wifi_p2p_group_test.py
index a34255e40f..86d5a2b3a9 100644
--- a/tests/hostsidetests/multidevices/test/direct/integration/wifi_p2p_group_test.py
+++ b/tests/hostsidetests/multidevices/test/direct/integration/wifi_p2p_group_test.py
@@ -120,7 +120,7 @@ class WifiP2pGroupTest(base_test.BaseTestClass):
time.sleep(_DEFAULT_FUNCTION_SWITCH_TIME)
# Request the connection.
- wp2putils.p2p_connect(client, group_owner, wps_config,
+ wp2putils.p2p_connect(client, group_owner, False, wps_config,
p2p_connect_type=P2P_CONNECT_JOIN)
go_ip = wp2putils.p2p_go_ip(gc_dut)
diff --git a/tests/hostsidetests/multidevices/test/direct/p2p_utils.py b/tests/hostsidetests/multidevices/test/direct/p2p_utils.py
index 06584a0142..72495cf0be 100644
--- a/tests/hostsidetests/multidevices/test/direct/p2p_utils.py
+++ b/tests/hostsidetests/multidevices/test/direct/p2p_utils.py
@@ -28,6 +28,7 @@ from direct import constants
_DEFAULT_TIMEOUT = datetime.timedelta(seconds=45)
_GROUP_OWNER_DISCOVERY_TIMEOUT = datetime.timedelta(seconds=60)
+_DEFAULT_UI_RESPONSE_TIME = datetime.timedelta(seconds=2)
@dataclasses.dataclass