diff options
author | 2025-03-19 21:26:36 +0000 | |
---|---|---|
committer | 2025-03-20 22:53:40 +0000 | |
commit | 739e49277de8e110259243c7363cd548efc3b856 (patch) | |
tree | 60228d867e565a56bbc831be658c759afcaef131 | |
parent | ad4675fe32adc388208d185cce4871d36bbdf907 (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
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(); |