chromium/tools/metrics/histograms/metadata/fingerprint/histograms.xml

<!--
Copyright 2020 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<!--
This file is used to generate a comprehensive list of Fingerprint histograms
along with a detailed description for each histogram.

For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md

Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
[email protected].
-->

<histogram-configuration>

<histograms>

<histogram name="Fingerprint.Auth.Error" enum="FingerprintError"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the error during fingerprint authentication session. It is recorded
    every time authentication session (unlock screen, web auth, etc.) ends with
    error.
  </summary>
</histogram>

<histogram name="Fingerprint.Auth.ScanResult" enum="FingerprintScanResult"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the scan result during fingerprint authentication session. It is
    recorded every time user touches the fingerprint sensor while authenticating
    (unlock screen, web auth, etc.) and session is not finished with error.
  </summary>
</histogram>

<histogram name="Fingerprint.Enroll.NumCaptures" units="captures"
    expires_after="2025-07-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Count the number of fingerprint sensor captures (i.e. touches) performed
    during the enrollment session of a new fingerprint. This includes all
    enrollment captures, including those resulting in errors, such as
    &quot;partial&quot;, &quot;immobile&quot;, etc.
  </summary>
</histogram>

<histogram name="Fingerprint.Enroll.ScanResult" enum="FingerprintScanResult"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the scan result during fingerprint enrollment session. It is recorded
    every time user touches the fingerprint sensor while enrolling fingerprints
    (during onboarding or in Chrome OS settings).
  </summary>
</histogram>

<histogram name="Fingerprint.FingerprintPowerButtonRace" units="units"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the event where a fingerprint scan and a power button press occured
    within 1 second of each other. Recorded when FingerprintStorage and
    PowerManagerClient notify FingerprintPowerButtonRaceDetector of a
    fingerprint scan and power button press respectively, within 1 second.
  </summary>
</histogram>

<histogram name="Fingerprint.FingerprintScanDone" units="units"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Indicates a scan was recorded by the finperprint sensor. Recorded when an
    AuthScanDone signal is received by FinperprintStorage from biod, and
    notifies FingerprintPowerButtonRaceDetector.
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.AuthenticateCredential"
    enum="AuthenticateCredentialStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of AuthenticateCredential operations. An
    AuthenticateCredential will be called when FPMCU finishes a fingerprint
    match. This metric is recorded every time an AuthenticateCredential
    operation completes (success or failure).
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.CreateCredential"
    enum="CreateCredentialStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of CreateCredential operations. A CreateCredential
    will be called when FPMCU finishes a finger enrollment. This metric is
    recorded every time a CreateCredential operation completes (success or
    failure).
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.DeleteCredential"
    enum="DeleteCredentialStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of DeleteCredential operations. A DeleteCredential
    will be called when the user wants to delete a fingerprint record (including
    when removing the user from the device). This metric is recorded every time
    a DeleteCredential operation completes (success or failure).
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.EnrollLegacyTemplate"
    enum="EnrollLegacyTemplateStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of EnrollLegacyTemplate operations. An
    EnrollLegacyTemplate will be called when cryptohomed wants to migrate a
    legacy fingerprint. This metric is recorded every time an
    EnrollLegacyTemplate operation completes (success or failure).
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.ListLegacyRecords"
    enum="ListLegacyRecordsStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of ListLegacyRecords operations. A
    ListLegacyRecords will be called when cryptohomed wants to migrate the
    legacy fingerprints. This metric is recorded every time a ListLegacyRecords
    operation completes (success or failure).
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.StartAuthSession"
    enum="StartAuthSessionStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of StartAuthSession operations. A StartAuthSession
    will be called when the user wants to authenticate with fingerprint. This
    metric is recorded every time a StartAuthSession operation completes
    (success or failure).
  </summary>
</histogram>

<histogram name="Fingerprint.OpStatus.StartEnrollSession"
    enum="StartEnrollSessionStatus" expires_after="2025-05-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the return status of StartEnrollSession operations. A
    StartEnrollSession will be called when the user wants to enroll a new
    fingerprint. This metric is recorded every time a StartEnrollSession
    operation completes (success or failure).
  </summary>
