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

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

<!--
This file is used to generate a comprehensive list of 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
[email protected].
-->

<histogram-configuration>

<histograms>

<variants name="ChromePressureLevel">
  <variant name="Critical" summary="Critical"/>
  <variant name="Moderate" summary="Moderate"/>
  <variant name="None" summary="None"/>
</variants>

<variants name="FirmwareTypes">
  <variant name="Bluetooth"/>
  <variant name="UnknownType"/>
  <variant name="WiFi"/>
</variants>

<variants name="PartitionTypes">
  <variant name="EncStateful"/>
  <variant name="Stateful"/>
  <variant name="UserData"/>
</variants>

<histogram name="Platform.BatteryAbsent" enum="BooleanAbsent"
    expires_after="M77">
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record the bootlockbox space availability when bootlockbox started.
  </summary>
</histogram>

<histogram name="Platform.BootMode.DevSwitch"
    enum="Platform.BootMode.SwitchStatus" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.

    Warning: this histogram was expired from 2022-04-03 to 2023-11-15 ; data may
    be missing.
  </summary>
</histogram>

<histogram name="Platform.BootMode.FirmwareWriteProtect.{FirmwareType}"
    enum="Platform.BootMode.FirmwareWriteProtect" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    On Chrome OS hardware, indicates whether flash write protection is enabled
    for the {FirmwareType} firmware.

    Warning: this histogram was expired from 2022-04-17 to 2023-11-15 ; data may
    be missing.
  </summary>
  <token key="FirmwareType">
    <variant name="EC" summary="Embedded Controller"/>
    <variant name="Main" summary="Main processor"/>
    <variant name="PD" summary="USB Power Delivery controller"/>
  </token>
</histogram>

<histogram name="Platform.BootMode.WriteProtectSwitch"
    enum="Platform.BootMode.SwitchStatus" expires_after="2024-12-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Indicates the status of the hardware write protect switch on Chrome OS
    hardware. The write protect switch protects firmware from being rewritten.

    Warning: this histogram was expired from 2021-09-05 to 2023-11-15 ; data may
    be missing.
  </summary>
</histogram>

<histogram name="Platform.BootSectorsRead" units="units"
    expires_after="2021-07-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the status code when Chaps needs to reinitializing token.
  </summary>
</histogram>

<histogram name="Platform.Chaps.Session.{Operation}" enum="ChapsSessionStatus"
    expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the return value of a chaps session &quot;{Operation}&quot;
    operation. The return code is defined in pkcs11 specification. There is
    exactly one sample logged for every chaps session &quot;{Operation}&quot;
    operation.
  </summary>
  <token key="Operation">
    <variant name="Decrypt"/>
    <variant name="DeriveKey"/>
    <variant name="Digest"/>
    <variant name="Encrypt"/>
    <variant name="Sign"/>
    <variant name="UnwrapKey"/>
    <variant name="UnwrapKeyWithChaps"/>
    <variant name="Verify"/>
    <variant name="WrapKey"/>
    <variant name="WrapKeyWithChaps"/>
  </token>
</histogram>

<histogram name="Platform.Chaps.TokenManager.LoadToken"
    enum="TokenManagerStatus" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Each sample is the TPM Availability status.</summary>
</histogram>

<histogram name="Platform.CompressedSwapSize" units="MB"
    expires_after="2021-11-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Chrome OS size of allocated swap area in megabytes (before compression)
  </summary>
</histogram>

<histogram name="Platform.CrashCollector.AddWeightResult"
    enum="CrosCrashCollectorAddWeightResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Result of a detachable base pair operation.</summary>
</histogram>

<histogram name="Platform.DetachableBase.PendingRWUpdate"
    enum="DetachableBasePendingRWUpdate" expires_after="2022-04-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Result of a detachable base RW firmware update.</summary>
</histogram>

<histogram name="Platform.DeviceManagement.InstallAttributesRestoreResult"
    enum="InstallAttributesRestoreResult" expires_after="2024-12-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the result of the install_attributes restoration process.
    This is logged when lockbox-cache tries to restore the missing
    install_attributes. See cryptohome::RestoreResult in
    src/platform2/cryptohome/lockbox-cache.cc for more context.
  </summary>
