<!--
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 Platform 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
chromium-metrics-reviews@google.com.
-->

<histogram-configuration>

<histograms>

<histogram name="Platform.AsvGroup" units="units" expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS (ARM Chromebooks using Exynos 5250 only) Adaptive Support Voltage
    Group, recorded once per bootup. Indicates which &quot;bin&quot; the SoC is
    part of, which sets the voltage that different rails on the system will run
    at. The values 0-11 are valid. A value of 12 indicates an error parsing
    dmesg and should be investigated. See also Platform.LotIdEnum.
  </summary>
</histogram>

<histogram name="Platform.BatteryAbsent" enum="BooleanAbsent"
    expires_after="M77">
  <owner>cernekee@chromium.org</owner>
  <summary>
    Indicates whether the kernel's ACPI Smart Battery System driver logged an
    error trying to find the battery on boot.
  </summary>
</histogram>

<histogram name="Platform.Bootlockbox.AvailabilityAtStart"
    enum="BootlockboxAvailability" expires_after="2023-10-24">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Record the bootlockbox space availability when bootlockbox started.
  </summary>
</histogram>

<histogram name="Platform.BootMode.DevSwitch"
    enum="Platform.BootMode.SwitchStatus" expires_after="2022-04-03">
  <owner>dossym@chromium.org</owner>
  <summary>
    Indicates the status of the developer switch on Chrome OS hardware. The
    developer switch allows users to run their own code on the device.
  </summary>
</histogram>

<histogram name="Platform.BootMode.FirmwareWriteProtect"
    enum="Platform.BootMode.FirmwareWriteProtect" expires_after="2022-04-17">
  <owner>dossym@chromium.org</owner>
  <summary>
    On Chrome OS hardware, indicates whether flash write protection is enabled
    for the firmware indicated by the histogram suffix.
  </summary>
</histogram>

<histogram name="Platform.BootMode.WriteProtectSwitch"
    enum="Platform.BootMode.SwitchStatus" expires_after="2021-09-05">
  <owner>dossym@chromium.org</owner>
  <summary>
    Indicates the status of the hardware write protect switch on Chrome OS
    hardware. The write protect switch protects firmware from being rewritten.
  </summary>
</histogram>

<histogram name="Platform.BootSectorsRead" units="units"
    expires_after="2021-07-02">
  <owner>sonnyrao@chromium.org</owner>
  <owner>chromeos-performance@google.com</owner>
  <summary>
    Chrome OS number of disk sectors read at boot from kernel start to
    login-prompt-ready.
  </summary>
</histogram>

<histogram name="Platform.BootSectorsWritten" units="units"
    expires_after="2021-07-02">
  <owner>sonnyrao@chromium.org</owner>
  <owner>chromeos-performance@google.com</owner>
  <summary>
    Chrome OS number of disk sectors written at boot from kernel start to
    login-prompt-ready.
  </summary>
</histogram>

<histogram name="Platform.Chaps.ReinitializingToken"
    enum="ChapsReinitializingToken" expires_after="2024-03-10">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the status code when Chaps needs to reinitializing token.
  </summary>
</histogram>

<histogram name="Platform.Chaps.Session.Decrypt" enum="ChapsSessionStatus"
    expires_after="2024-03-10">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps session decrypt operation. The
    return code is defined in pkcs11 specification. There is exactly one sample
    logged for every chaps session decrypt operation.
  </summary>
</histogram>

<histogram name="Platform.Chaps.Session.Digest" enum="ChapsSessionStatus"
    expires_after="2023-10-25">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps session digest operation. The
    return code is defined in pkcs11 specification. There is exactly one sample
    logged for every chaps session digest operation.
  </summary>
</histogram>

<histogram name="Platform.Chaps.Session.Encrypt" enum="ChapsSessionStatus"
    expires_after="2024-02-25">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps session encrypt operation. The
    return code is defined in pkcs11 specification. There is exactly one sample
    logged for every chaps session encrypt operation.
  </summary>
</histogram>

<histogram name="Platform.Chaps.Session.Sign" enum="ChapsSessionStatus"
    expires_after="2024-03-10">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps session sign operation. The
    return code is defined in pkcs11 specification. There is exactly one sample
    logged for every chaps session sign operation.
  </summary>
</histogram>

<histogram name="Platform.Chaps.Session.Verify" enum="ChapsSessionStatus"
    expires_after="2023-10-25">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps session verify operation. The
    return code is defined in pkcs11 specification. There is exactly one sample
    logged for every chaps session verify operation.
  </summary>
</histogram>

<histogram name="Platform.Chaps.TokenManager.LoadToken"
    enum="TokenManagerStatus" expires_after="2024-03-10">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps token manager load token
    operation. There is exactly one sample logged for every call to
    SlotManagerImpl::LoadToken().
  </summary>
</histogram>

<histogram name="Platform.Chaps.TokenManager.UnloadToken"
    enum="TokenManagerStatus" expires_after="2024-02-05">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the return value of a chaps token manager unload token
    operation. There is exactly one sample logged for every call to
    SlotManagerImpl::UnloadToken().
  </summary>
</histogram>

<histogram name="Platform.Chaps.TPMAvailability" enum="ChapsTPMAvailability"
    expires_after="2024-03-10">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>Each sample is the TPM Availability status.</summary>
</histogram>

<histogram name="Platform.CompressedSwapSize" units="MB"
    expires_after="2021-11-07">
  <owner>sonnyrao@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Chrome OS size of allocated swap area in megabytes (before compression)
  </summary>
</histogram>

<histogram name="Platform.CrashCollector.AddWeightResult"
    enum="CrosCrashCollectorAddWeightResult" expires_after="2024-09-01">
  <owner>mutexlox@google.com</owner>
  <owner>kendraketsui@google.com</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    (ChromeOS only) An enum indicating the reasons why adding a weight to crash
    reports succeeded or failed. This is recorded after each crash with
    client-side weighting -- most commonly, those detected by anomaly_detector.
    Specifically, these metrics are recorded in
    CrashCollector::AddCrashMetaWeight() and
    CrashCollector::AddCrashMetaUploadData().
  </summary>
</histogram>

<histogram name="Platform.CrOS.CrashSenderRemoveReason"
    enum="CrosCrashSenderRemoveReason" expires_after="2024-07-10">
  <owner>iby@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    (Chrome OS only) An enum indicating the reasons for removal of crash reports
    on devices. Generally, we'll remove crash reports after successfully sending
    them, but there are other reasons for removal (e.g. if the metadata file was
    malformed). These should be rare, but bugs in the crash reporting system may
    cause us to start removing crashes before sending them more often. This
    metric is intended to monitor crash reporting system health.
  </summary>
</histogram>

<histogram name="Platform.CrOSEvent" enum="CrosEventEnum" expires_after="never">
<!-- expires-never: Used by the core CrOS platform with individual buckets added
     and removed as makes sense. -->

<!-- https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/metrics/OWNERS -->

  <owner>iby@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>vapier@chromium.org</owner>
  <summary>
    Generic event of interest from Chrome OS. Intended mainly to help assess the
    frequency of rare error conditions.
  </summary>
</histogram>

<histogram name="Platform.CumulativeCpuTime" units="seconds"
    expires_after="M78">
  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <summary>
    Total CPU time accumulated since the last version update. Reported at most
    once a day.
  </summary>
</histogram>

<histogram name="Platform.DailyUseTime" units="seconds" expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Total use time (device ON and not asleep) in the previous day, or the most
    recent day the device was in use. Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.ActivePercent" units="%"
    expires_after="2024-02-25">
  <owner>fshao@chromium.org</owner>
  <owner>phoenixshen@chromium.org</owner>
  <owner>chromeos-kukui@google.com</owner>
  <summary>
    Ratio of time a detachable base keyboard is active, i.e. when the USB
    interface is not auto-suspended. Reported every 30 seconds when the base is
    connected.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.AttachedOnBoot" enum="BooleanAttached"
    expires_after="2024-02-25">
  <owner>fshao@chromium.org</owner>
  <owner>phoenixshen@chromium.org</owner>
  <owner>chromeos-kukui@google.com</owner>
  <summary>
    For devices with a detachable base: whether or not the base is connected on
    boot. Recorded by upstart task on boot.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.PairResult"
    enum="DetachableBasePairResult" expires_after="2022-04-24">
  <owner>fshao@chromium.org</owner>
  <owner>phoenixshen@chromium.org</owner>
  <owner>chromeos-kukui@google.com</owner>
  <summary>Result of a detachable base pair operation.</summary>
</histogram>

<histogram name="Platform.DetachableBase.PendingRWUpdate"
    enum="DetachableBasePendingRWUpdate" expires_after="2022-04-24">
  <owner>fshao@chromium.org</owner>
  <owner>phoenixshen@chromium.org</owner>
  <owner>chromeos-kukui@google.com</owner>
  <summary>
    Detachable base firmware updates can be configured to only occur on boot. In
    this mode, any update will be considered &quot;pending&quot; until the
    system is rebooted, at which point the update may take place. Every time a
    detachable base is connected to the system, a metric representing the
    pending update status is recorded. Its possible values are as follows: (0)
    communication error; (1) no update available; (2) critical update available;
    or (3) non-critical update available. The definition of &quot;critical&quot;
    is up to the software performing updates, and would typically be used in the
    case of a security issue, or broken functionality in a previous firmware
    version.
  </summary>
