<!--
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 "{Operation}"
operation. The return code is defined in pkcs11 specification. There is
exactly one sample logged for every chaps session "{Operation}"
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 "pending" 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 "critical"
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 "FS
Error count" 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
"{Partition}". 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>