</histogram>

<histogram name="Platform.DeviceManagement.InstallAttributesStatus"
    enum="InstallAttributesStatus" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the result of the install_attributes initialization status.
    This is logged when DeviceManagement::Initialize() completes initialization
    of install_attributes. See InstallAttributes::Status in
    src/platform2/device_management/install_attributes/install_attributes.h for
    context.
  </summary>
</histogram>

<histogram name="Platform.DiskUsage.NumUserHomeDirectories"
    units="home directories" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.TotalUsedMBytes" units="MiB"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The storage space used by DLC packages on the device. This metric is
    reported daily by the dlcservice. DLCs are ChromiumOS software packages that
    are installed in the stateful partition.
  </summary>
</histogram>

<histogram name="Platform.DlcService.UninstallResult"
    enum="DlcService.UninstallResult" expires_after="2025-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.{Type}" enum="EmmcLifeUsed"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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 {Type} relative to its maximum estimated
    lifetime.
  </summary>
  <token key="Type">
    <variant name="TypeA"/>
    <variant name="TypeB"/>
  </token>
</histogram>

<histogram name="Platform.ExternalMetrics.SamplesRead" units="count"
    expires_after="2025-01-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FbPreprocessor.Pseudonymization.DumpType"
    enum="Platform.FbPreprocessor.FirmwareType" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Type of the firmware dump that is submitted for pseudonymization. Emitted
    every time a new pseudonymization is requested. Design doc:
    go/cros-fbpreprocessord-dd
  </summary>
</histogram>

<histogram name="Platform.FbPreprocessor.{FirmwareType}.Collection.Allowed"
    enum="Platform.FbPreprocessor.CollectionAllowedStatus"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports whether the collection of {FirmwareType} firmware dumps is allowed
    or not. Emitted every time the bit is updated (user logs in/out, Finch
    updated, etc). Design doc: go/cros-fbpreprocessord-dd
  </summary>
  <token key="FirmwareType" variants="FirmwareTypes"/>
</histogram>

<histogram name="Platform.FbPreprocessor.{FirmwareType}.Output.Number"
    units="count" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of firmware dumps of type {FirmwareType} that are available for
    collection. Emitted periodically, every 5 minutes. Design doc:
    go/cros-fbpreprocessord-dd
  </summary>
  <token key="FirmwareType" variants="FirmwareTypes"/>
</histogram>

<histogram
    name="Platform.FbPreprocessor.{FirmwareType}.Pseudonymization.Result"
    enum="Platform.FbPreprocessor.PseudonymizationResult"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Result of the pseudonymization operations of firmware dumps of type
    {FirmwareType}. Emitted every time a new firmware dump completes
    pseudonymization, succesfully or not. Design doc: go/cros-fbpreprocessord-dd
  </summary>
  <token key="FirmwareType" variants="FirmwareTypes"/>
</histogram>

<histogram name="Platform.Featured.BootAttemptsSinceLastSafeSeed"
    units="number of boot attempts" expires_after="2024-10-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FileDescriptors.Count" units="count"
    expires_after="2025-06-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total number of allocated file descriptors. This value is obtained from
    /proc/sys/fs/file-nr and reported once per day.
  </summary>
</histogram>

<histogram name="Platform.FileSystem.{Partition}.fsckResult" enum="FsckResult"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports fsck result on {Partition}. Reported once per filesystem mount.
  </summary>
  <token key="Partition" variants="PartitionTypes"/>
</histogram>

<histogram name="Platform.FileSystem.{Partition}_ErrorCount" units="errors"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of error in file system {Partition}, as reported by dumpe2fs &quot;FS
    Error count&quot; field. Reported once per boot.
  </summary>
  <token key="Partition" variants="PartitionTypes"/>
</histogram>

<histogram name="Platform.FileSystem.{Partition}_{MountResult}" enum="Boolean"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {MountResult} is true when kernel reports that file system {Partition}
    is/was needed.
  </summary>
  <token key="Partition" variants="PartitionTypes"/>
  <token key="MountResult">
    <variant name="FsckNeeded"/>
    <variant name="RecoveryNeeded"/>
  </token>
