summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gabriel Biren <gbiren@google.com> 2025-03-19 21:26:36 +0000
committer Gabriel Biren <gbiren@google.com> 2025-03-20 22:53:40 +0000
commit739e49277de8e110259243c7363cd548efc3b856 (patch)
tree60228d867e565a56bbc831be658c759afcaef131
parentad4675fe32adc388208d185cce4871d36bbdf907 (diff)
Retrieve the attribution tag and package name
when a multicast lock is acquired. This will be used in the next CL for metrics. Bug: 391378901 Flag: EXEMPT minor metrics feature Test: atest WifiManagerTest Test: atest WifiServiceImplTest \ WifiMulticastLockManagerTest Change-Id: Ife2be68dfa8cbabe2cc8cda0fc9993cd46adebb2
-rw-r--r--framework/java/android/net/wifi/IWifiManager.aidl5
-rw-r--r--framework/java/android/net/wifi/WifiManager.java3
-rw-r--r--service/java/com/android/server/wifi/WifiMulticastLockManager.java33
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java13
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java30
5 files changed, 55 insertions, 29 deletions
diff --git a/framework/java/android/net/wifi/IWifiManager.aidl b/framework/java/android/net/wifi/IWifiManager.aidl
index 2382f94382..9e126e3c95 100644
--- a/framework/java/android/net/wifi/IWifiManager.aidl
+++ b/framework/java/android/net/wifi/IWifiManager.aidl
@@ -228,9 +228,10 @@ interface IWifiManager {
boolean isMulticastEnabled();
- void acquireMulticastLock(IBinder binder, String tag);
+ void acquireMulticastLock(
+ IBinder binder, String lockTag, String attributionTag, String packageName);
- void releaseMulticastLock(IBinder binder, String tag);
+ void releaseMulticastLock(IBinder binder, String lockTag);
void updateInterfaceIpState(String ifaceName, int mode);
diff --git a/framework/java/android/net/wifi/WifiManager.java b/framework/java/android/net/wifi/WifiManager.java
index 0ebf06fa5d..c642e04dc8 100644
--- a/framework/java/android/net/wifi/WifiManager.java
+++ b/framework/java/android/net/wifi/WifiManager.java
@@ -8465,7 +8465,8 @@ public class WifiManager {
synchronized (mBinder) {
if (mRefCounted ? (++mRefCount == 1) : (!mHeld)) {
try {
- mService.acquireMulticastLock(mBinder, mTag);
+ mService.acquireMulticastLock(mBinder, mTag,
+ mContext.getAttributionTag(), mContext.getOpPackageName());
synchronized (WifiManager.this) {
if (mActiveLockCount >= MAX_ACTIVE_LOCKS) {
mService.releaseMulticastLock(mBinder, mTag);
diff --git a/service/java/com/android/server/wifi/WifiMulticastLockManager.java b/service/java/com/android/server/wifi/WifiMulticastLockManager.java
index fa40fd7d3b..e25d9c86c6 100644
--- a/service/java/com/android/server/wifi/WifiMulticastLockManager.java
+++ b/service/java/com/android/server/wifi/WifiMulticastLockManager.java
@@ -89,11 +89,16 @@ public class WifiMulticastLockManager {
String mTag;
int mUid;
IBinder mBinder;
+ String mAttributionTag;
+ String mPackageName;
- Multicaster(int uid, IBinder binder, String tag) {
+ Multicaster(int uid, IBinder binder, String tag, String attributionTag,
+ String packageName) {
mTag = tag;
mUid = uid;
mBinder = binder;
+ mAttributionTag = attributionTag;
+ mPackageName = packageName;
try {
mBinder.linkToDeath(this, 0);
} catch (RemoteException e) {
@@ -130,6 +135,14 @@ public class WifiMulticastLockManager {
return mBinder;
}
+ public String getAttributionTag() {
+ return mAttributionTag;
+ }
+
+ public String getPackageName() {
+ return mPackageName;
+ }
+
public String toString() {
return "Multicaster{" + mTag + " uid=" + mUid + "}";
}
@@ -221,10 +234,14 @@ public class WifiMulticastLockManager {
/**
* Acquire a multicast lock.
+ * @param uid uid of the calling application
* @param binder a binder used to ensure caller is still alive
- * @param tag string name of the caller.
+ * @param lockTag caller-provided tag to identify this lock
+ * @param attributionTag attribution tag of the calling application
+ * @param packageName package name of the calling application
*/
- public void acquireLock(int uid, IBinder binder, String tag) {
+ public void acquireLock(int uid, IBinder binder, String lockTag, String attributionTag,
+ String packageName) {
synchronized (mLock) {
mMulticastEnabled++;
@@ -234,7 +251,7 @@ public class WifiMulticastLockManager {
}
int numLocksHeldByUid = mNumLocksPerActiveOwner.getOrDefault(uid, 0);
mNumLocksPerActiveOwner.put(uid, numLocksHeldByUid + 1);
- mMulticasters.add(new Multicaster(uid, binder, tag));
+ mMulticasters.add(new Multicaster(uid, binder, lockTag, attributionTag, packageName));
// Note that we could call stopFilteringMulticastPackets only when
// our new size == 1 (first call), but this function won't
@@ -249,20 +266,20 @@ public class WifiMulticastLockManager {
mBatteryStats.reportWifiMulticastEnabled(new WorkSource(uid));
WifiStatsLog.write_non_chained(
WifiStatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED, uid, null,
- WifiStatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED__STATE__ON, tag);
+ WifiStatsLog.WIFI_MULTICAST_LOCK_STATE_CHANGED__STATE__ON, lockTag);
Binder.restoreCallingIdentity(ident);
}
/** Releases a multicast lock */
- public void releaseLock(int uid, IBinder binder, String tag) {
+ public void releaseLock(int uid, IBinder binder, String lockTag) {
synchronized (mLock) {
mMulticastDisabled++;
int size = mMulticasters.size();
for (int i = size - 1; i >= 0; i--) {
Multicaster m = mMulticasters.get(i);
- if ((m != null) && (m.getUid() == uid) && (m.getTag().equals(tag))
+ if ((m != null) && (m.getUid() == uid) && (m.getTag().equals(lockTag))
&& (m.getBinder() == binder)) {
- removeMulticasterLocked(i, uid, tag);
+ removeMulticasterLocked(i, uid, lockTag);
break;
}
}
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index ec20ffbd66..9055d857be 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -6171,19 +6171,20 @@ public class WifiServiceImpl extends IWifiManager.Stub {
}
@Override
- public void acquireMulticastLock(IBinder binder, String tag) {
+ public void acquireMulticastLock(IBinder binder, String lockTag, String attributionTag,
+ String packageName) {
enforceMulticastChangePermission();
int uid = Binder.getCallingUid();
- mLog.info("acquireMulticastLock uid=% tag=%").c(uid).c(tag).flush();
- mWifiMulticastLockManager.acquireLock(uid, binder, tag);
+ mLog.info("acquireMulticastLock uid=% lockTag=%").c(uid).c(lockTag).flush();
+ mWifiMulticastLockManager.acquireLock(uid, binder, lockTag, attributionTag, packageName);
}
@Override
- public void releaseMulticastLock(IBinder binder, String tag) {
+ public void releaseMulticastLock(IBinder binder, String lockTag) {
enforceMulticastChangePermission();
int uid = Binder.getCallingUid();
- mLog.info("releaseMulticastLock uid=% tag=%").c(uid).c(tag).flush();
- mWifiMulticastLockManager.releaseLock(uid, binder, tag);
+ mLog.info("releaseMulticastLock uid=% lockTag=%").c(uid).c(lockTag).flush();
+ mWifiMulticastLockManager.releaseLock(uid, binder, lockTag);
}
@Override
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 f57f8c43b1..1e80cbc6b8 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java
@@ -52,6 +52,8 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
private static final String WL_1_TAG = "Wakelock-1";
private static final String WL_2_TAG = "Wakelock-2";
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 TestLooper mLooper;
@Mock ConcreteClientModeManager mClientModeManager;
@@ -110,7 +112,7 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
@Test
public void oneLock() throws RemoteException {
IBinder binder = mock(IBinder.class);
- mManager.acquireLock(TEST_UID, binder, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
assertTrue(mManager.isMulticastEnabled());
verify(mFilterController).stopFilteringMulticastPackets();
mManager.startFilteringMulticastPackets();
@@ -160,7 +162,7 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
assertTrue(mFilterController2.isFilteringStarted());
IBinder binder = mock(IBinder.class);
- mManager.acquireLock(TEST_UID, binder, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
assertTrue(mManager.isMulticastEnabled());
// CMM1 filtering stopped
assertFalse(mFilterController.isFilteringStarted());
@@ -195,7 +197,7 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
@Test
public void oneLock_wrongName() throws RemoteException {
IBinder binder = mock(IBinder.class);
- mManager.acquireLock(TEST_UID, binder, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
assertTrue(mManager.isMulticastEnabled());
verify(mFilterController).stopFilteringMulticastPackets();
mManager.startFilteringMulticastPackets();
@@ -218,12 +220,12 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
InOrder inOrderHandler = inOrder(mFilterController);
InOrder inOrderBatteryStats = inOrder(mBatteryStats);
- mManager.acquireLock(TEST_UID, binder, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
inOrderHandler.verify(mFilterController).stopFilteringMulticastPackets();
inOrderBatteryStats.verify(mBatteryStats).reportWifiMulticastEnabled(any());
assertTrue(mManager.isMulticastEnabled());
- mManager.acquireLock(TEST_UID, binder, WL_2_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_2_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
inOrderHandler.verify(mFilterController).stopFilteringMulticastPackets();
inOrderBatteryStats.verify(mBatteryStats).reportWifiMulticastEnabled(any());
assertTrue(mManager.isMulticastEnabled());
@@ -252,12 +254,12 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
InOrder inOrderHandler = inOrder(mFilterController);
InOrder inOrderBatteryStats = inOrder(mBatteryStats);
- mManager.acquireLock(TEST_UID, binder, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
inOrderHandler.verify(mFilterController).stopFilteringMulticastPackets();
inOrderBatteryStats.verify(mBatteryStats).reportWifiMulticastEnabled(any());
assertTrue(mManager.isMulticastEnabled());
- mManager.acquireLock(TEST_UID, binder, WL_2_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_2_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
inOrderHandler.verify(mFilterController).stopFilteringMulticastPackets();
inOrderBatteryStats.verify(mBatteryStats).reportWifiMulticastEnabled(any());
assertTrue(mManager.isMulticastEnabled());
@@ -288,8 +290,8 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
IBinder binder2 = mock(IBinder.class);
// Both acquired locks have the same tag
- mManager.acquireLock(TEST_UID, binder1, WL_1_TAG);
- mManager.acquireLock(TEST_UID, binder2, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder1, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
+ mManager.acquireLock(TEST_UID, binder2, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
assertTrue(mManager.isMulticastEnabled());
mManager.releaseLock(TEST_UID, binder1, WL_1_TAG);
@@ -308,7 +310,7 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
@Test
public void testSingleLockActiveStateChange() {
IBinder binder = mock(IBinder.class);
- mManager.acquireLock(TEST_UID, binder, WL_1_TAG);
+ mManager.acquireLock(TEST_UID, binder, WL_1_TAG, TEST_ATTRIBUTION_TAG, TEST_PACKAGE_NAME);
assertTrue(mManager.isMulticastEnabled());
verify(mFilterController).stopFilteringMulticastPackets();
@@ -339,11 +341,15 @@ public class WifiMulticastLockManagerTest extends WifiBaseTest {
public void testMultipleOwnersActiveStateChange() {
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);
- mManager.acquireLock(uid1, binder1, WL_1_TAG);
- mManager.acquireLock(uid2, binder2, WL_2_TAG);
+ mManager.acquireLock(uid1, binder1, WL_1_TAG, attributionTag1, packageName1);
+ mManager.acquireLock(uid2, binder2, WL_2_TAG, attributionTag2, packageName2);
assertTrue(mManager.isMulticastEnabled());
verify(mFilterController, times(2)).stopFilteringMulticastPackets();