<!--
Copyright 2023 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 histograms for
functionality in CrosAudioConfig.
For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md
Prefer owners from the OWNERS file in this directory. If you need a metrics
reviewer, please send CLs to [email protected] rather than to
specific individuals. These CLs will be automatically reassigned to a reviewer
within about 5 minutes. This approach helps the metrics team to load-balance
incoming reviews. Googlers can read more about this at go/gwsq-gerrit.
-->
<histogram-configuration>
<histograms>
<histogram name="ChromeOS.AudioSelection" enum="AudioSelectionEvents"
expires_after="2025-03-31">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when audio selection events described in AudioSelectionEvents
happen. For example, the system switches or does not switch active audio
device after the device is added or removed, the user overrides the system
switching or not switching decision, etc. The user-override metrics are only
recorded if they occur within the first hour after the system decision was
made. Do not record if there is no alternative available audio device.
</summary>
</histogram>
<histogram name="ChromeOS.AudioSelection.ExceptionRulesMet"
enum="AudioSelectionExceptionRules" expires_after="2025-03-31">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when audio selection exception rules are met. Exception rules are
detailed in enum AudioSelectionExceptionRules.
</summary>
</histogram>
<histogram name="ChromeOS.AudioSelection.Notification"
enum="AudioSelectionNotificationEvents" expires_after="2025-03-31">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when audio selection notification events described in
AudioSelectionNotificationEvents happen. For example, when a new input
device is connected for the first time, a notification with a switch button
shows up and allows users to quickly activate this input device.
</summary>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.ConsecutiveDevicesChangeTimeElapsed.{ChangeType}"
units="seconds" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when {AudioType} audio devices have changed, including
{ChangeType}. Record the time elaspsed between two consecutive devices
change event.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="ChangeType">
<variant name="Add" summary="devices added"/>
<variant name="Any" summary="devices added/removed and devices changed"/>
</token>
</histogram>
<histogram name="ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio"
enum="BooleanSwitched" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when the system switches or does not switch {AudioType} audio after
device is added or removed. Do not record if there is no alternative
available {AudioType} audio device.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio.{IsChromeRestarts}"
enum="BooleanSwitched" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Similar to ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio but only
recorded in cases of {IsChromeRestarts}.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="IsChromeRestarts">
<variant name="ChromeRestarts" summary="chrome restarts"/>
<variant name="NonChromeRestarts" summary="non chrome restarts"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.AudioDeviceCount"
units="counts" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Record the number of audio devices when the system {SwitchDecision}
{AudioType} audio after device is added or removed. Recorded right after
ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio is recorded.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.AudioDeviceCount.{IsChromeRestarts}"
units="counts" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Similar to
ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.AudioDeviceCount
but only recorded in cases of {IsChromeRestarts}.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
<token key="IsChromeRestarts">
<variant name="ChromeRestarts" summary="chrome restarts"/>
<variant name="NonChromeRestarts" summary="non chrome restarts"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.AudioDeviceSet"
units="counts" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Record all the connected audio device types when the system {SwitchDecision}
{AudioType} audio after device is added or removed. Recorded right after
ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio is recorded.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.AudioDeviceSet.{IsChromeRestarts}"
units="counts" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Similar to
ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.AudioDeviceSet
but only recorded in cases of {IsChromeRestarts}.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
<token key="IsChromeRestarts">
<variant name="ChromeRestarts" summary="chrome restarts"/>
<variant name="NonChromeRestarts" summary="non chrome restarts"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.BeforeAndAfterAudioDeviceSet"
enum="AudioSelectionBeforeAndAfterDeviceSet" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Record all the connected audio device types when the system {SwitchDecision}
{AudioType} audio after device is added or removed. Record both before and
after condition of audio device set. Recorded right after
ChromeOS.AudioSelection.{AudioType}.SystemSwitchAudio is recorded.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.BeforeAndAfterAudioDeviceSet.{IsChromeRestarts}"
enum="AudioSelectionBeforeAndAfterDeviceSet" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Similar to
ChromeOS.AudioSelection.{AudioType}.System{SwitchDecision}Audio.BeforeAndAfterAudioDeviceSet
but only recorded in cases of {IsChromeRestarts}.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
<token key="IsChromeRestarts">
<variant name="ChromeRestarts" summary="chrome restarts"/>
<variant name="NonChromeRestarts" summary="non chrome restarts"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.UserOverrideSystem{SwitchDecision}Audio.BeforeAndAfterAudioDeviceSet"
enum="AudioSelectionBeforeAndAfterDeviceSet" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Record all the connected audio device types when users override the system
decision of {SwitchDecision} {AudioType} audio devices. Record both before
and after condition of audio device set.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.UserOverrideSystem{SwitchDecision}TimeElapsed"
units="minutes" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when user overrides the {AudioType} audio device selection right
after the event of system makes the decision of {SwitchDecision} active
audio device. Records the time delta between user overrides and the system
decision. The shorter time delta, the more confidence we can conclude that
user overrides due to bad system decision.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
</histogram>
<histogram
name="ChromeOS.AudioSelection.{AudioType}.UserOverrideSystem{SwitchDecision}TimeElapsed.{IsChromeRestarts}"
units="minutes" expires_after="2025-02-25">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Similar to
ChromeOS.AudioSelection.{AudioType}.UserOverrideSystem{SwitchDecision}TimeElapsed
but only recorded in cases of {IsChromeRestarts}.
</summary>
<token key="AudioType">
<variant name="Input" summary="input"/>
<variant name="Output" summary="output"/>
</token>
<token key="SwitchDecision">
<variant name="NotSwitch" summary="not switching"/>
<variant name="Switch" summary="switching"/>
</token>
<token key="IsChromeRestarts">
<variant name="ChromeRestarts" summary="chrome restarts"/>
<variant name="NonChromeRestarts" summary="non chrome restarts"/>
</token>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.DeviceChange"
enum="AudioDeviceChange" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when the user changes either the input or output audio device from
a WebUI, such as the OS Audio Settings page. Not recorded when the audio
device is programmatically changed.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.InputDeviceTypeChangedTo"
enum="AudioDeviceType" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the type of device selected when the user changes the input audio
device from a WebUI, such as the OS Audio Settings page. Not recorded when
the audio device is programmatically changed.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.InputGainSetTo" units="%"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the input gain set by the user from a WebUI, such as the OS Audio
Settings page. To account for changes via a UI slider, the histogram is only
recorded after the user stops changing the gain for a predetermined amount
of seconds.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.InputMuteStateChange"
enum="AudioMuteButtonAction" expires_after="2024-12-30">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when the user changes the input audio mute state from a WebUI, such
as the OS Audio Settings page.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.NoiseCancellationEnabled"
enum="BooleanEnabled" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when the user enables/disables noise cancellation from a WebUI,
such as the OS Audio Settings page.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.OutputDeviceTypeChangedTo"
enum="AudioDeviceType" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the type of device selected when the user changes the output audio
device from a WebUI, such as the OS Audio Settings page. Not recorded when
the audio device is programmatically changed.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.OutputMuteStateChange"
enum="AudioMuteButtonAction" expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Recorded when the user changes the output audio mute state from a WebUI,
such as the OS Audio Settings page.
</summary>
</histogram>
<histogram name="ChromeOS.CrosAudioConfig.OutputVolumeSetTo" units="%"
expires_after="2025-01-05">
<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>
Records the output volume set by the user from a WebUI, such as the OS Audio
Settings page. To account for changes via a UI slider, the histogram is only
recorded after the user stops changing the volume for a predetermined amount
of seconds.
</summary>
</histogram>
</histograms>
</histogram-configuration>