</histogram>

<histogram name="Platform.Firmware.Mismatch" enum="BooleanDetected"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if the system firmware mismatched OS bundled firmware. Reported once
    per boot by dev_debug_vboot.
  </summary>
</histogram>

<histogram name="Platform.FlexBootMethod" enum="FlexBootMethod"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS Flex runs on a various configurations of x86 firmware. This metric
    collects the method used to boot the device.

    This metric is only recorded on ChromeOS Flex devices. It is recorded once
    per boot.
  </summary>
</histogram>

<histogram name="Platform.FlexCpuIsaLevel" enum="FlexCpuIsaLevel"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ChromeOS Flex runs on a wide range of x86-64 CPUs. This metric categorizes
    the CPU by its ISA level.

    This metric is only recorded on ChromeOS Flex devices. It is recorded once
    per boot.
  </summary>
</histogram>

<histogram name="Platform.FlexHwis.PermissionCheckResult"
    enum="ChromeOSRevenHwisPermission" expires_after="2025-07-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ServerDeleteSuccess" enum="BooleanSuccess"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Result of checking if the flex_hwis utility successfully calls DELETE API to
    delete 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), if the user doesn't consent to send data, the client
    service will send a request to the server to delete the hardware data stored
    on the server.
  </summary>
</histogram>

<histogram name="Platform.FlexHwis.ServerPostSuccess" enum="BooleanSuccess"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ServerPutSuccess" enum="BooleanSuccess"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.FlexPartitionSize.{Partition}" units="MiB"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    A sparse histogram of the size (in MiB) of the partition labeled
    &quot;{Partition}&quot;. This is the size as defined by the partition table,
    not the size of the filesystem (if any).

    Unlike most ChromeOS boards, ChromeOS Flex occasionally migrates the disk
    layout of existing installations during the update process, so not all
    installations have the same layout.

    This metric is only recorded on ChromeOS Flex devices. It is recorded once
    per boot.
  </summary>
<!-- The list of variants must match flex_disk_metrics_main.cc's partition_labels:
     https://source.chromium.org/chromiumos/chromiumos/codesearch/+/HEAD:src/platform2/flex_hwis/flex_disk_metrics/flex_disk_metrics_main.cc -->

  <token key="Partition">
    <variant name="EFI-SYSTEM"/>
    <variant name="KERN-A"/>
    <variant name="KERN-B"/>
    <variant name="ROOT-A"/>
    <variant name="ROOT-B"/>
  </token>
</histogram>

<histogram name="Platform.Fwupd.ActivateStatus" enum="FwupdReturnValue"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Indicates the return value of a firmware update operation via fwupd.
    Reported once per update operation.
  </summary>
</histogram>

<histogram name="Platform.IntelMaxMicroArchitecture"
    enum="IntelMaxMicroArchitecture" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time elapsed between the last two kernel crashes. Sent after every kernel
    crash.
  </summary>
</histogram>

<histogram
    name="Platform.Libhwsec.PinWeaverManager.SyncHashTree.ReplayLogResult{ReplayType}"
    enum="HwsecPinWeaverLogReplayResultEnum" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the result code of a libhwsec
    PinWeaverManagerImpl::ReplayLogEntries operation. Categorized into 2 replay
    types(Normal/Full), depending on whether all of the log entries were used
    for replay, as this will result in different error distributions. This is
    logged after the ReplayLog operation is attempted, during libhwsec's retry
    handling when the PinWeaver client loses sync with the server (GSC).
  </summary>
  <token key="ReplayType">
    <variant name=""/>
    <variant name=".Full"/>
    <variant name=".Normal"/>
  </token>
</histogram>

<histogram name="Platform.Libhwsec.PinWeaverManager.SyncHashTree.SyncOutcome"
    enum="HwsecPinWeaverSyncOutcomeEnum" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the result code of a libhwsec PinWeaverManager::SyncHashTree
    operation. This is logged after the Sync operation is attempted, during
    libhwsec's retry handling when the PinWeaver client loses sync with the
    server (GSC).
  </summary>
