Merge "By default, only eng builds allow latency-test broadcasts" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-04-14 17:30:13 +00:00
committed by Android (Google) Code Review
2 changed files with 70 additions and 24 deletions

View File

@@ -48,7 +48,7 @@ import java.util.concurrent.TimeUnit;
*/ */
public class LatencyTracker { public class LatencyTracker {
private static final String TAG = "LatencyTracker"; private static final String TAG = "LatencyTracker";
private static final String SETTINGS_ENABLED_KEY = "enabled"; public static final String SETTINGS_ENABLED_KEY = "enabled";
private static final String SETTINGS_SAMPLING_INTERVAL_KEY = "sampling_interval"; private static final String SETTINGS_SAMPLING_INTERVAL_KEY = "sampling_interval";
private static final boolean DEBUG = false; private static final boolean DEBUG = false;
/** Default to being enabled on debug builds. */ /** Default to being enabled on debug builds. */

View File

@@ -23,21 +23,31 @@ import android.content.IntentFilter;
import android.hardware.biometrics.BiometricConstants; import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricSourceType; import android.hardware.biometrics.BiometricSourceType;
import android.os.Build; import android.os.Build;
import android.provider.DeviceConfig;
import androidx.annotation.NonNull;
import com.android.internal.util.LatencyTracker;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.statusbar.phone.BiometricUnlockController; import com.android.systemui.statusbar.phone.BiometricUnlockController;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.concurrency.DelayableExecutor;
import java.io.PrintWriter;
import javax.inject.Inject; import javax.inject.Inject;
/** /**
* Class that only runs on debuggable builds that listens to broadcasts that simulate actions in the * Class that only runs on debuggable builds with the LatencyTracker setting enabled
* that listens to broadcasts that simulate actions in the
* system that are used for testing the latency. * system that are used for testing the latency.
*/ */
@SysUISingleton @SysUISingleton
public class LatencyTester extends CoreStartable { public class LatencyTester extends CoreStartable {
private static final boolean DEFAULT_ENABLED = Build.IS_ENG;
private static final String private static final String
ACTION_FINGERPRINT_WAKE = ACTION_FINGERPRINT_WAKE =
"com.android.systemui.latency.ACTION_FINGERPRINT_WAKE"; "com.android.systemui.latency.ACTION_FINGERPRINT_WAKE";
@@ -46,42 +56,78 @@ public class LatencyTester extends CoreStartable {
"com.android.systemui.latency.ACTION_FACE_WAKE"; "com.android.systemui.latency.ACTION_FACE_WAKE";
private final BiometricUnlockController mBiometricUnlockController; private final BiometricUnlockController mBiometricUnlockController;
private final BroadcastDispatcher mBroadcastDispatcher; private final BroadcastDispatcher mBroadcastDispatcher;
private final DeviceConfigProxy mDeviceConfigProxy;
private boolean mEnabled;
@Inject @Inject
public LatencyTester(Context context, BiometricUnlockController biometricUnlockController, public LatencyTester(
BroadcastDispatcher broadcastDispatcher) { Context context,
BiometricUnlockController biometricUnlockController,
BroadcastDispatcher broadcastDispatcher,
DeviceConfigProxy deviceConfigProxy,
@Main DelayableExecutor mainExecutor
) {
super(context); super(context);
mBiometricUnlockController = biometricUnlockController; mBiometricUnlockController = biometricUnlockController;
mBroadcastDispatcher = broadcastDispatcher; mBroadcastDispatcher = broadcastDispatcher;
mDeviceConfigProxy = deviceConfigProxy;
updateEnabled();
mDeviceConfigProxy.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_LATENCY_TRACKER,
mainExecutor, properties -> updateEnabled());
} }
@Override @Override
public void start() { public void start() {
if (!Build.IS_DEBUGGABLE) { registerForBroadcasts(mEnabled);
return;
}
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_FINGERPRINT_WAKE);
filter.addAction(ACTION_FACE_WAKE);
mBroadcastDispatcher.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_FINGERPRINT_WAKE.equals(action)) {
fakeWakeAndUnlock(BiometricSourceType.FINGERPRINT);
} else if (ACTION_FACE_WAKE.equals(action)) {
fakeWakeAndUnlock(BiometricSourceType.FACE);
}
}
}, filter);
} }
private void fakeWakeAndUnlock(BiometricSourceType type) { private void fakeWakeAndUnlock(BiometricSourceType type) {
if (!mEnabled) {
return;
}
mBiometricUnlockController.onBiometricAcquired(type, mBiometricUnlockController.onBiometricAcquired(type,
BiometricConstants.BIOMETRIC_ACQUIRED_GOOD); BiometricConstants.BIOMETRIC_ACQUIRED_GOOD);
mBiometricUnlockController.onBiometricAuthenticated( mBiometricUnlockController.onBiometricAuthenticated(
KeyguardUpdateMonitor.getCurrentUser(), type, true /* isStrongBiometric */); KeyguardUpdateMonitor.getCurrentUser(), type, true /* isStrongBiometric */);
} }
private void registerForBroadcasts(boolean register) {
if (register) {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_FINGERPRINT_WAKE);
filter.addAction(ACTION_FACE_WAKE);
mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter);
} else {
mBroadcastDispatcher.unregisterReceiver(mBroadcastReceiver);
}
}
private void updateEnabled() {
boolean wasEnabled = mEnabled;
mEnabled = Build.IS_DEBUGGABLE
&& mDeviceConfigProxy.getBoolean(DeviceConfig.NAMESPACE_LATENCY_TRACKER,
LatencyTracker.SETTINGS_ENABLED_KEY, DEFAULT_ENABLED);
if (mEnabled != wasEnabled) {
registerForBroadcasts(mEnabled);
}
}
@Override
public void dump(@NonNull PrintWriter pw, @NonNull String[] args) {
pw.println("mEnabled=" + mEnabled);
}
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_FINGERPRINT_WAKE.equals(action)) {
fakeWakeAndUnlock(BiometricSourceType.FINGERPRINT);
} else if (ACTION_FACE_WAKE.equals(action)) {
fakeWakeAndUnlock(BiometricSourceType.FACE);
}
}
};
} }