</histogram>

<histogram name="Platform.DetachableBase.ROUpdateResult"
    enum="DetachableBaseROUpdateResult" expires_after="2022-04-24">
  <owner>fshao@chromium.org</owner>
  <owner>phoenixshen@chromium.org</owner>
  <owner>chromeos-kukui@google.com</owner>
  <summary>Result of a detachable base RO firmware update.</summary>
</histogram>

<histogram name="Platform.DetachableBase.RWUpdateResult"
    enum="DetachableBaseRWUpdateResult" expires_after="2022-04-24">
  <owner>fshao@chromium.org</owner>
  <owner>phoenixshen@chromium.org</owner>
  <owner>chromeos-kukui@google.com</owner>
  <summary>Result of a detachable base RW firmware update.</summary>
</histogram>

<histogram name="Platform.Discod.AutoWbBwUtilization" units="%"
    expires_after="2024-08-07">
  <owner>dlunev@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Emits when io-burst-triggered Write Boost expires. Specifies how well the
    Write Boost is utilized, i.e. amount of cycles with bandwidth over trigger
    threshold divided by total amount of cycles Write Boost was enabled.
  </summary>
</histogram>

<histogram name="Platform.Discod.AutoWbOnCycles" units="cycles"
    expires_after="2024-08-07">
  <owner>dlunev@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Emits when io-burst-triggered Write Boost expires. Specifies length of
    io-burst-triggered Write Booster period.
  </summary>
</histogram>

<histogram name="Platform.Discod.BurstResult" enum="DiscodBurstResult"
    expires_after="2024-08-07">
  <owner>dlunev@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Emits when the io-burst ends or when the burst triggers WriteBoost.
    Specifies if the burst resulted in enabling Write Booster.
  </summary>
</histogram>

<histogram name="Platform.Discod.ExplicitWbBwUtilization" units="%"
    expires_after="2024-08-07">
  <owner>dlunev@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Emits when application-triggered Write Boost expires. Specifies how well the
    Write Boost is utilized, i.e. amount of cycles with bandwidth over trigger
    threshold divided by total amount of cycles Write Boost was enabled.
  </summary>
</histogram>

<histogram name="Platform.Discod.ExplicitWbOnCycles" units="cycles"
    expires_after="2024-08-07">
  <owner>dlunev@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Emits when applications-triggered Write Boost expires. Specifies length of
    application-triggered Write Booster period.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.NumUserHomeDirectories"
    units="home directories" expires_after="2024-02-25">
  <owner>achuith@chromium.org</owner>
  <owner>tls@chromium.org</owner>
  <summary>
    Number of users home directories on the device. Logged once a day.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.OldestUserOnDevice" units="days"
    expires_after="2022-08-01">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Number of days between now and the last login of the device's least recent
    user. Logged once a day, if disk usage is high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.UsersOnDevice" units="units"
    expires_after="M85">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>
    Number of user home dirs on device. Logged once a day, if disk usage is
    high.
  </summary>
</histogram>

<histogram name="Platform.DiskUsageChronos" units="KB"
    expires_after="2024-06-01">
  <owner>sarthakkukreti@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Chrome OS KB in use in the /home/chronos filesystem tree. Logged once a day
    during log file cleanup. Warning: this histogram was expired from 2022-04-10
    to 2023-06-01; data may be missing.
  </summary>
</histogram>

<histogram name="Platform.DiskUsageVar" units="KB" expires_after="2024-06-01">
  <owner>sarthakkukreti@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Chrome OS KB in use in the /var filesystem tree. Logged once a day during
    log file cleanup. Warning: this histogram was expired from 2022-05-01 to
    2023-06-01; data may be missing.
  </summary>
</histogram>

<histogram name="Platform.DlcService.InstallResult"
    enum="DlcService.InstallResult" expires_after="2024-02-04">
  <owner>kimjae@chromium.org</owner>
  <owner>chromeos-core-services@google.com</owner>
  <summary>
    The result of an attempt to Install a DLC package. DLCs are ChromiumOS
    Software packages that are installed in the stateful partition.
  </summary>
</histogram>

<histogram name="Platform.DlcService.UninstallResult"
    enum="DlcService.UninstallResult" expires_after="2024-02-04">
  <owner>kimjae@chromium.org</owner>
  <owner>chromeos-core-services@google.com</owner>
  <summary>
    The result of an attempt to Uninstall a DLC package. DLCs are ChromiumOS
    Software packages that are installed in the stateful partition.
  </summary>
</histogram>

<histogram name="Platform.Emmc.LifeUsed" enum="EmmcLifeUsed"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    eMMC [5.0] Device lifetime estimation for flash. This field provides an
    estimated indication about the device lifetime that is reflected by the
    averaged wear out of memory of a given type relative to its maximum
    estimated lifetime.
  </summary>
</histogram>

<histogram name="Platform.ExternalMetrics.SamplesRead" units="count"
    expires_after="2024-02-04">
  <owner>iby@google.com</owner>
  <owner>mutexlox@google.com</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    On ChromeOS, number of external metrics samples read in from the platform.
    Emitted once every 30 seconds. If this is too large (over 100,000), we will
    silently lose metrics. Additionally, 100,000 is the largest number we'll
    ever record here: we stop counting when we hit 100,000.
  </summary>
</histogram>

<histogram name="Platform.Featured.BootAttemptsSinceLastSafeSeed"
    units="number of boot attempts" expires_after="2024-10-06">
  <owner>kendraketsui@google.com</owner>
  <owner>mutexlox@google.com</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Records number of boot attempts on a device since receiving a variations
    safe seed from Chrome. This value is reported every time a device boots.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.ErrorCount" units="errors"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Number of file system errors, as reported by dumpe2fs &quot;FS Error
    count&quot; field. Reported once per boot.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.FsckNeeded" enum="Boolean"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    True when kernel reports that the file system needs deep recovery. File
    system has corruption the kernel can not fix by itself. Reported once per
    boot.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.RecoveryNeeded" enum="Boolean"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    True when kernel reports that the file system needed recovery at boot. It
    indicates the filesytem was not properly unmounted, but was recovered.
    Reported once per boot.
  </summary>
</histogram>

<histogram name="Platform.Firmware.Mismatch" enum="BooleanDetected"
    expires_after="2024-02-04">
  <owner>yuanpengni@chromium.org</owner>
  <owner>chromeos-core-services@google.com</owner>
  <summary>
    Records if the system firmware mismatched OS bundled firmware. Reported once
    per boot by dev_debug_vboot.
  </summary>
</histogram>

<histogram name="Platform.FlexHwis.PermissionCheckResult"
    enum="ChromeOSRevenHwisPermission" expires_after="2024-08-03">
  <owner>tinghaolin@google.com</owner>
  <owner>chromeos-flex-eng@google.com</owner>
  <summary>
    Result of checking if the device has permission to send hardware data and
    whether it is due to enabled policies or end-user opt-in.

    When a user logs in to a ChromeOS Flex device, hardware data transmission
    and related checks will be initiated. ChromeOS Flex Hardware Information
    Service (flex_hwis) checks if the device is authorized to send hardware data
    to the server. If the device is managed, management policies will be
    checked. If the device is unmanaged, the service will check if consent has
    been granted via the OOBE or settings screen before sending any data. Once
    the hardware data has been successfully transmitted to the server, no
    further transmission or related checks will be performed for the next 24
    hours.
  </summary>
</histogram>

<histogram name="Platform.FlexHwis.ServerPostResult" enum="BooleanSuccess"
    expires_after="2024-08-03">
  <owner>tinghaolin@google.com</owner>
  <owner>chromeos-flex-eng@google.com</owner>
  <summary>
    Result of checking if the flex_hwis utility successfully calls POST API to
    create data.

    When a user logs in to a ChromeOS Flex device, hardware data transmission
    and related checks will be initiated. In ChromeOS Flex Hardware Information
    Service (flex_hwis), each device has a unique identifier. If the unique
    identifier was just generated by the service client side, the service will
    then call the POST API to create the data slot on the server side and record
    whether the API request was successful. Once the hardware data has been
    successfully transmitted to the server, no further transmission or related
    checks will be performed for the next 24 hours.
  </summary>
</histogram>

<histogram name="Platform.FlexHwis.ServerPutResult" enum="BooleanSuccess"
    expires_after="2024-08-03">
  <owner>tinghaolin@google.com</owner>
  <owner>chromeos-flex-eng@google.com</owner>
  <summary>
    Result of checking if the flex_hwis utility successfully calls PUT API to
    update data.

    When a user logs in to a ChromeOS Flex device, hardware data transmission
    and related checks will be initiated. In ChromeOS Flex Hardware Information
    Service (flex_hwis), each device has a unique identifier. If the unique
    identifier already exists on the service client side, the service will then
    call the PUT API to update the data slot on the server side and record
    whether the API request was successful. Once the hardware data has been
    successfully transmitted to the server, no further transmission or related
    checks will be performed for the next 24 hours.
  </summary>