</histogram>

<histogram
    name="Platform.Libhwsec.RetryAction.PinWeaverManager.{ReplayOperationType}{ReplayEntryType}"
    enum="HwsecRetryActionEnum" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the result of the libhwsec PinWeaver {ReplayOperationType}
    operation. This is logged when a {ReplayOperationType} replay operation is
    attempted during libhwsec's retry handling, when the PinWeaver client loses
    sync with the server (GSC). The metric is categorized by the ReplayEntry
    types, where {ReplayEntryType} differentiates the status of the replay
    before attempting to replay the current log entry.
  </summary>
  <token key="ReplayOperationType">
    <variant name="ReplayCheck" summary="PinWeaverManagerImpl::ReplayCheck"/>
    <variant name="ReplayInsert" summary="PinWeaverManagerImpl::ReplayInsert"/>
    <variant name="ReplayInvalid"
        summary="PinWeaverManagerImpl::ReplayInvalid"/>
    <variant name="ReplayRemove" summary="PinWeaverManagerImpl::ReplayRemove"/>
    <variant name="ReplayReset" summary="PinWeaverManagerImpl::ReplayReset"/>
  </token>
  <token key="ReplayEntryType">
    <variant name=""/>
    <variant name=".MismatchedHash"/>
    <variant name=".Normal"/>
    <variant name=".SecondEntry"/>
  </token>
</histogram>

<histogram name="Platform.Libhwsec.RetryAction{Category}"
    enum="HwsecRetryActionEnum" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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=".PinWeaverManager" summary="PinWeaverManager"/>
    <variant name=".PinWeaverManager.BlockGeneratePk"
        summary="PinWeaverManager::BlockGeneratePk"/>
    <variant name=".PinWeaverManager.CheckCredential"
        summary="PinWeaverManager::CheckCredential"/>
    <variant name=".PinWeaverManager.GeneratePk"
        summary="PinWeaverManager::GeneratePk"/>
    <variant name=".PinWeaverManager.GetDelayInSeconds"
        summary="PinWeaverManager::GetDelayInSeconds"/>
    <variant name=".PinWeaverManager.GetDelaySchedule"
        summary="PinWeaverManager::GetDelaySchedule"/>
    <variant name=".PinWeaverManager.GetExpirationInSeconds"
        summary="PinWeaverManager::GetExpirationInSeconds"/>
    <variant name=".PinWeaverManager.GetVersion"
        summary="PinWeaverManager::GetVersion"/>
    <variant name=".PinWeaverManager.GetWrongAuthAttempts"
        summary="PinWeaverManager::GetWrongAuthAttempts"/>
    <variant name=".PinWeaverManager.HasAnyCredential"
        summary="PinWeaverManager::HasAnyCredential"/>
    <variant name=".PinWeaverManager.Initialize"
        summary="PinWeaverManager::Initialize"/>
    <variant name=".PinWeaverManager.InsertCredential"
        summary="PinWeaverManager::InsertCredential"/>
    <variant name=".PinWeaverManager.InsertRateLimiter"
        summary="PinWeaverManager::InsertRateLimiter"/>
    <variant name=".PinWeaverManager.IsEnabled"
        summary="PinWeaverManager::IsEnabled"/>
    <variant name=".PinWeaverManager.RemoveCredential"
        summary="PinWeaverManager::RemoveCredential"/>
    <variant name=".PinWeaverManager.ResetCredential"
        summary="PinWeaverManager::ResetCredential"/>
    <variant name=".PinWeaverManager.StartBiometricsAuth"
        summary="PinWeaverManager::StartBiometricsAuth"/>
    <variant name=".PinWeaverManager.StateIsReady"
        summary="PinWeaverManager::StateIsReady"/>
    <variant name=".PinWeaverManager.SyncHashTree"
        summary="PinWeaverManager::SyncHashTree"/>
    <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.Mem" units="%" expires_after="2022-07-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Various memory usage amount on Chrome OS devices (snapshotted every 30s).
  </summary>