</histogram>

<histogram name="Fingerprint.SensorError.BadHwid" enum="BooleanError"
    expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times a bad Hardware ID is reported. This metric is
    reported in biod during the sensor initialization phase.
  </summary>
</histogram>

<histogram name="Fingerprint.SensorError.InitializationFailure"
    enum="BooleanError" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times an initialization failure is reported. This
    metric is reported in biod during the sensor initialization phase.
  </summary>
</histogram>

<histogram name="Fingerprint.SensorError.NoIrq" enum="BooleanError"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times no-IRQ hardware failure is reported. This metric
    is reported in biod during the sensor initialization phase.
  </summary>
</histogram>

<histogram name="Fingerprint.SensorError.SpiCommunication" enum="BooleanError"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times an error in SPI communication is reported. This
    metric is reported in biod during the sensor initialization phase.
  </summary>
</histogram>

<histogram name="Fingerprint.Session.RetrievePrimarySessionDuration" units="ms"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time it took SessionManager to respond to
    RetrievePrimarySession DBus method call.
  </summary>
</histogram>

<histogram name="Fingerprint.Session.RetrievePrimarySessionResult"
    enum="FingerprintRetrievePrimarySessionResult" expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of retrieving primary session when Biometrics Daemon starts or
    user logs in.

    Retrieving primary session is successful when Session Manager responds to
    RetrievePrimarySession DBus method call and the response was successfully
    parsed. It means that success is reported also when user is not logged in.
  </summary>
</histogram>

<histogram name="Fingerprint.SetContext.Success" enum="BooleanSuccess"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Whether setting FPMCU mode succeeded.</summary>
</histogram>

<histogram name="Fingerprint.Unlock.AttemptsCountBeforeSuccess" units="count"
    expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of fingerprint attempts until successful screen unlock.

    A count of 0 means that the user unlocked the screen on the first attempt.
    The maximum number of unlock attempts is governed by kMaximumUnlockAttempts,
    such that this value must be less than the max.

    This is related to Fingerprint.Unlock.RecentAttemptsCountBeforeSuccess.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.AuthSuccessful" enum="BooleanSuccess"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of times that the fingerprint match successfully vs.
    rejected.

    This is recorded in the same location as Fingerprint.Unlock.Result. When the
    Fingerprint.Unlock.Result is success, AuthSuccessful reports true, otherwise
    AuthSuccessful reports false.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.EnrolledFingerCount" units="count"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of fingers enrolled by the user.

    This metric is reported in biod when the first user logs in. It is not
    reported when a secondary user logs in, nor when all users log-off, nor when
    the primary user uses fingerprint unlock. It may be reported again if
    session_manage crashes.

    This metric is emitted in SendStatsOnLogin() along with
    Fingerprint.UnlockEnabled.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.Match.PositiveMatchSecretCorrect"
    enum="BooleanCorrect" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the hash of the positive match secret read from FPMCU matches the
    record.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.MatchIgnoredDueToPowerButtonPress"
    enum="BooleanIgnored" expires_after="2024-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS only. Record when a fingerprint touch was ignored due to parallel
    power button press. Fingerprint matches will be ignored for a duration of
    kAuthIgnoreTimeoutmsecs (1000 ms) after each power button press. This only
    applies to fingerprint sensors that reside on a power button.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.PartialAttemptsBeforeSuccess"
    units="attempts" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of partial fingerprint attempts until successful result is
    reported in biod. Partial attempts refers to the &quot;low coverage&quot;
    error, which means that the sensor is only partially covered with a finger.
    It often occurs when the user just dropped their finger onto the sensor. We
    expect the user to adjust their finger position soon after that, so instead
    of reporting an error biod silently allows up to 20 retries for this kind of
    error. We want to observe in average how many partial attempts are needed
    before successfully matching.

    A count of 0 means that the fingerprint match attempt is successful without
    any preceding partial matches. The maximum number of partial attempts is
    governed by kMaxPartialAttempts, such that this value must be less than the
    max.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.ReadPositiveMatchSecret.Success"
    enum="BooleanSuccess" expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS Only. After a positive fingerprint match has been identified,
    record when a positive match secret is read from FPMCU. Note that this does
    not indicate that the match was was validated, only that the secret was
    read. Fingerprint.Unlock.Match.PositiveMatchSecretCorrect may be used to
    track validation.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.RecentAttemptsCountBeforeSuccess"
    units="attempts" expires_after="2024-11-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of recent fingerprint attempts until successful screen
    unlock. Recent attempts are defined as happening within 3 seconds from each
    others. The goal is to count intentional attempt to unlock the device and
    exclude incidental touches of the fingerprint sensor.

    A count of 0 means that the user unlocked the screen on the first attempt.
    The maximum number of unlock attempts is governed by kMaximumUnlockAttempts,
    such that this value must be less than the max.

    This is related to Fingerprint.Unlock.AttemptsCountBeforeSuccess.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.RecordFormatVersion"
    enum="FingerprintRecordFormatVersion" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Format version of a fingerprint template record read from storage. ChromeOS
    Only. Records the format version of each fingerprint template record prior
    to uploading to the FPMCU. Format version will not be recorded if there are
    no available record slots.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.Result" enum="FingerprintUnlockResult"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the result of the fingerprint authentication attempt on the lock
    screen.
  </summary>