</histogram>

<histogram name="Platform.Fwupd.ActivateStatus" enum="FwupdReturnValue"
    expires_after="2023-11-12">
  <owner>campello@google.com</owner>
  <owner>chromeos-fwupd@google.com</owner>
  <summary>
    Indicates the return value of a firmware activation operation via fwupd.
    Reported once per activation operation.
  </summary>
</histogram>

<histogram name="Platform.Fwupd.UpdateDuration" units="seconds"
    expires_after="2023-11-12">
  <owner>campello@google.com</owner>
  <owner>chromeos-fwupd@google.com</owner>
  <summary>
    Time elapsed during the firmware update operation. Sent after every
    sucessful update firmware operation via fwupd.
  </summary>
</histogram>

<histogram name="Platform.Fwupd.UpdateStatus" enum="FwupdReturnValue"
    expires_after="2023-11-12">
  <owner>campello@google.com</owner>
  <owner>chromeos-fwupd@google.com</owner>
  <summary>
    Indicates the return value of a firmware update operation via fwupd.
    Reported once per update operation.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.Abort" enum="CrosHibernateAbortReason"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The reason why an attempt to hibernate was aborted. Reported when a
    hibernation attempt is aborted.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.Abort.Errno" units="Linux errno"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The errno reported by Linux when the hibernate image can not be created or
    saved to storage. Recorded when the hibernate image can not be created or
    saved.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.AdditionalMemoryNeeded" units="MiB"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The difference between the amount of memory and swap available and the
    amount of space needed to successfully hibernate on ChromeOS devices when
    there is not enough memory available when hibernate is triggered. Recorded
    at hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.DroppedPagesWithZeroesPercent" units="%"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The percentage of pages that were dropped by the kernel from the hibernate
    image because their content was all zeroes. Recorded after a successful
    suspend to hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.Event" enum="CrosHibernateCycleEvent"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    Tracks the top level events of the hibernate cycle: suspend attempt/failure
    and resume attempt/success/failure. Reported at resume from hibernate or
    failure to hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.ExcessMemoryAvailable" units="MiB"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The difference between the amount of memory and swap available and the
    amount of space needed to successfully hibernate on ChromeOS devices when
    there is more memory available than needed when hibernate is triggered.
    Recorded at hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.FileSystem.Hibermeta.FileSystemStatus"
    enum="CrosHibernateFileSystemStatus" expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    Result of 'hibermeta' file system checks. Reported at resume from hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.HibernateDuration" units="hours"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    Time the system was hibernated. Reported at resume from hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.IO.ReadMainImage.Duration" units="seconds"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The duration in seconds spent moving in the hibernate image on ChromeOS
    devices. Reported at resume from hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.IO.ReadMainImage.Rate" units="MiB/s"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The rate in MiB/s we are moving the hibernate image on ChromeOS devices.
    Reported at resume from hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.IO.ReadMainImage.Size" units="KiB"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The size in KiB of the hibernate image we are moving on ChromeOS devices.
    Reported at resume from hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.IO.WriteHibernateImage.Duration"
    units="seconds" expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The duration in seconds spent writing the hibernate image on ChromeOS
    devices. Reported at hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.IO.WriteHibernateImage.Rate" units="MiB/s"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The rate in MiB/s we wrote the hibernate image on ChromeOS devices. Reported
    at hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.IO.WriteHibernateImage.Size" units="KiB"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The size in KiB of the hibernate image we wrote on ChromeOS devices.
    Reported at hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.MemoryAndSwapAvailable" units="MiB"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    ChromeOS total memory and swap available in MiB when hibernate is triggered.
    Reported at hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.MemoryAvailable" units="MiB"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    ChromeOS memory available in MiB when hibernate is triggered. Reported at
    hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.ResumeTime.HibernateResumeReady" units="ms"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The duration in milliseconds we waited for the HibernateResumeReady signal
    from powerd on ChromeOS devices. Reported at resume from hibernate.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.ResumeTime.KernelResume" units="ms"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The time it takes the hibernated kernel to resume/restore after being
    launched. Reported when hiberman flushes metrics at the completion of
    resume.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.ResumeTime.LoadImage" units="ms"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The time it takes to load the hibernate image from disk into the kernel.
    Reported when hiberman flushes metrics at the completion of resume.
  </summary>
</histogram>

<histogram name="Platform.Hibernate.ResumeTime.Total" units="ms"
    expires_after="2024-06-08">
  <owner>mka@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-hibernate@google.com</owner>
  <summary>
    The time between when hiberman receives the request to resume, and when the
    hibernated image has been restored. This represents an approximation of how
    long the user had to wait for a hibernate resume to complete after logging
    in. Reported when hiberman flushes metrics at the completion of resume.
  </summary>
</histogram>

<histogram name="Platform.IntelMaxMicroArchitecture"
    enum="IntelMaxMicroArchitecture" expires_after="2024-02-25">
  <owner>fbarchard@chromium.org</owner>
  <owner>pwnall@chromium.org</owner>
  <summary>
    The maximum supported micro-architecture on an Intel platform. This value is
    logged at program start time.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesDaily" units="count per day"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>grundler@chromium.org</owner>
  <owner>groeck@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of kernel crashes during the previous day, or the most recent day the
    device was in use. Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesPerActiveYear" units="count per year"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>grundler@chromium.org</owner>
  <owner>groeck@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of kernel crashes since the last OS update, normalized as number of
    crashes per year of active use (active use = device is ON and not asleep).
    Reported daily.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesPerCpuYear" units="count per CPU year"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>grundler@chromium.org</owner>
  <owner>groeck@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of kernel crashes since the last OS update, normalized as number
    crashes per year of CPU time. Reported daily.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesSinceUpdate" units="count"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>grundler@chromium.org</owner>
  <owner>groeck@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of kernel crashes since the last OS update, reported daily.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashesWeekly" units="count per week"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>grundler@chromium.org</owner>
  <owner>groeck@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of kernel crashes during the previous epoch-week, or the most recent
    epoch-week the device was in use. Reported at most once a week. Epoch-weeks
    divide the time in 7-day intervals starting at the UNIX epoch.
  </summary>
</histogram>

<histogram name="Platform.KernelCrashInterval" units="seconds"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>grundler@chromium.org</owner>
  <owner>groeck@chromium.org</owner>
  <owner>bgeffon@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Time elapsed between the last two kernel crashes. Sent after every kernel
    crash.
  </summary>
</histogram>