</histogram>

<histogram name="Platform.Memory.ARC" units="MiB" expires_after="2025-01-05">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Memory usage of the GPU process in Chrome OS, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.Memory.PsiPolicyError"
    enum="Platform.Memory.PsiPolicyError" expires_after="2024-10-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The error types from psi memory policy feature. This is recorded each time
    the psi memory handler detects an error. PsiPolicy is not expected to fail.
    Even if it fails continuously, it reports the error at most once per 1
    second. If any error is detected, psi policy feature should be turned off by
    the finch flag.
  </summary>
</histogram>

<histogram name="Platform.Memory.ReclaimReason"
    enum="Platform.Memory.ReclaimReason" expires_after="2024-10-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The reason of reclaiming memory on memory pressure. This is recorded when
    resourced detects memory pressure and decides to reclaim memory by
    discarding tabs or killing processes in VMs. This is reported at most once
    per 1 second.
  </summary>
</histogram>

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

  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
<!-- Name completed by histogram_suffixes name="ProcessMemoryType" -->

  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.ConfigFileRecordBlocked"
    enum="EnterpriseCloudReportingDestination" expires_after="2025-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when missive blocks a record being processed and sent to the
    server. Recorded by the Missive daemon at the moment the record is received
    by `Storage::Write`. It counts occurrences of number of times it has been
    called per Destination.
  </summary>
</histogram>

<histogram name="Platform.Missive.CpuUsage" units="%"
    expires_after="2024-12-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.DataLossErrorReason"
    enum="DataLossErrorReason" expires_after="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded once each time reporting::error::DATA_LOSS is returned in
    src/platform2/missive/. There is a 1:1 relationship between the UMA values
    and error messages used with reporting::error::DATA_LOSS so that we can
    understand exactly which parts of the code are failing.
  </summary>
</histogram>

<histogram name="Platform.Missive.DeleteEmptyMultigenerationQueueDirectories"
    enum="Boolean" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when the Missive daemon attempts to delete empty multigeneration
    queue directories on startup or when the periodic timer triggers. A value of
    True indicates that no errors occurred while attempting to delete
    directories and that zero or more directories were deleted. False indicates
    that at least one directory that should have been deleted was not deleted
    due to an error.
  </summary>
</histogram>

<histogram name="Platform.Missive.KeyDeliveryResult"
    enum="EnterpriseCloudReportingStatusCode" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-12-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-03-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Total amount of space freed by controlled degradation performed by Storage.
  </summary>
</histogram>

<histogram name="Platform.Missive.StorageUsage" units="MiB"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.UnavailableErrorReason"
    enum="UnavailableErrorReason" expires_after="2025-06-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded once each time reporting::error::UNAVAILABLE is returned in
    src/platform2/missive/. There is a 1:1 relationship between the UMA values
    and error messages used with reporting::error::UNAVAILABLE so that we can
    understand exactly which parts of the code are failing.
  </summary>
</histogram>

<histogram name="Platform.Missive.UnusualEnqueueTimestamp" enum="Boolean"
    expires_after="2024-12-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.Modemfwd.CheckForWedgedModemResult"
    enum="ModemfwdCheckForWedgedModemResult" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Report state of modem recovery operation.</summary>
</histogram>

<histogram name="Platform.MountEncrypted.EncryptionKeyStatus"
    enum="MountEncryptedEncryptionKeyStatus" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Memory notification count in 10 minutes, reported every 10 minutes.
  </summary>
</histogram>

<histogram name="Platform.Resourced.VmmsReclaimMemoryDuration.{PressureLevel}"
    units="ms" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Milliseconds taken by a request to VM Memory Management Service to reclaim
    memory from VMs. This is recorded by resourced every time it makes a reclaim
    request to the VM Memory Management Service to try to resolve memory
    pressure in the host.
  </summary>
  <token key="PressureLevel" variants="ChromePressureLevel"/>
</histogram>

<histogram name="Platform.RksAgent.CertificateFetchResult"
    enum="CertificateFetchResult" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of fetching the recoverable key store certificate files from a
    gstatic URL. This recorded after each fetch attempt, which is scheduled
    periodically (once per day, retries every 10 minutes if fails).
  </summary>
