summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gabriel Biren <gbiren@google.com> 2025-03-19 22:26:12 +0000
committer Gabriel Biren <gbiren@google.com> 2025-03-21 00:18:38 +0000
commitcfdd5f1d6acbfb6706a88618cf853a26faa8adc0 (patch)
treeae51a67fb8102e914234a7d92fb69601564a6edb
parent739e49277de8e110259243c7363cd548efc3b856 (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
-rw-r--r--service/java/com/android/server/wifi/WifiInjector.java2
-rw-r--r--service/java/com/android/server/wifi/WifiMulticastLockManager.java22
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiMulticastLockManagerTest.java23
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 */);
+ }
}