<histogram name="Platform.Libhwsec.RetryAction{Category}"
    enum="HwsecRetryActionEnum" expires_after="2024-02-20">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the result code of a libhwsec operation issued through
    libhwsec that belongs to {Category}. Success is 0. For the other error
    codes, see src/platform2/libhwsec/error/tpm_retry_action.h. Recorded when
    the libhwsec operation finished in the middleware.
  </summary>
  <token key="Category">
    <variant name="" summary="hwsec"/>
    <variant name=".Attestation" summary="Attestation"/>
    <variant name=".Attestation.IsQuoted" summary="Attestation::IsQuoted"/>
    <variant name=".Attestation.Quote" summary="Attestation::Quote"/>
    <variant name=".Config" summary="Config"/>
    <variant name=".Config.GetCurrentBootMode"
        summary="Config::GetCurrentBootMode"/>
    <variant name=".Config.IsCurrentUserSet"
        summary="Config::IsCurrentUserSet"/>
    <variant name=".Config.SetCurrentUser" summary="Config::SetCurrentUser"/>
    <variant name=".Config.ToOperationPolicy"
        summary="Config::ToOperationPolicy"/>
    <variant name=".DAMitigation" summary="DAMitigation"/>
    <variant name=".DAMitigation.GetStatus" summary="DAMitigation::GetStatus"/>
    <variant name=".DAMitigation.IsReady" summary="DAMitigation::IsReady"/>
    <variant name=".DAMitigation.Mitigate" summary="DAMitigation::Mitigate"/>
    <variant name=".Deriving" summary="Deriving"/>
    <variant name=".Deriving.Derive" summary="Deriving::Derive"/>
    <variant name=".Deriving.SecureDerive" summary="Deriving::SecureDerive"/>
    <variant name=".Encryption" summary="Encryption"/>
    <variant name=".Encryption.Decrypt" summary="Encryption::Decrypt"/>
    <variant name=".Encryption.Encrypt" summary="Encryption::Encrypt"/>
    <variant name=".KeyManagement" summary="KeyManagement"/>
    <variant name=".KeyManagement.CreateKey"
        summary="KeyManagement::CreateKey"/>
    <variant name=".KeyManagement.Flush" summary="KeyManagement::Flush"/>
    <variant name=".KeyManagement.GetECCPublicInfo"
        summary="KeyManagement::GetECCPublicInfo"/>
    <variant name=".KeyManagement.GetKeyHandle"
        summary="KeyManagement::GetKeyHandle"/>
    <variant name=".KeyManagement.GetPersistentKey"
        summary="KeyManagement::GetPersistentKey"/>
    <variant name=".KeyManagement.GetPolicyEndorsementKey"
        summary="KeyManagement::GetPolicyEndorsementKey"/>
    <variant name=".KeyManagement.GetPubkeyHash"
        summary="KeyManagement::GetPubkeyHash"/>
    <variant name=".KeyManagement.GetRSAPublicInfo"
        summary="KeyManagement::GetRSAPublicInfo"/>
    <variant name=".KeyManagement.GetSupportedAlgo"
        summary="KeyManagement::GetSupportedAlgo"/>
    <variant name=".KeyManagement.IsSupported"
        summary="KeyManagement::IsSupported"/>
    <variant name=".KeyManagement.LoadKey" summary="KeyManagement::LoadKey"/>
    <variant name=".KeyManagement.ReloadIfPossible"
        summary="KeyManagement::ReloadIfPossible"/>
    <variant name=".KeyManagement.SideLoadKey"
        summary="KeyManagement::SideLoadKey"/>
    <variant name=".KeyManagement.WrapECCKey"
        summary="KeyManagement::WrapECCKey"/>
    <variant name=".KeyManagement.WrapRSAKey"
        summary="KeyManagement::WrapRSAKey"/>
    <variant name=".PinWeaver" summary="PinWeaver"/>
    <variant name=".PinWeaver.BlockGeneratePk"
        summary="PinWeaver::BlockGeneratePk"/>
    <variant name=".PinWeaver.CheckCredential"
        summary="PinWeaver::CheckCredential"/>
    <variant name=".PinWeaver.GeneratePk" summary="PinWeaver::GeneratePk"/>
    <variant name=".PinWeaver.GetDelayInSeconds"
        summary="PinWeaver::GetDelayInSeconds"/>
    <variant name=".PinWeaver.GetDelaySchedule"
        summary="PinWeaver::GetDelaySchedule"/>
    <variant name=".PinWeaver.GetExpirationInSeconds"
        summary="PinWeaver::GetExpirationInSeconds"/>
    <variant name=".PinWeaver.GetLog" summary="PinWeaver::GetLog"/>
    <variant name=".PinWeaver.GetVersion" summary="PinWeaver::GetVersion"/>
    <variant name=".PinWeaver.GetWrongAuthAttempts"
        summary="PinWeaver::GetWrongAuthAttempts"/>
    <variant name=".PinWeaver.InsertCredential"
        summary="PinWeaver::InsertCredential"/>
    <variant name=".PinWeaver.InsertRateLimiter"
        summary="PinWeaver::InsertRateLimiter"/>
    <variant name=".PinWeaver.IsEnabled" summary="PinWeaver::IsEnabled"/>
    <variant name=".PinWeaver.RemoveCredential"
        summary="PinWeaver::RemoveCredential"/>
    <variant name=".PinWeaver.ReplayLogOperation"
        summary="PinWeaver::ReplayLogOperation"/>
    <variant name=".PinWeaver.Reset" summary="PinWeaver::Reset"/>
    <variant name=".PinWeaver.ResetCredential"
        summary="PinWeaver::ResetCredential"/>
    <variant name=".PinWeaver.StartBiometricsAuth"
        summary="PinWeaver::StartBiometricsAuth"/>
    <variant name=".Random" summary="Random"/>
    <variant name=".Random.RandomBlob" summary="Random::RandomBlob"/>
    <variant name=".Random.RandomSecureBlob"
        summary="Random::RandomSecureBlob"/>
    <variant name=".RecoveryCrypto" summary="RecoveryCrypto"/>
    <variant name=".RecoveryCrypto.EncryptEccPrivateKey"
        summary="RecoveryCrypto::EncryptEccPrivateKey"/>
    <variant name=".RecoveryCrypto.GenerateDiffieHellmanSharedSecret"
        summary="RecoveryCrypto::GenerateDiffieHellmanSharedSecret"/>
    <variant name=".RecoveryCrypto.GenerateKeyAuthValue"
        summary="RecoveryCrypto::GenerateKeyAuthValue"/>
    <variant name=".RecoveryCrypto.GenerateRsaKeyPair"
        summary="RecoveryCrypto::GenerateRsaKeyPair"/>
    <variant name=".RecoveryCrypto.SignRequestPayload"
        summary="RecoveryCrypto::SignRequestPayload"/>
    <variant name=".RoData" summary="RoData"/>
    <variant name=".RoData.Certify" summary="RoData::Certify"/>
    <variant name=".RoData.IsReady" summary="RoData::IsReady"/>
    <variant name=".RoData.Read" summary="RoData::Read"/>
    <variant name=".Sealing" summary="Sealing"/>
    <variant name=".Sealing.IsSupported" summary="Sealing::IsSupported"/>
    <variant name=".Sealing.PreloadSealedData"
        summary="Sealing::PreloadSealedData"/>
    <variant name=".Sealing.Seal" summary="Sealing::Seal"/>
    <variant name=".Sealing.Unseal" summary="Sealing::Unseal"/>
    <variant name=".SessionManagement" summary="SessionManagement"/>
    <variant name=".SessionManagement.FlushInvalidSessions"
        summary="SessionManagement::FlushInvalidSessions"/>
    <variant name=".SignatureSealing" summary="SignatureSealing"/>
    <variant name=".SignatureSealing.Challenge"
        summary="SignatureSealing::Challenge"/>
    <variant name=".SignatureSealing.Seal" summary="SignatureSealing::Seal"/>
    <variant name=".SignatureSealing.Unseal"
        summary="SignatureSealing::Unseal"/>
    <variant name=".Signing" summary="Signing"/>
    <variant name=".Signing.RawSign" summary="Signing::RawSign"/>
    <variant name=".Signing.Sign" summary="Signing::Sign"/>
    <variant name=".Signing.Verify" summary="Signing::Verify"/>
    <variant name=".State" summary="State"/>
    <variant name=".State.IsEnabled" summary="State::IsEnabled"/>
    <variant name=".State.IsReady" summary="State::IsReady"/>
    <variant name=".State.Prepare" summary="State::Prepare"/>
    <variant name=".State.WaitUntilReady" summary="State::WaitUntilReady"/>
    <variant name=".Storage" summary="Storage"/>
    <variant name=".Storage.Destroy" summary="Storage::Destroy"/>
    <variant name=".Storage.IsReady" summary="Storage::IsReady"/>
    <variant name=".Storage.IsWriteLocked" summary="Storage::IsWriteLocked"/>
    <variant name=".Storage.Load" summary="Storage::Load"/>
    <variant name=".Storage.Lock" summary="Storage::Lock"/>
    <variant name=".Storage.Prepare" summary="Storage::Prepare"/>
    <variant name=".Storage.Store" summary="Storage::Store"/>
    <variant name=".U2f" summary="U2f"/>
    <variant name=".U2f.Check" summary="U2f::Check"/>
    <variant name=".U2f.CheckUserPresenceOnly"
        summary="U2f::CheckUserPresenceOnly"/>
    <variant name=".U2f.CorpAttest" summary="U2f::CorpAttest"/>
    <variant name=".U2f.G2fAttest" summary="U2f::G2fAttest"/>
    <variant name=".U2f.Generate" summary="U2f::Generate"/>
    <variant name=".U2f.GenerateUserPresenceOnly"
        summary="U2f::GenerateUserPresenceOnly"/>
    <variant name=".U2f.GetG2fAttestData" summary="U2f::GetG2fAttestData"/>
    <variant name=".U2f.Sign" summary="U2f::Sign"/>
    <variant name=".U2f.SignUserPresenceOnly"
        summary="U2f::SignUserPresenceOnly"/>
    <variant name=".Vendor" summary="Vendor"/>
    <variant name=".Vendor.DeclareTpmFirmwareStable"
        summary="Vendor::DeclareTpmFirmwareStable"/>
    <variant name=".Vendor.GetFamily" summary="Vendor::GetFamily"/>
    <variant name=".Vendor.GetFingerprint" summary="Vendor::GetFingerprint"/>
    <variant name=".Vendor.GetFirmwareVersion"
        summary="Vendor::GetFirmwareVersion"/>
    <variant name=".Vendor.GetIFXFieldUpgradeInfo"
        summary="Vendor::GetIFXFieldUpgradeInfo"/>
    <variant name=".Vendor.GetManufacturer" summary="Vendor::GetManufacturer"/>
    <variant name=".Vendor.GetRsuDeviceId" summary="Vendor::GetRsuDeviceId"/>
    <variant name=".Vendor.GetRwVersion" summary="Vendor::GetRwVersion"/>
    <variant name=".Vendor.GetSpecLevel" summary="Vendor::GetSpecLevel"/>
    <variant name=".Vendor.GetTpmModel" summary="Vendor::GetTpmModel"/>
    <variant name=".Vendor.GetVendorSpecific"
        summary="Vendor::GetVendorSpecific"/>
    <variant name=".Vendor.IsSrkRocaVulnerable"
        summary="Vendor::IsSrkRocaVulnerable"/>
    <variant name=".Vendor.SendRawCommand" summary="Vendor::SendRawCommand"/>
    <variant name=".VersionAttestation" summary="VersionAttestation"/>
    <variant name=".VersionAttestation.AttestVersion"
        summary="VersionAttestation::AttestVersion"/>
  </token>