</histogram>

<histogram name="Platform.SATA.AvailableReservedSpace" units="%"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Disk communication errors (SMART 199), sent at boot.</summary>
</histogram>

<histogram name="Platform.SmartUncorrectableErrors" units="units"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Uncorrectable disk errors (SMART 187), sent at boot.</summary>
</histogram>

<histogram name="Platform.SpringChargerType" units="units" expires_after="M77">
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Chrome OS stateful partition format. Sampled once per boot.</summary>
</histogram>

<histogram name="Platform.StatefulFreeSpace" units="MB"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Chrome OS stateful partition space free. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.StatefulLifetimeWrites" units="GiB"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Chrome OS stateful partition lifetime writes. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.StatefulTrim.TimeBetweenTrim" units="hours"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Chrome OS stateful partition usage level. Warning: this histogram was
    expired from 2024-03-17 to 2024-08-01; data may be missing.
  </summary>
</histogram>

<histogram name="Platform.StatefulUsedSpace" units="GB"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Chrome OS stateful partition space used. Sampled once daily.
  </summary>
</histogram>

<histogram name="Platform.StatefulWritesDaily" units="KiB"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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.Mmc.Internal.{Error}" units="errors"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    MMC error counters for the MMC that controls the rootfs drive. Only reported
    on machines that use an MMC controller for rootfs. The counters represent
    the number of errors per wall-clock hour.
  </summary>
  <token key="Error">
    <variant name="CmdCRC"/>
    <variant name="CmdTimeout"/>
    <variant name="DataCRC"/>
    <variant name="DataTimeout"/>
  </token>
</histogram>

<histogram name="Platform.Storage.Nvme.PercentageUsed" units="%"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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.{Type}" enum="EmmcLifeUsed"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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 for
    memory {Type}. The calculation is vendor specific.
  </summary>
  <token key="Type">
    <variant name="TypeA"/>
    <variant name="TypeB"/>
  </token>
</histogram>

<histogram name="Platform.StorageCapabilities"
    enum="InternalStorageCapabilities" expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Sparse histogram of internal storage device capabilities. Sampled once per
    boot.
  </summary>
</histogram>

<histogram name="Platform.SwapInDaily" units="pages" expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Number of pages swapped IN over a day, sampled daily.</summary>
</histogram>

<histogram name="Platform.SwapOutDaily" units="pages"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of pages swapped OUT over a day, sampled daily. Warning: this
    histogram was expired from 2024-03-17 to 2024-08-01; data may be missing.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.LvmMetadataTime" units="ms"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to persist LVM metadata. Recorded once per migration attempt.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.ResizeTime" units="ms"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to resize the filesystem. Recorded once per migration attempt.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.Result"
    enum="ThinpoolMigrationResult" expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Result of stateful migration to thinpool. Recorded once per migration
    attempt.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.RevertTime" units="ms"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to revert the migration. Recorded once per failed migration
    attempt.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.ThinpoolMetadataTime" units="ms"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken to persist thinpool metadata. Recorded once per migration
    attempt.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.TotalTime" units="ms"
    expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time taken for a migration attempt. Recorded once per migration attempt.
  </summary>
</histogram>

<histogram name="Platform.ThinpoolMigration.TriesLeftAtCompletion"
    units="units" expires_after="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of migration attempts left at completion. Captures whether multiple
    attempts were required to complete migration. Recorded once after successful
    migration.
  </summary>
</histogram>

<histogram name="Platform.Ti50.ARVCount{CountType}" units="GSC resets"
    expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The count of potential GSC resets for AP RO Verification due to system
    event.
  </summary>
  <token key="CountType">
    <variant name="Combined"/>
    <variant name="ExternalWp"/>
    <variant name="InternalWp"/>
    <variant name="SettingsChange"/>
  </token>
</histogram>

