From c57c8d934cf77673154bc81d767365b4d6cda33f Mon Sep 17 00:00:00 2001 From: Jim Miller Date: Fri, 30 Sep 2016 17:17:59 -0700 Subject: [PATCH] Add metrics logging for critical fingerprintd errors This adds logging when fingerprintd dies or invoked functions fail so we can track driver breakage: - failure to start fingerprintd (fingerprintd_openhal_error) - fingerprintd dies (fingerprintd_died) - call to authenticate/enroll/enumerate/remove fails Fixes bug 30896409 Change-Id: Ic53fcd551ba909ef141893796b33b52cd5e56395 --- .../com/android/server/fingerprint/AuthenticationClient.java | 1 + .../core/java/com/android/server/fingerprint/EnrollClient.java | 1 + .../java/com/android/server/fingerprint/EnumerateClient.java | 2 ++ .../java/com/android/server/fingerprint/FingerprintService.java | 2 ++ .../core/java/com/android/server/fingerprint/RemovalClient.java | 2 ++ 5 files changed, 8 insertions(+) diff --git a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java index 87da866603cc5..5297589c47953 100644 --- a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java +++ b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java @@ -115,6 +115,7 @@ public abstract class AuthenticationClient extends ClientMonitor { final int result = daemon.authenticate(mOpId, getGroupId()); if (result != 0) { Slog.w(TAG, "startAuthentication failed, result=" + result); + MetricsLogger.histogram(getContext(), "fingeprintd_auth_start_error", result); onError(FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE); return result; } diff --git a/services/core/java/com/android/server/fingerprint/EnrollClient.java b/services/core/java/com/android/server/fingerprint/EnrollClient.java index 6a533c9b4e7ba..640a46fb656f0 100644 --- a/services/core/java/com/android/server/fingerprint/EnrollClient.java +++ b/services/core/java/com/android/server/fingerprint/EnrollClient.java @@ -88,6 +88,7 @@ public abstract class EnrollClient extends ClientMonitor { final int result = daemon.enroll(mCryptoToken, getGroupId(), timeout); if (result != 0) { Slog.w(TAG, "startEnroll failed, result=" + result); + MetricsLogger.histogram(getContext(), "fingerprintd_enroll_start_error", result); onError(FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE); return result; } diff --git a/services/core/java/com/android/server/fingerprint/EnumerateClient.java b/services/core/java/com/android/server/fingerprint/EnumerateClient.java index 52dbd5d72e95c..26b191646ddb3 100644 --- a/services/core/java/com/android/server/fingerprint/EnumerateClient.java +++ b/services/core/java/com/android/server/fingerprint/EnumerateClient.java @@ -23,6 +23,7 @@ import android.hardware.fingerprint.IFingerprintServiceReceiver; import android.os.IBinder; import android.os.RemoteException; import android.util.Slog; +import com.android.internal.logging.MetricsLogger; /** * A class to keep track of the enumeration state for a given client. @@ -43,6 +44,7 @@ public abstract class EnumerateClient extends ClientMonitor { if (result != 0) { Slog.w(TAG, "start enumerate for user " + getTargetUserId() + " failed, result=" + result); + MetricsLogger.histogram(getContext(), "fingerprintd_enum_start_error", result); onError(FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE); return result; } diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 9e132f7610876..6c11794b189d7 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -194,6 +194,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe @Override public void binderDied() { Slog.v(TAG, "fingerprintd died"); + MetricsLogger.count(mContext, "fingerprintd_died", 1); mDaemon = null; mCurrentUserId = UserHandle.USER_CURRENT; handleError(mHalDeviceId, FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE); @@ -211,6 +212,7 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe updateActiveGroup(ActivityManager.getCurrentUser(), null); } else { Slog.w(TAG, "Failed to open Fingerprint HAL!"); + MetricsLogger.count(mContext, "fingerprintd_openhal_error", 1); mDaemon = null; } } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/fingerprint/RemovalClient.java b/services/core/java/com/android/server/fingerprint/RemovalClient.java index bcf2264b50fa3..f939f4177a24b 100644 --- a/services/core/java/com/android/server/fingerprint/RemovalClient.java +++ b/services/core/java/com/android/server/fingerprint/RemovalClient.java @@ -24,6 +24,7 @@ import android.os.IBinder; import android.os.RemoteException; import android.os.UserHandle; import android.util.Slog; +import com.android.internal.logging.MetricsLogger; /** * A class to keep track of the remove state for a given client. @@ -46,6 +47,7 @@ public abstract class RemovalClient extends ClientMonitor { final int result = daemon.remove(mFingerId, getGroupId()); if (result != 0) { Slog.w(TAG, "startRemove with id = " + mFingerId + " failed, result=" + result); + MetricsLogger.histogram(getContext(), "fingerprintd_remove_start_error", result); onError(FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE); return result; }