Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0f6a066b authored by Kevin Chyn's avatar Kevin Chyn Committed by Android (Google) Code Review
Browse files

Merge "Clear BiometricScheduler when biometric HAL dies"

parents 52fc221c 60984c6c
Loading
Loading
Loading
Loading
+13 −0
Original line number Original line Diff line number Diff line
@@ -543,6 +543,10 @@ public class BiometricScheduler {
        return mCurrentOperation.clientMonitor;
        return mCurrentOperation.clientMonitor;
    }
    }


    public int getCurrentPendingCount() {
        return mPendingOperations.size();
    }

    public void recordCrashState() {
    public void recordCrashState() {
        if (mCrashStates.size() >= CrashState.NUM_ENTRIES) {
        if (mCrashStates.size() >= CrashState.NUM_ENTRIES) {
            mCrashStates.removeFirst();
            mCrashStates.removeFirst();
@@ -573,4 +577,13 @@ public class BiometricScheduler {
            pw.println("Crash State " + crashState);
            pw.println("Crash State " + crashState);
        }
        }
    }
    }

    /**
     * Clears the scheduler of anything work-related. This should be used for example when the
     * HAL dies.
     */
    public void reset() {
        mPendingOperations.clear();
        mCurrentOperation = null;
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -219,7 +219,7 @@ public abstract class ClientMonitor<T> extends LoggableMonitor implements IBinde
        return mSensorId;
        return mSensorId;
    }
    }


    public final T getFreshDaemon() {
    public T getFreshDaemon() {
        return mLazyDaemon.getDaemon();
        return mLazyDaemon.getDaemon();
    }
    }


+6 −1
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoOutputStream;


import com.android.internal.annotations.VisibleForTesting;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
import com.android.server.biometrics.sensors.AuthenticationClient;
import com.android.server.biometrics.sensors.ClientMonitor;
import com.android.server.biometrics.sensors.ClientMonitor;
@@ -71,7 +72,8 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {


    @NonNull private final Context mContext;
    @NonNull private final Context mContext;
    @NonNull private final String mHalInstanceName;
    @NonNull private final String mHalInstanceName;
    @NonNull private final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports
    @NonNull @VisibleForTesting
    final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports
    @NonNull private final ClientMonitor.LazyDaemon<IFace> mLazyDaemon;
    @NonNull private final ClientMonitor.LazyDaemon<IFace> mLazyDaemon;
    @NonNull private final Handler mHandler;
    @NonNull private final Handler mHandler;
    @NonNull private final LockoutResetDispatcher mLockoutResetDispatcher;
    @NonNull private final LockoutResetDispatcher mLockoutResetDispatcher;
@@ -596,8 +598,11 @@ public class FaceProvider implements IBinder.DeathRecipient, ServiceProvider {
        mHandler.post(() -> {
        mHandler.post(() -> {
            mDaemon = null;
            mDaemon = null;
            for (int i = 0; i < mSensors.size(); i++) {
            for (int i = 0; i < mSensors.size(); i++) {
                final Sensor sensor = mSensors.valueAt(i);
                final int sensorId = mSensors.keyAt(i);
                final int sensorId = mSensors.keyAt(i);
                PerformanceTracker.getInstanceForSensorId(sensorId).incrementHALDeathCount();
                PerformanceTracker.getInstanceForSensorId(sensorId).incrementHALDeathCount();
                sensor.getScheduler().recordCrashState();
                sensor.getScheduler().reset();
            }
            }
        });
        });
    }
    }