</histogram>

<histogram name="Fingerprint.Unlock.{Outcome}.Duration.{Interval}" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time it took {Interval} in the '{Outcome}' case.
  </summary>
  <token key="Outcome">
    <variant name="Match" summary="match"/>
    <variant name="NoMatch" summary="no-match"/>
  </token>
  <token key="Interval">
    <variant name="Capture" summary="to capture the fingerprint image"/>
    <variant name="Matcher" summary="to run the matcher"/>
    <variant name="Overall"
        summary="between the detection of the finger and the match/no-match
                 event being sent to the Application Processor(AP)"/>
  </token>
</histogram>

<histogram name="Fingerprint.UnlockEnabled" enum="BooleanEnabled"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Indicates whether at least one finger is enrolled, which effectively permits
    fingerprint unlock.

    This metric is reported in biod when the first user logs in. It is not
    reported when a secondary user logs in, nor when all users log-off, nor when
    the primary user uses fingerprint unlock. It may be reported again if
    session_manage crashes. It does not take into account if policy has
    subsequently disabled fingerprint unlock.

    This metric is emitted in SendStatsOnLogin() along with
    Fingerprint.Unlock.EnrolledFingerCount.
  </summary>
</histogram>

<histogram name="Fingerprint.Updater.Reason" enum="FingerprintUpdaterReason"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the fingerprint firmware updater's reason(s) for re-flashing.
  </summary>
</histogram>

<histogram name="Fingerprint.Updater.Status" enum="FingerprintUpdaterStatus"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Tracks the fingerprint firmware updater's overall status.</summary>
</histogram>

<histogram name="Fingerprint.Updater.{Outcome}.Duration.Overall" units="ms"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the total time it takes to run the fingerprint firmware updater
    when an update was {Outcome}.
  </summary>
  <token key="Outcome">
    <variant name="NoUpdate" summary="not necessary"/>
    <variant name="Update" summary="necessary"/>
  </token>
</histogram>

<histogram name="Fingerprint.{ContextFunction}" enum="FingerprintSensorMode"
    expires_after="2025-05-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The mode the FPMCU was in when we {ContextFunction}.

    See the CrosFpDevice::SetContext and CrosFpDevice::ResetContext functions
    for more information.

    Related metrics are Fingerprint.Reset.ResetContextMode,
    Fingerprint.SetContext.SetContextMode, and Fingerprint.SetContext.Success.
  </summary>
  <token key="ContextFunction">
    <variant name="Reset.ResetContextMode" summary="reset context"/>
    <variant name="SetContext.SetContextMode" summary="set its context"/>
  </token>
</histogram>

</histograms>

</histogram-configuration>