[RTT] Convert to dynamic logging configuration
Tie debugging level to Verbose Wi-Fi debuggging flag. Allow additional
verbose debugging based on (original) static flag.
Bug: 69432628
Test: manually enable/disable and view logs
Change-Id: I64be283fac2cd3cd19cb12613d17ac50270cc802
diff --git a/service/java/com/android/server/wifi/rtt/RttNative.java b/service/java/com/android/server/wifi/rtt/RttNative.java
index e085352..b496ec2 100644
--- a/service/java/com/android/server/wifi/rtt/RttNative.java
+++ b/service/java/com/android/server/wifi/rtt/RttNative.java
@@ -46,6 +46,7 @@
public class RttNative extends IWifiRttControllerEventCallback.Stub {
private static final String TAG = "RttNative";
private static final boolean VDBG = false; // STOPSHIP if true
+ /* package */ boolean mDbg = false;
private final RttServiceImpl mRttService;
private final HalDeviceManager mHalDeviceManager;
@@ -83,7 +84,7 @@
}
private void updateController() {
- if (VDBG) Log.v(TAG, "updateController: mIWifiRttController=" + mIWifiRttController);
+ if (mDbg) Log.v(TAG, "updateController: mIWifiRttController=" + mIWifiRttController);
// only care about isStarted (Wi-Fi started) not isReady - since if not
// ready then Wi-Fi will also be down.
@@ -124,7 +125,11 @@
* @return Success status: true for success, false for failure.
*/
public boolean rangeRequest(int cmdId, RangingRequest request) {
- if (VDBG) Log.v(TAG, "rangeRequest: cmdId=" + cmdId + ", request=" + request);
+ if (mDbg) {
+ Log.v(TAG,
+ "rangeRequest: cmdId=" + cmdId + ", # of requests=" + request.mRttPeers.size());
+ }
+ if (VDBG) Log.v(TAG, "rangeRequest: request=" + request);
synchronized (mLock) {
if (!isReady()) {
Log.e(TAG, "rangeRequest: RttController is null");
@@ -161,7 +166,7 @@
* @return Success status: true for success, false for failure.
*/
public boolean rangeCancel(int cmdId, ArrayList<byte[]> macAddresses) {
- if (VDBG) Log.v(TAG, "rangeCancel: cmdId=" + cmdId);
+ if (mDbg) Log.v(TAG, "rangeCancel: cmdId=" + cmdId);
synchronized (mLock) {
if (!isReady()) {
Log.e(TAG, "rangeCancel: RttController is null");
@@ -192,7 +197,7 @@
*/
@Override
public void onResults(int cmdId, ArrayList<RttResult> halResults) {
- if (VDBG) Log.v(TAG, "onResults: cmdId=" + cmdId + ", # of results=" + halResults.size());
+ if (mDbg) Log.v(TAG, "onResults: cmdId=" + cmdId + ", # of results=" + halResults.size());
List<RangingResult> results = new ArrayList<>(halResults.size());
mRttService.onRangingResults(cmdId, halResults);
diff --git a/service/java/com/android/server/wifi/rtt/RttService.java b/service/java/com/android/server/wifi/rtt/RttService.java
index afffbee..fabab89 100644
--- a/service/java/com/android/server/wifi/rtt/RttService.java
+++ b/service/java/com/android/server/wifi/rtt/RttService.java
@@ -67,7 +67,7 @@
RttNative rttNative = new RttNative(mImpl, halDeviceManager);
mImpl.start(handlerThread.getLooper(), wifiInjector.getClock(), awareBinder, rttNative,
- wifiPermissionsUtil);
+ wifiPermissionsUtil, wifiInjector.getFrameworkFacade());
}
}
}
diff --git a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
index 3417f74..a83383c 100644
--- a/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
+++ b/service/java/com/android/server/wifi/rtt/RttServiceImpl.java
@@ -22,6 +22,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
+import android.database.ContentObserver;
import android.hardware.wifi.V1_0.RttResult;
import android.hardware.wifi.V1_0.RttStatus;
import android.net.MacAddress;
@@ -42,11 +43,13 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.WorkSource;
+import android.provider.Settings;
import android.util.Log;
import android.util.SparseIntArray;
import com.android.internal.util.WakeupMessage;
import com.android.server.wifi.Clock;
+import com.android.server.wifi.FrameworkFacade;
import com.android.server.wifi.util.WifiPermissionsUtil;
import java.io.FileDescriptor;
@@ -65,6 +68,7 @@
public class RttServiceImpl extends IWifiRttManager.Stub {
private static final String TAG = "RttServiceImpl";
private static final boolean VDBG = false; // STOPSHIP if true
+ private boolean mDbg = false;
private final Context mContext;
private Clock mClock;
@@ -102,10 +106,11 @@
* @param awareBinder The Wi-Fi Aware service (binder) if supported on the system.
* @param rttNative The Native interface to the HAL.
* @param wifiPermissionsUtil Utility for permission checks.
+ * @param frameworkFacade Facade for framework classes, allows mocking.
*/
public void start(Looper looper, Clock clock, IWifiAwareManager awareBinder,
- RttNative rttNative,
- WifiPermissionsUtil wifiPermissionsUtil) {
+ RttNative rttNative, WifiPermissionsUtil wifiPermissionsUtil,
+ FrameworkFacade frameworkFacade) {
mClock = clock;
mAwareBinder = awareBinder;
mRttNative = rttNative;
@@ -120,7 +125,7 @@
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
- if (VDBG) Log.v(TAG, "BroadcastReceiver: action=" + action);
+ if (mDbg) Log.v(TAG, "BroadcastReceiver: action=" + action);
if (PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED.equals(action)) {
if (mPowerManager.isDeviceIdleMode()) {
@@ -132,11 +137,35 @@
}
}, intentFilter);
+ frameworkFacade.registerContentObserver(mContext,
+ Settings.Global.getUriFor(Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED), true,
+ new ContentObserver(mRttServiceSynchronized.mHandler) {
+ @Override
+ public void onChange(boolean selfChange) {
+ enableVerboseLogging(frameworkFacade.getIntegerSetting(mContext,
+ Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 0));
+ }
+ });
+ enableVerboseLogging(frameworkFacade.getIntegerSetting(mContext,
+ Settings.Global.WIFI_VERBOSE_LOGGING_ENABLED, 0));
+
mRttServiceSynchronized.mHandler.post(() -> {
rttNative.start();
});
}
+ private void enableVerboseLogging(int verbose) {
+ if (verbose > 0) {
+ mDbg = true;
+ } else {
+ mDbg = false;
+ }
+ if (VDBG) {
+ mDbg = true; // just override
+ }
+ mRttNative.mDbg = mDbg;
+ }
+
/*
* ASYNCHRONOUS DOMAIN - can be called from different threads!
*/
@@ -230,7 +259,7 @@
IBinder.DeathRecipient dr = new IBinder.DeathRecipient() {
@Override
public void binderDied() {
- if (VDBG) Log.v(TAG, "binderDied: uid=" + uid);
+ if (mDbg) Log.v(TAG, "binderDied: uid=" + uid);
binder.unlinkToDeath(this, 0);
mRttServiceSynchronized.mHandler.post(() -> {
@@ -508,7 +537,7 @@
}
}
- if (VDBG) {
+ if (mDbg) {
Log.v(TAG, "isRequestorSpamming: ws=" + ws + ", someone is spamming: " + counts);
}
return true;
@@ -805,7 +834,7 @@
for (ResponderConfig peer : request.mRttPeers) {
RttResult resultForRequest = resultEntries.get(peer.macAddress);
if (resultForRequest == null) {
- if (VDBG) {
+ if (mDbg) {
Log.v(TAG, "postProcessResults: missing=" + peer.macAddress);
}
if (peer.peerHandle == null) {
diff --git a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
index 7e71069..d42b795 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/rtt/RttServiceImplTest.java
@@ -25,11 +25,13 @@
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.inOrder;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
@@ -67,6 +69,7 @@
import android.util.Pair;
import com.android.server.wifi.Clock;
+import com.android.server.wifi.FrameworkFacade;
import com.android.server.wifi.util.WifiPermissionsUtil;
import org.junit.After;
@@ -133,6 +136,9 @@
@Mock
public IRttCallback mockCallback;
+ @Mock
+ FrameworkFacade mFrameworkFacade;
+
/**
* Using instead of spy to avoid native crash failures - possibly due to
* spy's copying of state.
@@ -163,6 +169,8 @@
mMockLooper = new TestLooper();
mAlarmManager = new TestAlarmManager();
+ doNothing().when(mFrameworkFacade).registerContentObserver(eq(mockContext), any(),
+ anyBoolean(), any());
when(mockContext.getSystemService(Context.ALARM_SERVICE))
.thenReturn(mAlarmManager.getAlarmManager());
mInOrder = inOrder(mAlarmManager.getAlarmManager(), mockContext);
@@ -188,7 +196,7 @@
doAnswer(mBinderUnlinkToDeathCounter).when(mockIbinder).unlinkToDeath(any(), anyInt());
mDut.start(mMockLooper.getLooper(), mockClock, mockAwareManagerBinder, mockNative,
- mockPermissionUtil);
+ mockPermissionUtil, mFrameworkFacade);
mMockLooper.dispatchAll();
ArgumentCaptor<BroadcastReceiver> bcastRxCaptor = ArgumentCaptor.forClass(
BroadcastReceiver.class);