+9 −6
Original line number Original line Diff line number Diff line
@@ -333,16 +333,17 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
    }
    }


    @VisibleForTesting
    @VisibleForTesting
    public Face10(@NonNull Context context, int sensorId,
    Face10(@NonNull Context context, int sensorId,
            @BiometricManager.Authenticators.Types int strength,
            @BiometricManager.Authenticators.Types int strength,
            @NonNull LockoutResetDispatcher lockoutResetDispatcher,
            @NonNull LockoutResetDispatcher lockoutResetDispatcher,
            boolean supportsSelfIllumination, int maxTemplatesAllowed) {
            boolean supportsSelfIllumination, int maxTemplatesAllowed,
            @NonNull BiometricScheduler scheduler) {
        mSensorProperties = new FaceSensorPropertiesInternal(sensorId,
        mSensorProperties = new FaceSensorPropertiesInternal(sensorId,
                Utils.authenticatorStrengthToPropertyStrength(strength),
                Utils.authenticatorStrengthToPropertyStrength(strength),
                maxTemplatesAllowed, false /* supportsFaceDetect */, supportsSelfIllumination);
                maxTemplatesAllowed, false /* supportsFaceDetect */, supportsSelfIllumination);
        mContext = context;
        mContext = context;
        mSensorId = sensorId;
        mSensorId = sensorId;
        mScheduler = new BiometricScheduler(TAG, null /* gestureAvailabilityTracker */);
        mScheduler = scheduler;
        mHandler = new Handler(Looper.getMainLooper());
        mHandler = new Handler(Looper.getMainLooper());
        mUsageStats = new UsageStats(context);
        mUsageStats = new UsageStats(context);
        mAuthenticatorIds = new HashMap<>();
        mAuthenticatorIds = new HashMap<>();
@@ -369,7 +370,8 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
            @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
            @NonNull LockoutResetDispatcher lockoutResetDispatcher) {
        this(context, sensorId, strength, lockoutResetDispatcher,
        this(context, sensorId, strength, lockoutResetDispatcher,
                context.getResources().getBoolean(R.bool.config_faceAuthSupportsSelfIllumination),
                context.getResources().getBoolean(R.bool.config_faceAuthSupportsSelfIllumination),
                context.getResources().getInteger(R.integer.config_faceMaxTemplatesPerUser));
                context.getResources().getInteger(R.integer.config_faceMaxTemplatesPerUser),
                new BiometricScheduler(TAG, null /* gestureAvailabilityTracker */));
    }
    }


    @Override
    @Override
@@ -388,12 +390,13 @@ public class Face10 implements IHwBinder.DeathRecipient, ServiceProvider {
                interruptable.onError(BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE,
                interruptable.onError(BiometricConstants.BIOMETRIC_ERROR_HW_UNAVAILABLE,
                        0 /* vendorCode */);
                        0 /* vendorCode */);


                mScheduler.recordCrashState();

                FrameworkStatsLog.write(FrameworkStatsLog.BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED,
                FrameworkStatsLog.write(FrameworkStatsLog.BIOMETRIC_SYSTEM_HEALTH_ISSUE_DETECTED,
                        BiometricsProtoEnums.MODALITY_FACE,
                        BiometricsProtoEnums.MODALITY_FACE,
                        BiometricsProtoEnums.ISSUE_HAL_DEATH);
                        BiometricsProtoEnums.ISSUE_HAL_DEATH);
            }
            }

            mScheduler.recordCrashState();
            mScheduler.reset();
        });
        });
    }
    }


+6 −1
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.proto.ProtoOutputStream;
import android.util.proto.ProtoOutputStream;


import com.android.internal.annotations.VisibleForTesting;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.Utils;
import com.android.server.biometrics.sensors.AuthenticationClient;
import com.android.server.biometrics.sensors.AuthenticationClient;
import com.android.server.biometrics.sensors.ClientMonitor;
import com.android.server.biometrics.sensors.ClientMonitor;
@@ -67,7 +68,8 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi


    @NonNull private final Context mContext;
    @NonNull private final Context mContext;
    @NonNull private final String mHalInstanceName;
    @NonNull private final String mHalInstanceName;
    @NonNull private final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports
    @NonNull @VisibleForTesting
    final SparseArray<Sensor> mSensors; // Map of sensors that this HAL supports
    @NonNull private final ClientMonitor.LazyDaemon<IFingerprint> mLazyDaemon;
    @NonNull private final ClientMonitor.LazyDaemon<IFingerprint> mLazyDaemon;
    @NonNull private final Handler mHandler;
    @NonNull private final Handler mHandler;
    @NonNull private final LockoutResetDispatcher mLockoutResetDispatcher;
    @NonNull private final LockoutResetDispatcher mLockoutResetDispatcher;
@@ -607,8 +609,11 @@ public class FingerprintProvider implements IBinder.DeathRecipient, ServiceProvi
            mDaemon = null;
            mDaemon = null;


            for (int i = 0; i < mSensors.size(); i++) {
            for (int i = 0; i < mSensors.size(); i++) {
                final Sensor sensor = mSensors.valueAt(i);
                final int sensorId = mSensors.keyAt(i);
                final int sensorId = mSensors.keyAt(i);
                PerformanceTracker.getInstanceForSensorId(sensorId).incrementHALDeathCount();
                PerformanceTracker.getInstanceForSensorId(sensorId).incrementHALDeathCount();
                sensor.getScheduler().recordCrashState();
                sensor.getScheduler().reset();
            }
            }
        });
        });
    }
    }
Loading