<histogram name="Platform.TPM.ApRoVerificationTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time in milliseconds AP RO verification took. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.AuthErrorCode" enum="TPMResultCodeEnum"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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.CryptoBusyCount" units="count"
    expires_after="2024-11-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of times the crypto engine returned busy. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.CryptoInitTime" units="ms"
    expires_after="2024-11-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time in ms the crypto engine took to initialize. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.DictionaryAttackCounter" units="units"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Each sample is the status of an hourly attempt to reset the TPM dictionary
    attack counter.
  </summary>
</histogram>

<histogram name="Platform.TPM.DispatcherBusyCount" units="count"
    expires_after="2024-11-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of times the dispatcher returned busy. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.ErrorCode" enum="TPMResultCodeEnum"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    AP RO Verification status and detailed result. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.FilesystemBusyCount" units="count"
    expires_after="2024-11-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of times the filesystem returned busy. Captured every cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.FilesystemInitTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Status of a complete TPM firmware update attempt.</summary>
</histogram>

<histogram name="Platform.TPM.HardwareAlerts" enum="PlatformTPMHardwareAlerts"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.TimeslicesExpired" units="count"
    expires_after="2024-11-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of times a process on the TPM exceeded its timeslice. Captured every
    cold boot.
  </summary>
</histogram>

<histogram name="Platform.TPM.TimeToTakeOwnership" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="BootLockBox"/>
    <variant name="Chaps"/>
    <variant name="Cryptohome"/>
    <variant name="DeviceManagement"/>
    <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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="BootLockBox"/>
    <variant name="Chaps"/>
    <variant name="Cryptohome"/>
    <variant name="DeviceManagement"/>
    <variant name="TpmManager"/>
    <variant name="TrunksSend"/>
    <variant name="U2f"/>
    <variant name="Unknown"/>
    <variant name="Vtpm"/>
  </token>
</histogram>

<histogram name="Platform.Trunks.EventIrrelatedTime.Authenticate" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time we spend on the TPM that is not directly related to the user
    authenticate event. Recorded when user tries to authenticate the device.
  </summary>
</histogram>

<histogram name="Platform.Trunks.EventRelatedTime.Authenticate" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time we spend on the TPM that is directly related to the user
    authenticate event. Recorded when user tries to authenticate the device.
  </summary>
</histogram>

<histogram name="Platform.Trunks.EventTime.Authenticate" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total time for the user authenticate event. Recorded when user tries to
    authenticate the device.
  </summary>
</histogram>

<histogram name="Platform.Trunks.FirstTimeoutWritingCommand"
    enum="TPMCommandCode" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Command code of the first timeout writing TPM command</summary>
</histogram>

<histogram name="Platform.Trunks.FirstTimeoutWritingTime" units="seconds"
    expires_after="2024-12-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>System uptime when first timeout writing TPM command occurs</summary>
</histogram>

<histogram name="Platform.Trunks.RecoverableWriteErrorNo" enum="PopularOSErrno"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records occurrences of U2F commands sent to cr50.</summary>
</histogram>

<histogram name="Platform.U2F.FipsStatus" enum="U2FFipsStatus"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the FIPS mode status (whether it is activated) for the Cr50 U2F
    implementation. This is recorded every time u2fd is started.
  </summary>
</histogram>

<histogram name="Platform.U2F.FipsStatus.{U2FMode}" enum="U2FFipsStatus"
    expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the FIPS mode status (whether it is activated) for the Cr50 U2F
    implementation when the U2F mode specified by device policy is {U2FMode}.
    This is recorded every time u2fd is started.
  </summary>
  <token key="U2FMode">
    <variant name="Disabled"/>
    <variant name="U2f"/>
    <variant name="U2fExtended"/>
    <variant name="Unset"/>
  </token>
</histogram>

<histogram name="Platform.UnaggregatedUsageTime" units="seconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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.UncleanShutdownsDaily" units="count per day"
    expires_after="never">
<!-- expires-never: Used to assess Chrome OS platform stability. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Sample collected 10s after boot, showing how many WiFi interfaces are
    present.
  </summary>
</histogram>

<histogram name="Platform.WiFiDisapppearedFromPCI" units="units"
    expires_after="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2024-12-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-07-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</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="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</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>