</histogram>

<histogram name="Platform.LotIdEnum" enum="Exynos5250LotIdEnum"
    expires_after="2018-08-30">
  <owner>Please list the metric's owners. Add more owner tags as needed.</owner>
  <summary>
    Chrome OS (ARM Chromebooks using Exynos 5250 only) indication about whether
    we're part of a special lot ID. Special lot IDs are groups of chips that
    have special case handling in the kernel for the Adaptive Support Voltage
    code (the normal logic doesn't work). See also Platform.AsvGroup. Note that
    fused devices are never part of a special lot (currently) and only some
    unfused lots are &quot;special&quot;.
  </summary>
</histogram>

<histogram name="Platform.Mem" units="%" expires_after="2022-07-02">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>sonnyrao@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Various memory usage % of total memory on Chrome OS devices (snapshotted
    every 30s). Warning: this histogram was expired from 2021-07-02 to 2022-01;
    data may be missing.
  </summary>
</histogram>

<histogram name="Platform.Meminfo" units="KB" expires_after="2024-03-17">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <owner>sonnyrao@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Various memory usage amount on Chrome OS devices (snapshotted every 30s).
  </summary>
</histogram>

<histogram name="Platform.Memory.ARC" units="MiB" expires_after="2024-02-04">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>bgeffon@chromium.org</owner>
  <owner>khmel@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory usage of all ARC and ARCVM processes in Chrome OS, reported every 10
    minutes.
  </summary>
</histogram>

<histogram name="Platform.Memory.Browser" units="MiB"
    expires_after="2024-02-11">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory usage of browser and helper processes (excluding GPU process and
    renderers) in Chrome OS, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.Memory.Daemons" units="MiB"
    expires_after="2024-02-20">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory usage of user-level daemons in Chrome OS, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.Memory.Gpu" units="MiB" expires_after="2024-02-20">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory usage of the GPU process in Chrome OS, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.Memory.Renderers" units="MiB"
    expires_after="2023-08-08">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory usage of renderer processes in Chrome OS, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.Memory.VMs" units="MiB" expires_after="2024-02-25">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory usage of VMs (crostini and others, except for ARCVM) in Chrome OS,
    reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon0" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory 1
    minute after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon1" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory 5
    minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon2" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory 30
    minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon3" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory
    150 minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MemuseAnon4" units="units" expires_after="M85">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Chrome OS total anonymous memory (active + inactive) as % of total memory
    750 minutes after boot.
  </summary>
</histogram>

<histogram name="Platform.MiniDiag.Launch" units="launches"
    expires_after="2024-02-11">
  <owner>roccochen@chromium.org</owner>
  <owner>chromeos-minidiag-eng@google.com</owner>
  <summary>
    Total number of launches of the MiniDiag (pre-boot diagnostic tool) since
    the last upload. This metrics is recorded right after booting into ChromeOS.
    This metrics leverages a coreboot command, elogtool, to retrieve the event
    log and count launch events.
  </summary>
</histogram>

<histogram name="Platform.MiniDiag.OpenDuration" units="seconds"
    expires_after="2023-12-10">
  <owner>roccochen@chromium.org</owner>
  <owner>chromeos-minidiag-eng@google.com</owner>
  <summary>
    Records the duration that the MiniDiag (pre-boot diagnostic tool) is open.
    This metrics is recorded right after booting into ChromeOS. This metrics
    leverages a coreboot command, elogtool, to retrieve the event log and count
    launch events.
  </summary>
</histogram>

<histogram name="Platform.MiniDiag.{TestType}.OpenDuration" units="seconds"
    expires_after="2023-12-10">
  <owner>roccochen@chromium.org</owner>
  <owner>chromeos-minidiag-eng@google.com</owner>
  <summary>
    Test item-specific duration of the MiniDiag (pre-boot diagnostic tool) since
    the last upload. This metrics is recorded right after booting into ChromeOS.
    This metrics leverages a coreboot command, elogtool, to retrieve the event
    log and count launch events. The TestType is the same as
    cros_diagnostics_diag_types listed in coreboot/util/cbfstool/eventlog.c
    since all the data are parsed from them.
  </summary>
  <token key="TestType">
    <variant name="MemoryCheckFull"/>
    <variant name="MemoryCheckQuick"/>
    <variant name="StorageHealthInfo"/>
    <variant name="StorageSelfTestExtended"/>
    <variant name="StorageSelfTestShort"/>
  </token>
</histogram>

<histogram name="Platform.MiniDiag.{TestType}.Result" enum="MiniDiagResultType"
    expires_after="2023-12-10">
  <owner>roccochen@chromium.org</owner>
  <owner>chromeos-minidiag-eng@google.com</owner>
  <summary>
    Test item-specific results of the MiniDiag (pre-boot diagnostic tool) since
    the last upload. This metrics is recorded right after booting into ChromeOS.
    This metrics leverages a coreboot command, elogtool, to retrieve the event
    log and count launch events. The TestType and MiniDiagResultType are the
    same as cros_diagnostics_diag_types and cros_diagnostics_diag_results listed
    in coreboot/util/cbfstool/eventlog.c since all the data are parsed from
    them.
  </summary>
  <token key="TestType">
    <variant name="MemoryCheckFull"/>
    <variant name="MemoryCheckQuick"/>
    <variant name="StorageHealthInfo"/>
    <variant name="StorageSelfTestExtended"/>
    <variant name="StorageSelfTestShort"/>
  </token>
</histogram>

<histogram name="Platform.Missive.ClientEnqueueResult"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2024-02-04">
  <owner>lbaraz@chromium.org</owner>
  <owner>xuhong@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Recorded when missive clientlib calls ReportQueue::Enqueue to post an event
    to ERP. It counts occurrences of the call returning success or each possible
    error Status.
  </summary>
</histogram>

<histogram name="Platform.Missive.CpuUsage" units="%"
    expires_after="2024-03-20">
  <owner>xuhong@chromium.org</owner>
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    The percentage of CPU time that the Missive daemon has been using. The CPU
    usage is not expected to be high and any usage beyond 100% is considered to
    be in the overflow bucket. This is reported once every 10 minutes and only
    if the Missive daemon is running.
  </summary>
</histogram>

<histogram name="Platform.Missive.KeyDeliveryResult"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2024-07-10">
  <owner>jrhilke@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Recorded when missive recieves a response to its request for an encryption
    key from the server. Counts the success/failures of key requests.
  </summary>
</histogram>

<histogram name="Platform.Missive.MemoryUsage" units="0.1MiB"
    expires_after="2024-01-14">
  <owner>xuhong@chromium.org</owner>
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    The amount of memory that the Missive daemon has been using. This is
    reported once every 10 minutes and only if the Missive daemon is running.
  </summary>
</histogram>

<histogram name="Platform.Missive.MigrationStatus"
    enum="MissiveMigrationStatus" expires_after="2024-03-24">
  <owner>lbaraz@chromium.org</owner>
  <owner>xuhong@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Recorded when Missive runs the storage directory migration function (called
    each time when Missive starts). It counts the status of the migration.
  </summary>
</histogram>

<histogram name="Platform.Missive.ResourceExhaustedCase"
    enum="ResourceExhaustedCase" expires_after="2024-03-24">
  <owner>xuhong@chromium.org</owner>
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Counter of each case RESOURCE_EXHAUSTED error was returned by missive
    Storage to the caller. This is reported only when such error happens
    (rarely), and only if the Missive daemon is running.
  </summary>
</histogram>

<histogram name="Platform.Missive.StorageDegradationAmount" units="KiB"
    expires_after="2024-05-31">
  <owner>lbaraz@google.com</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Total amount of space freed by controlled degradation performed by Storage.
  </summary>
</histogram>

<histogram name="Platform.Missive.StorageQueueGenerationIdReset" enum="Boolean"
    expires_after="2024-01-31">
  <owner>vshenvi@google.com</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Would only be true. Recorded whenever the generation id is reset in the
    storage queue. The generation id is set up once during storage queue
    initialization using the metadata file that matches the last sequencing id
    used to track, deduplicate and confirm delivery by the server. The
    generation id is reset when this file is missing or corrupted and the
    sequencing is irreparably broken.
  </summary>
</histogram>

<histogram name="Platform.Missive.StorageUsage" units="MiB"
    expires_after="2024-03-17">
  <owner>xuhong@chromium.org</owner>
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    The amount of disk storage that the Missive daemon has been using for
    storing encrypted records. This is reported once every hour and only if the
    Missive daemon is running.
  </summary>
</histogram>

<histogram name="Platform.Missive.StorageUsageNonUploading" units="MiB"
    expires_after="2024-03-01">
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    The amount of disk storage that the Missive daemon has been using for
    storing encrypted records on devices that have not uploaded any data for the
    last 24 hours (could have updated the encryption key). This is reported once
    every hour and only if the Missive daemon is running.
  </summary>
</histogram>

<histogram name="Platform.Missive.UnusualEnqueueTimestamp" enum="Boolean"
    expires_after="2024-01-30">
  <owner>xuhong@chromium.org</owner>
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    Would only be true. Recorded whenever an unusual timestamp is encountered
    when enqueuing a record, which will be rejected.
  </summary>
</histogram>

<histogram name="Platform.Missive.UploadToStorageRate.{Priority}" units="%"
    expires_after="2024-03-01">
  <owner>lbaraz@chromium.org</owner>
  <owner>cros-reporting-team@google.com</owner>
  <summary>
    {Priority} upload size as a fraction of storage used. Recorded with every
    upload.
  </summary>
  <token key="Priority">
    <variant name="BACKGROUND_BATCH"/>
    <variant name="FAST_BATCH"/>
    <variant name="IMMEDIATE"/>
    <variant name="MANUAL_BATCH"/>
    <variant name="MANUAL_BATCH_LACROS"/>
    <variant name="SECURITY"/>
    <variant name="SLOW_BATCH"/>
  </token>
</histogram>

<histogram name="Platform.Modemfwd.CheckForWedgedModemResult"
    enum="ModemfwdCheckForWedgedModemResult" expires_after="2024-03-24">
  <owner>andrewlassalle@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>
    Result of the |CheckForWedgedModem| function. The function checks the modem
    state after modemfwd starts, and tries to recover the modem if the modem is
    non responsive. This function is only called once after boot, so a single
    value is emitted per boot.
  </summary>
</histogram>

<histogram name="Platform.Modemfwd.DlcInstallResult"
    enum="ModemfwdDlcInstallResult" expires_after="2024-02-25">
  <owner>andrewlassalle@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>
    Result of the DLC install action performed by modemfwd. Some device variants
    use a DLC to store their FW. When this DLC is installed, a metric is logged.
  </summary>
</histogram>

<histogram name="Platform.Modemfwd.DlcUninstallResult"
    enum="ModemfwdDlcUninstallResult" expires_after="2024-02-11">
  <owner>andrewlassalle@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>
    Result of each DLC uninstall action performed by modemfwd. Modemfwd will
    remove any modem DLCs that are not for the device's variant. Each uninstall
    will log a metric.
  </summary>
</histogram>

<histogram name="Platform.Modemfwd.FWInstallResult"
    enum="ModemfwdFWInstallResult" expires_after="2024-02-25">
  <owner>andrewlassalle@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>The result of each modem FW install attempt.</summary>
</histogram>

<histogram name="Platform.Modemfwd.FWInstallTime" units="seconds"
    expires_after="2023-06-17">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>
    Metric to track time taken by modemfwd helpers in seconds to flash the
    firmwares to modem. Values will be reported only for successful flashing
    cases as flashing times in case of failures could be misleading.
  </summary>
</histogram>

<histogram name="Platform.Modemfwd.FWUpdateLocation"
    enum="ModemfwdFWUpdateLocation" expires_after="2024-02-11">
  <owner>andrewlassalle@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>
    The location that modemfwd uses for the FW install. After modemfwd
    determines if a DLC will be used or not, a metric is logged with the
    location used.
  </summary>
</histogram>

<histogram name="Platform.Modemfwd.ModemRecoveryState"
    enum="ModemfwdModemRecoveryState" expires_after="2024-03-06">
  <owner>ujjwalpande@google.com</owner>
  <owner>cros-connectivity@google.com</owner>
  <summary>Report state of modem recovery operation.</summary>
</histogram>

<histogram name="Platform.MountEncrypted.EncryptionKeyStatus"
    enum="MountEncryptedEncryptionKeyStatus" expires_after="2024-03-17">
  <owner>apronin@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    File system encryption key status for the encrypted stateful file system on
    Chrome OS. The encryption key is the one that is used by the kernel to
    protect actual file contents on disk.
  </summary>
</histogram>

<histogram name="Platform.MountEncrypted.SystemKeyStatus"
    enum="MountEncryptedSystemKeyStatus" expires_after="2024-03-17">
  <owner>apronin@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Type/Origin of the system key used for the encrypted stateful file system on
    Chrome OS. This key is used to wrap the actual file system encryption key.
  </summary>
</histogram>

<histogram name="Platform.ReadSectorsLong" units="sectors per second"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Number of disk sectors per second read by Chrome OS in a long interval
    (currently 30s)
  </summary>
</histogram>

<histogram name="Platform.ReadSectorsShort" units="sectors per second"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Number of disk sectors per second read by Chrome OS in a short interval
    (currently 1s, sampled every 30s)
  </summary>
</histogram>

<histogram name="Platform.Resourced.MemoryNotificationCountTenMinutes"
    units="count" expires_after="2024-08-23">
  <owner>vovoy@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Memory notification count in 10 minutes, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.SATA.AvailableReservedSpace" units="%"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    The remaining reserved space (SMART 232). The value counts down typically
    from 100 to 0, sent at boot.
  </summary>
</histogram>

<histogram name="Platform.SATA.LogicalSectorsRead" units="512-byte sectors"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    The total number of 512-byte sectors written during the lifetime of the
    device, sent at boot.
  </summary>
</histogram>

<histogram name="Platform.SATA.LogicalSectorsWritten" units="512-byte sectors"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    The total number of 512-byte sectors written during the lifetime of the
    device, sent at boot.
  </summary>
</histogram>

<histogram name="Platform.SATA.PercentageUsed" units="%"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Percentage Used Endurance Indicator. A value of 0 indicates a new device, a
    value of 100 indicates the device is at the end of its lifespan as projected
    by the manufacturer. Values greater than 100 indicate the device is beyond
    the projected lifespan. Maximum value is 255, sent at boot.
  </summary>
</histogram>

<histogram name="Platform.Segmentation.FeatureLevel" units="level number"
    expires_after="2024-08-09">
  <owner>gwendal@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Records the feature level of the device. Recorded in every UMA upload.

    See libsegmentation in platform2 for context.
  </summary>
</histogram>

<histogram name="Platform.Segmentation.ScopeLevel"
    enum="FeatureManagementScopeLevel" expires_after="2024-08-09">
  <owner>gwendal@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Records the scope level of the device (Soft vs Hard Branded). Recorded in
    every UMA upload.

    See libsegmentation in platform2 for context.
  </summary>
</histogram>

<histogram name="Platform.SmartTransferErrors" units="units"
    expires_after="2024-01-14">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>Disk communication errors (SMART 199), sent at boot.</summary>
</histogram>

<histogram name="Platform.SmartUncorrectableErrors" units="units"
    expires_after="2024-08-07">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>Uncorrectable disk errors (SMART 187), sent at boot.</summary>
</histogram>

<histogram name="Platform.SpringChargerType" units="units" expires_after="M77">
  <owner>vpalatin@google.com</owner>
  <summary>
    USB device ID of the charger plugged into a Spring device (if any), sent
    once a minute. The Device ID is composed from the following 4 8-bit
    registers of the TSU6721 chip: ADC (07h), Device Type 3 (15h), Device Type 2
    (0Bh), Device Type 1 (0Ah). Device Type 1/2/3 is a bitmap and most of bits
    are mutually exclusive (excepted VBUS debounce). ADC is the 5-bit value of
    the ID pin, but for most types (as in Device Type), there are only one or
    two possible ID pin connections/values. The datasheet can be found here:
    http://www.ti.com/lit/ds/symlink/tsu6721.pdf.

    Note that different brand/models of the charger can have the same ID.
  </summary>
</histogram>

<histogram name="Platform.StatefulFormat" enum="StatefulFormat"
    expires_after="2024-02-04">
  <owner>sarthakkukreti@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>Chrome OS stateful partition format. Sampled once per boot.</summary>
</histogram>

<histogram name="Platform.StatefulFreeSpace" units="MB"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Chrome OS stateful partition space free. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.StatefulLifetimeWrites" units="GiB"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Chrome OS stateful partition lifetime writes. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.StatefulTrim.TimeBetweenTrim" units="hours"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    The amount of time in hours since the last trim when chromeos-trim triggers
    a trim for the stateful partition. The chromeos-trim script is run daily,
    but a trim is only triggered if the previous run was interrupted, the amount
    of writes since the last trim is greater than X% of the remaining space in
    stateful or we have not trimmed in 7 days. Reported at most once a day.
    Warning: this histogram was expired from 2022-10-21 to 2023-08-10; data may
    be missing.
  </summary>
</histogram>

<histogram name="Platform.StatefulTrim.TrimmedAmount" units="MiB"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    The amount of data in the stateful partition that is erased when
    chromeos-trim triggers a trim. The chromeos-trim script is run daily, but a
    trim is only triggered if the previous run was interrupted, the amount of
    writes since the last trim is greater than X% of the remaining space in
    stateful or we have not trimmed in 7 days. Reported at most once a day.
    Warning: this histogram was expired from 2022-10-21 to 2023-08-10; data may
    be missing.
  </summary>
</histogram>

<histogram name="Platform.StatefulUsage" units="%" expires_after="2022-04-10">
  <owner>achuith@chromium.org</owner>
  <owner>omrilio@chromium.org</owner>
  <summary>Chrome OS stateful partition usage level.</summary>
</histogram>

<histogram name="Platform.StatefulUsedSpace" units="GB"
    expires_after="2024-02-04">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Chrome OS stateful partition space used. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.StatefulWritesDaily" units="KiB"
    expires_after="2024-03-17">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Chrome OS stateful partition KiB writes per day. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.Storage.Flash.BadBlocks" units="units"
    expires_after="M85">
  <owner>dehrenberg@chromium.org</owner>
  <owner>cast-analytics@google.com</owner>
  <summary>
    The number of blocks marked bad in an MTD partition. This is relevant for
    devices with raw NAND flash, such as Chromecast. Sampled once daily, if the
    Chromecast is on for any significant length of time in the day.
  </summary>
</histogram>

<histogram name="Platform.Storage.Nvme.PercentageUsed" units="%"
    expires_after="2024-02-05">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Vendor specific estimate of the percentage of NVM subsystem life used based
    on the actual usage and the manufacturer's prediction of NVM life. A value
    of 100 indicates the estimated endurance has been consumed, but may not
    indicate a failure. Values can exceed 100, with percentages greater than 254
    represented as 255.
  </summary>
</histogram>

<histogram name="Platform.Storage.Ufs.LifeUsed" enum="EmmcLifeUsed"
    expires_after="2024-08-07">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    UFS Device life time estimation. This field provides an indication of the
    device life time based on the amount of performed program/erase cycles. The
    calculation is vendor specific.
  </summary>
</histogram>

<histogram name="Platform.StorageCapabilities"
    enum="InternalStorageCapabilities" expires_after="2024-08-15">
  <owner>dlunev@chromium.org</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Sparse histogram of internal storage device capabilities. Sampled once per
    boot.
  </summary>
</histogram>

<histogram name="Platform.SwapInDaily" units="pages" expires_after="2024-03-17">
  <owner>asavery@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>Number of pages swapped IN over a day, sampled daily.</summary>
</histogram>

<histogram name="Platform.SwapOutDaily" units="pages"
    expires_after="2024-03-17">
  <owner>asavery@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>Number of pages swapped OUT over a day, sampled daily.</summary>
</histogram>

<histogram name="Platform.TPM.ApRoVerificationTime" units="ms"
    expires_after="2024-02-25">
  <owner>granaghan@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Time in milliseconds AP RO verification took. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.AuthErrorCode" enum="TPMResultCodeEnum"
    expires_after="2024-03-17">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the result code of a TPM authorized command issued through
    tcsd. Success is 0. For the other error codes, see
    /usr/include/tss/tpm_error.h.
  </summary>
</histogram>

<histogram name="Platform.TPM.AuthFailCommand.Auth2Fail"
    enum="TPM12CommandOrdinal" expires_after="2024-02-25">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Reporting the TPM command ordinal that results in TPM_E_AUTH2FAIL code. Note
    that this is only applicable for TPM1.2. Warning: this histogram was expired
    from Oct 8, 2022 to June 26, 2023; data may be missing.
  </summary>
</histogram>

<histogram name="Platform.TPM.AuthFailCommand.AuthFail"
    enum="TPM12CommandOrdinal" expires_after="2023-12-26">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Reporting the TPM command ordinal that results in TPM_E_AUTHFAIL code. Note
    that this is only applicable for TPM1.2. Warning: this histogram was expired
    from Oct 8, 2022 to June 26, 2023; data may be missing.
  </summary>
</histogram>

<histogram name="Platform.TPM.DictionaryAttackCounter" units="units"
    expires_after="2024-03-17">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the value of the TPM dictionary attack counter reported at
    boot and hourly while running. Any non-zero value is unexpected.
  </summary>
</histogram>

<histogram name="Platform.TPM.DictionaryAttackResetStatus"
    enum="CrosTPMDictionaryAttackResetStatusEnum" expires_after="2024-03-10">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the status of an hourly attempt to reset the TPM dictionary
    attack counter.
  </summary>
</histogram>

<histogram name="Platform.TPM.ErrorCode" enum="TPMResultCodeEnum"
    expires_after="2024-03-17">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Each sample is the result code of a TPM command issued through tcsd. Success
    is 0. For the other error codes, see /usr/include/tss/tpm_error.h.
  </summary>
</histogram>

<histogram name="Platform.TPM.ExpandedApRoVerificationStatus"
    enum="ExpandedApRoVerificationStatus" expires_after="2024-02-25">
  <owner>granaghan@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    AP RO Verification status and detailed result. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.FilesystemInitTime" units="ms"
    expires_after="2024-02-25">
  <owner>granaghan@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Time in milliseconds filesystem initialization and scanning took. Captured
    every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.FilesystemUtilization" units="bytes"
    expires_after="2024-02-25">
  <owner>granaghan@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Number of bytes used by the filesystem. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.FirmwareUpdate.Result"
    enum="TPMFirmwareUpdateResult" expires_after="2024-02-04">
  <owner>apronin@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>Status of a complete TPM firmware update attempt.</summary>
</histogram>

<histogram name="Platform.TPM.HardwareAlerts" enum="PlatformTPMHardwareAlerts"
    expires_after="2024-02-25">
  <owner>anatol@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Trusted Platform Module hardware alerts that signal about the chip abnormal
    situation.
  </summary>
</histogram>

<histogram name="Platform.TPM.PowerWashResult" enum="TPMPowerWashResult"
    expires_after="2024-03-10">
  <owner>chenyian@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Report if TPM clear is success or not after a power wash. TPM should not be
    owned after the power wash.
  </summary>
</histogram>

<histogram name="Platform.TPM.TakeOwnershipResult"
    enum="TPMTakeOwnershipResult" expires_after="2024-02-04">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>
    Report the TPM ownership can be take or not for each TPM initialization
    process. The process usually happen at the first boot of device.
  </summary>
</histogram>

<histogram name="Platform.TPM.TimeToTakeOwnership" units="ms"
    expires_after="2024-02-25">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The amount of time for Chrome OS to take TPM ownership. Recorded when
    tpm_manager takes the ownership of TPM.
  </summary>
</histogram>

<histogram name="Platform.TPM.TpmManagerSecretStatus"
    enum="TpmManagerSecretStatus" expires_after="2024-02-25">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The status of the secrets that tpm manager holds.

    Warning: this histogram was expired from 2021-09-01 to 2022-06-14; data may
    be missing.
  </summary>
</histogram>

<histogram name="Platform.TPM.VersionFingerprint" enum="TPMVersionFingerprint"
    expires_after="2024-03-17">
  <owner>apronin@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Indicates a fingerprint of hardware + firmware versions for the TPM chip
    present in a Chrome OS device.
  </summary>
</histogram>

<histogram name="Platform.TPM1.CommandAndResponse.{Client}"
    enum="TPM1CommandAndResponse" expires_after="2024-02-20">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The TPM1 command and response code send from {Client} to trousers. The value
    is the encoding of 2 bytes command code and 2 bytes response code.
  </summary>
  <token key="Client">
    <variant name="Attestation"/>
    <variant name="Chaps"/>
    <variant name="Cryptohome"/>
    <variant name="TpmManager"/>
    <variant name="TrunksSend"/>
    <variant name="U2f"/>
    <variant name="Unknown"/>
    <variant name="Vtpm"/>
  </token>
</histogram>

<histogram name="Platform.TPM2.CommandAndResponse.{Client}"
    enum="TPM2CommandAndResponse" expires_after="2024-02-20">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The TPM2 command and response code send from {Client} to trunks. The value
    is the encoding of 2 bytes command code and 2 bytes response code.
  </summary>
  <token key="Client">
    <variant name="Attestation"/>
    <variant name="Chaps"/>
    <variant name="Cryptohome"/>
    <variant name="TpmManager"/>
    <variant name="TrunksSend"/>
    <variant name="U2f"/>
    <variant name="Unknown"/>
    <variant name="Vtpm"/>
  </token>
</histogram>

<histogram name="Platform.Trunks.FirstTimeoutWritingCommand"
    enum="TPMCommandCode" expires_after="2024-03-10">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>Command code of the first timeout writing TPM command</summary>
</histogram>

<histogram name="Platform.Trunks.FirstTimeoutWritingTime" units="seconds"
    expires_after="2024-03-17">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>System uptime when first timeout writing TPM command occurs</summary>
</histogram>

<histogram name="Platform.Trunks.RecoverableWriteErrorNo" enum="PopularOSErrno"
    expires_after="2024-02-04">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The write errno recovered after rebinding the TPM driver; recorded only once
    when trunks notices the write errno is gone after restart.
  </summary>
</histogram>

<histogram name="Platform.Trunks.TpmErrorCode" enum="TPMResponseCode"
    expires_after="2024-02-11">
  <owner>yich@google.com</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    Each sample is the result code of a TPM command issued through trunks. For
    the error codes, see src/platform2/trunks/tpm_generated.h.
  </summary>
</histogram>

<histogram name="Platform.Trunks.TransitionedWriteErrorNo"
    enum="PopularOSErrno" expires_after="2023-11-12">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The write errno changed after rebinding the TPM driver; recorded only once
    when trunks notices the write errno has changed after restart.
  </summary>
</histogram>

<histogram name="Platform.Trunks.UnrecoverableWriteErrorNo"
    enum="PopularOSErrno" expires_after="2024-02-04">
  <owner>chingkang@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    The sticky write errno after rebinding the TPM driver; recorded only once
    when trunks notices the write errno isn't changed after restart.
  </summary>
</histogram>

<histogram name="Platform.U2F.Command" enum="Cr50U2FCommands"
    expires_after="2024-02-25">
  <owner>hcyang@google.com</owner>
  <owner>cros-hwsec-userland-eng+uma@google.com</owner>
  <summary>Records occurrences of U2F commands sent to cr50.</summary>
</histogram>

<histogram name="Platform.UnaggregatedUsageTime" units="seconds"
    expires_after="2024-02-25">
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Use time (device ON and not asleep) in a particular period (approximately
    every five minutes). To compute usage time in a given period (e.g. a day),
    sum up all reported values of this metric for that period (day). As with
    other UMA metrics on CrOS, this will be uploaded roughly every half-hour.
    This will eventually supercede Platform.DailyUseTime, which has significant
    limitations (e.g. it may not report on the right day).
  </summary>
</histogram>

<histogram name="Platform.UnaggregatedUsageTimeTooBig" units="seconds"
    expires_after="2024-05-31">
  <owner>mutexlox@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Use time samples that would have gone to Platform.UnaggregatedUsageTime, but
    which are implausibly big. For example, we've seen individual samples of ~1
    billion seconds, and many more of over 1 million seconds, which are both far
    too large to be valid data. metrics_daemon records this metric whenever an
    individual 5-minute usage sample exceeds 2 hours (defined by
    kMaxAcceptableUnaggregatedUsageTime, in metrics_daemon.cc, in platform2).
  </summary>
</histogram>

<histogram name="Platform.UncleanShutdownsDaily" units="count per day"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of unclean OS shutdowns during the previous day, or the most recent
    day the device was in use. Specifically, the counter is incremented during
    boot if the OS did not shut down cleanly and the previous shutdown was not
    due to a kernel crash (kernel crashes are counted elsewere) and the previous
    shutdown did not occur while the device was suspended (failures while
    suspended are assumed to be the battery running down). Reported at most once
    a day.
  </summary>
</histogram>

<histogram name="Platform.UserCrashesDaily" units="count per day"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>semenzato@chromium.org</owner>
  <owner>bsimonnet@chromium.org</owner>
  <owner>iby@chromium.org</owner>
  <owner>mutexlox@chromium.org</owner>
  <owner>cros-telemetry@google.com</owner>
  <summary>
    Count of crashes (user) during the previous day, or the most recent day the
    device was in use. Reported at most once a day.
  </summary>
</histogram>

<histogram name="Platform.WiFiDeviceCount" units="wifi devices"
    expires_after="2023-12-01">
  <owner>norvez@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Sample collected 10s after boot, showing how many WiFi interfaces are
    present.
  </summary>
</histogram>

<histogram name="Platform.WiFiDisapppearedFromPCI" units="units"
    expires_after="2023-12-01">
  <owner>norvez@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Logged (with a constant value of 1) if a WiFi device experienced a PCI
    failure such that it is being removed from the system. Typically, Chrome OS
    will follow such a removal with an attempt to rescan the bus and recover
    device functionality. See also Platform.WiFiStatusAfterForcedPCIRescan for
    the result of such attempts.
  </summary>
</histogram>

<histogram name="Platform.WiFiStatusAfterForcedPCIRescan" enum="WiFiPCIStatus"
    expires_after="2023-12-01">
  <owner>norvez@chromium.org</owner>
  <owner>cros-network-metrics@google.com</owner>
  <summary>
    Shows the WiFi status after the PCI bus is rescanned to recover WiFi. The UI
    depends on shill noticing that wlan0 is back up, so the only happy case is
    one where shill recognizes wlan0 after the rescan completes.
  </summary>
</histogram>

<histogram name="Platform.WriteSectorsLong" units="sectors per second"
    expires_after="2023-10-27">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Number of disk sectors per second written by Chrome OS in a long interval
    (currently 30s)
  </summary>
</histogram>

<histogram name="Platform.WriteSectorsShort" units="sectors per second"
    expires_after="2024-03-03">
  <owner>gwendal@google.com</owner>
  <owner>chromeos-storage@google.com</owner>
  <summary>
    Number of disk sectors per second written by Chrome OS in a short interval
    (currently 1s, sampled every 30s)
  </summary>
</histogram>

<histogram name="Platform.ZramCompressedSize" units="MB"
    expires_after="2023-03-19">
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    Compressed swap size in megabytes. This is the actual amount of RAM used by
    the system to compress memory (i.e. after compression). Snapshot every 30s.
  </summary>
</histogram>

<histogram name="Platform.ZramCompressionRatioPercent" units="%"
    expires_after="2023-03-19">
  <owner>bgeffon@chromium.org</owner>
  <owner>chromeos-memory@google.com</owner>
  <summary>
    The ratio of compressed memory (zram) before and after compression when the
    denominator at least 1 MB. Ratios of interest are between 1 and 6 (typically
    between 2 and 3), and we express them as a percentage (between 100% and
    600%). The size of memory before compression includes zero-filled pages.
    Values close to 100% indicate low compression effectiveness. Snapshot every
    30s.
  </summary>
</histogram>

<histogram name="Platform.ZramIncompressiblePages" units="pages"
    expires_after="2021-03-06">
  <owner>asavery@chromium.org</owner>
  <owner>gwendal@chromium.org</owner>
  <summary>
    Number of incompressible pages stored in zram. A large number suggests lower
    compression effectiveness. Snapshot every 30s.
  </summary>
</histogram>

<histogram name="Platform.{GSC}.ARVStatus" enum="GscArvStatus"
    expires_after="2024-02-05">
  <owner>vbendeb@chromium.org</owner>
  <owner>ti50-core+uma@chromium.org</owner>
  <summary>
    A histogram of values representing AP RO verification state on ChromeOS
    devices in the field. The values are collected on each ChromeOS start up and
    are clustered in two ranges: 0..7 and 20..34, both ranges could grow.

    Cr50 and Ti50 are two generations of GSC (Google Security Chip), their AP RO
    verification states are named such that it is clear which particular chip
    version they refer to.
  </summary>
  <token key="GSC">
    <variant name="Cr50"/>
    <variant name="Ti50"/>
  </token>
</histogram>

<histogram name="Platform.{GSC}.BoardIdFlags" enum="Cr50BoardIdFlags"
    expires_after="2024-02-05">
  <owner>apronin@chromium.org</owner>
  <owner>vbendeb@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    A sparse histogram of values of Board ID flags programmed in GSC devices in
    the field. Board ID flags is a 32 bit field, and while there only are a few
    expected values, conceivably any bit combination could be encountered.
  </summary>
  <token key="GSC">
    <variant name="Cr50"/>
    <variant name="Ti50"/>
  </token>
</histogram>

<histogram name="Platform.{GSC}.BoardIdOfRlzMismatch" enum="Cr50CrosRlzCodes"
    expires_after="2024-02-05">
  <owner>vbendeb@chromium.org</owner>
  <owner>apronin@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    A sparse histogram of values indexed by 4 byte Board ID code programmed in
    GSC reported by devices where there is a mismatch between the RLZ code and
    the Board ID value programmed in the GSC.
  </summary>
  <token key="GSC">
    <variant name="Cr50"/>
    <variant name="Ti50"/>
  </token>
</histogram>

<histogram name="Platform.{GSC}.FlashLog" enum="Cr50FlashLogs"
    expires_after="2024-02-05">
  <owner>apronin@chromium.org</owner>
  <owner>vbendeb@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    A histogram of flash log event types collected from the GSC device. Log
    event type is an 8 bit value. This histogram does not allow to drill into
    particular log entries' contents, but allows to collect a general statistics
    of events. A script running on the Chrome OS device polls the GSC for new
    flash log events after every start up.
  </summary>
  <token key="GSC">
    <variant name="Cr50"/>
    <variant name="Ti50"/>
  </token>
</histogram>

<histogram name="Platform.{GSC}.MatchingBoardId" enum="Cr50CrosRlzCodes"
    expires_after="2024-02-05">
  <owner>vbendeb@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    A sparse histogram of values indexed by 4 byte Board ID code programmed in
    GSC, reported by devices where there is no mismatch between the RLZ code and
    the Board ID value.
  </summary>
  <token key="GSC">
    <variant name="Cr50"/>
    <variant name="Ti50"/>
  </token>
</histogram>

<histogram name="Platform.{GSC}.RlzOfBoardIdMismatch" enum="Cr50CrosRlzCodes"
    expires_after="2024-02-05">
  <owner>vbendeb@chromium.org</owner>
  <owner>apronin@chromium.org</owner>
  <owner>cros-hwsec+uma@google.com</owner>
  <summary>
    A sparse histogram of values indexed by 4 byte RLZ code reported by devices
    where there is a mismatch between the RLZ code and the Board ID value
    programmed in the GSC. Since RLZ code could be misprogrammed, a sparse
    histogram is used to allow keeping track of outliers.
  </summary>
  <token key="GSC">
    <variant name="Cr50"/>
    <variant name="Ti50"/>
  </token>
</histogram>

</histograms>

</histogram-configuration>
