diff options
author | 2025-03-19 22:26:12 +0000 | |
---|---|---|
committer | 2025-03-21 00:18:38 +0000 | |
commit | cfdd5f1d6acbfb6706a88618cf853a26faa8adc0 (patch) | |
tree | ae51a67fb8102e914234a7d92fb69601564a6edb | |
parent | 739e49277de8e110259243c7363cd548efc3b856 (diff) |
Log WifiMulticastLockManager acquired sessions
in WifiMetrics when locks are released.
Bug: 391378901
Flag: EXEMPT minor metrics feature
Test: atest WifiInjectorTest \
WifiMulticastLockManagerTest
Change-Id: Ie593dc64d97210b29ca657d3bb5b1254caf5eae2
3 files changed, 44 insertions, 3 deletions
diff --git a/service/java/com/android/server/wifi/WifiInjector.java b/service/java/com/android/server/wifi/WifiInjector.java index 300f850d51..6a62336fe6 100644 --- a/service/java/com/android/server/wifi/WifiInjector.java +++ b/service/java/com/android/server/wifi/WifiInjector.java @@ -607,7 +607,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/WifiMulticastLockManager.java b/service/java/com/android/server/wifi/WifiMulticastLockManager.java index e25d9c86c6..f02efc3d74 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; @@ -54,6 +55,9 @@ public class WifiMulticastLockManager { 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 +72,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 +101,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 +110,7 @@ public class WifiMulticastLockManager { mBinder = binder; mAttributionTag = attributionTag; mPackageName = packageName; + mAcquireTime = mClock.getElapsedSinceBootMillis(); try { mBinder.linkToDeath(this, 0); } catch (RemoteException e) { @@ -143,6 +155,10 @@ public class WifiMulticastLockManager { return mPackageName; } + public long getAcquireTime() { + return mAcquireTime; + } + public String toString() { return "Multicaster{" + mTag + " uid=" + mUid + "}"; } @@ -299,6 +315,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)) { 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..eb290241b1 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,20 @@ 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 */); + } } |