| <!-- |
| 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 Media histograms |
| along with a detailed description for each histogram. |
| |
| For best practices on writing histogram descriptions, see |
| https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md |
| |
| Please follow the instructions in the OWNERS file in this directory to find a |
| reviewer. If no OWNERS file exists, please consider signing up at |
| go/reviewing-metrics (Googlers only), as all subdirectories are expected to |
| have an OWNERS file. As a last resort you can send the CL to |
| chromium-metrics-reviews@google.com. |
| --> |
| |
| <histogram-configuration> |
| |
| <histograms> |
| |
| <variants name="AudioAggregationDuration"> |
| <variant name=".Intervals" summary="Whole intervals of 1000 callbacks"/> |
| <variant name=".Short" summary="Streams shorter than 1000 callbacks"/> |
| </variants> |
| |
| <variants name="AudioDirection"> |
| <variant name="Input" summary="for input streams"/> |
| <variant name="Output" summary="for output streams"/> |
| </variants> |
| |
| <variants name="AudioLatencyTag"> |
| <variant name="" summary="All latency tags are combined"/> |
| <variant name=".LatencyExactMs" summary="Latency tag is ExactMS"/> |
| <variant name=".LatencyInteractive" summary="Latency tag is Interactive"/> |
| <variant name=".LatencyPlayback" summary="Latency tag is Playback"/> |
| <variant name=".LatencyRtc" summary="Latency tag is RTC"/> |
| <variant name=".LatencyUnknown" summary="Latency tag is Unknown"/> |
| </variants> |
| |
| <variants name="CastStreamingSender"> |
| <variant name="Audio"/> |
| <variant name="Remoting.Audio"/> |
| <variant name="Remoting.Video"/> |
| <variant name="Video"/> |
| </variants> |
| |
| <variants name="CastStreamingSenderAudioVideo"> |
| <variant name="Audio"/> |
| <variant name="Video"/> |
| </variants> |
| |
| <variants name="DbOperation"> |
| <variant name="Clear" summary="Remove all keys from the DB"/> |
| <variant name="Initialize" summary="Initialize the DB."/> |
| <variant name="Read" summary="Read an entry from the DB"/> |
| <variant name="Validate" summary="Check for DB entry corruption"/> |
| <variant name="Write" summary="Write an entry to the DB"/> |
| </variants> |
| |
| <variants name="EmeApi"> |
| <variant name="CloseSession"/> |
| <variant name="GenerateRequest"/> |
| <variant name="GetStatusForPolicy"/> |
| <variant name="LoadSession"/> |
| <variant name="RemoveSession"/> |
| <variant name="SetServerCertificate"/> |
| <variant name="UpdateSession"/> |
| </variants> |
| |
| <variants name="FileOperation"> |
| <variant name="DeleteFile"/> |
| <variant name="ReadFile"/> |
| <variant name="WriteFile"/> |
| </variants> |
| |
| <variants name="IncognitoOrNormal"> |
| <variant name="" summary="Normal or Incognito"/> |
| <variant name=".Incognito" summary="Incognito"/> |
| <variant name=".Normal" summary="Normal"/> |
| </variants> |
| |
| <variants name="KeySystem"> |
| <variant name="ClearKey" summary="Clear Key key system"/> |
| <variant name="PlayReady" summary="PlayReady key system"/> |
| <variant name="Widevine" summary="Widevine key system"/> |
| </variants> |
| |
| <variants name="KeySystemForHardwareSecureOnly"> |
| <variant name="PlayReady" summary="PlayReady key system"/> |
| <variant name="Widevine" summary="Widevine key system"/> |
| </variants> |
| |
| <variants name="KeySystemWithRobustness"> |
| <variant name="ClearKey" summary="Clear Key key system"/> |
| <variant name="PlayReady.HardwareSecure" |
| summary="Hardware secure PlayReady key system"/> |
| <variant name="PlayReady.SoftwareSecure" |
| summary="Software secure PlayReady key system"/> |
| <variant name="Widevine.HardwareSecure" |
| summary="Hardware secure Widevine key system"/> |
| <variant name="Widevine.SoftwareSecure" |
| summary="Software secure Widevine key system"/> |
| </variants> |
| |
| <variants name="MediaRebufferingCategories"> |
| <variant name=".Audio.EME" |
| summary="Metric for EME media with an audio track."/> |
| <variant name=".Audio.HLS" |
| summary="Metric for HLS media with an audio track."/> |
| <variant name=".Audio.MSE" |
| summary="Metric for MSE media with an audio track."/> |
| <variant name=".Audio.SRC" |
| summary="Metric for SRC media with an audio track."/> |
| <variant name=".AudioVideo.EME" |
| summary="Metric for EME media with both an audio and video track."/> |
| <variant name=".AudioVideo.HLS" |
| summary="Metric for HLS media with both an audio and video track."/> |
| <variant name=".AudioVideo.MSE" |
| summary="Metric for MSE media with both an audio and video track."/> |
| <variant name=".AudioVideo.SRC" |
| summary="Metric for SRC media with both an audio and video track."/> |
| </variants> |
| |
| <variants name="MediaRouteProvider"> |
| <variant name=".AndroidCaf" |
| summary="Cast Application Framework (CAF) base MRPs on Clank"/> |
| <variant name=".Cast" summary="Native Cast MRP"/> |
| <variant name=".DIAL" summary="Native DIAL MRP"/> |
| <variant name=".WiredDisplay" summary="Wired Display MRP"/> |
| </variants> |
| |
| <variants name="MF_MEDIA_ENGINE_ERR"> |
| <variant name="MF_MEDIA_ENGINE_ERR_ABORTED"/> |
| <variant name="MF_MEDIA_ENGINE_ERR_DECODE"/> |
| <variant name="MF_MEDIA_ENGINE_ERR_ENCRYPTED"/> |
| <variant name="MF_MEDIA_ENGINE_ERR_NETWORK"/> |
| <variant name="MF_MEDIA_ENGINE_ERR_NOERROR"/> |
| <variant name="MF_MEDIA_ENGINE_ERR_SRC_NOT_SUPPORTED"/> |
| </variants> |
| |
| <variants name="RenderedVideoFrameDetectionResultReason"> |
| <variant name="Detected"/> |
| <variant name="NotDetected"/> |
| <variant name="UnknownByPlaybackEnd"/> |
| <variant name="UnknownByPlaybackError"/> |
| <variant name="UnknownByShutdown"/> |
| </variants> |
| |
| <variants name="RendererType"> |
| <variant name="MediaFoundationRenderer"/> |
| <variant name="RendererImpl"/> |
| </variants> |
| |
| <variants name="ResolveOrReject"> |
| <variant name="" summary="resolve"/> |
| <variant name=".Reject" summary="reject"/> |
| </variants> |
| |
| <!-- The names should match media::GetCodecNameForUMA(). --> |
| |
| <variants name="VideoCodec"> |
| <variant name="AV1"/> |
| <variant name="DolbyVision"/> |
| <variant name="H264"/> |
| <variant name="HEVC"/> |
| <variant name="MPEG2"/> |
| <variant name="MPEG4"/> |
| <variant name="Theora"/> |
| <variant name="Unknown"/> |
| <variant name="VC1"/> |
| <variant name="VP8"/> |
| <variant name="VP9"/> |
| </variants> |
| |
| <variants name="VideoEncoderImpl"> |
| <variant name="HW"/> |
| <variant name="SW"/> |
| </variants> |
| |
| <variants name="VideoEncoderUsage"> |
| <variant name="CastMirroring"/> |
| <variant name="MediaRecorder"/> |
| <variant name="WebCodecs"/> |
| <variant name="WebRTC"/> |
| </variants> |
| |
| <variants name="VideoSource"> |
| <variant name="Rtc"/> |
| <variant name="Video"/> |
| </variants> |
| |
| <histogram name="Cast.Channel.Certificate" enum="CastCertificateStatus" |
| expires_after="never"> |
| <!-- expires-never: Used for Cast device health monitoring. --> |
| |
| <owner>ryanchung@google.com</owner> |
| <summary> |
| Records the result of the Cast certificate verification on the Cast sender. |
| </summary> |
| </histogram> |
| |
| <histogram name="Cast.Channel.LaunchSession.Flags" enum="CastChannelFlag" |
| expires_after="2025-11-16"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records any flags observed on the Cast channel used to launch a Cast |
| session. A single channel may have multiple flags, and each flag is logged |
| as a separate count. |
| </summary> |
| </histogram> |
| |
| <histogram name="Cast.Channel.Nonce" enum="CastNonceStatus" |
| expires_after="never"> |
| <!-- expires-never: Used for Cast device health monitoring. --> |
| |
| <owner>ryanchung@google.com</owner> |
| <summary> |
| Records whether the correct nonce challenge was in the Cast receiver's |
| response. |
| </summary> |
| </histogram> |
| |
| <histogram name="Cast.Channel.Signature" enum="CastSignatureStatus" |
| expires_after="never"> |
| <!-- expires-never: Used for Cast device health monitoring. --> |
| |
| <owner>ryanchung@google.com</owner> |
| <summary> |
| Records whether the signature returned by the Cast receiver is verifiable |
| with the challenge and device certificate. |
| </summary> |
| </histogram> |
| |
| <histogram name="Cast.Sender.RemotePlayback.InitiationLocation" |
| enum="RemotePlaybackInitiationLocation" expires_after="2026-06-07"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the location when users interact with the RemotePlayback API on |
| Clank. Please note, this metric does not show whether a session is started |
| or stopped and does not include RemotePlayback sessions initiated through |
| the Cast SDK. |
| </summary> |
| </histogram> |
| |
| <histogram name="Cast.Sender.VideoEncodeAcceleratorInitializeSuccess" |
| enum="BooleanSuccess" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Indicates whether initialization of a video encode accelerator for Cast |
| sender was successful. |
| |
| Warning: this histogram was expired from 2021-10-17 to 2022-12-15; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="CastStreaming.Sender.Audio.NegotiatedCodec" enum="AudioCodec" |
| expires_after="2026-05-17"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records which audio codec was negotiated during a mirroring session. |
| </summary> |
| </histogram> |
| |
| <histogram name="CastStreaming.Sender.Video.Bitrate" units="kbps" |
| expires_after="2026-05-17"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the currently set video bit rate during a Cast Streaming mirroring |
| session. This metric is subsampled every 500 frames. |
| </summary> |
| </histogram> |
| |
| <histogram name="CastStreaming.Sender.Video.EncoderType" |
| enum="CastStreamingVideoEncoderType" expires_after="2026-05-17"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records which video codec was negotiated during a mirroring session. Records |
| the selected encoder configuration whenever a negotiation between the sender |
| and receiver devices is completed. This configuration includes the encoder |
| codec as well as whether it is software or hardware based. |
| </summary> |
| </histogram> |
| |
| <histogram name="CastStreaming.Sender.Video.NegotiatedCodec" enum="VideoCodec" |
| expires_after="2026-05-17"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records which video codec was negotiated during a mirroring session. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.AverageCaptureLatency" |
| units="ms" expires_after="2026-05-17"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records the average {CastStreamingSenderAudioVideo} latency in milliseconds |
| for capturing frames. Histogram is recorded at the end of the mirroring |
| session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.AverageEncodeTime" |
| units="ms" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records the average time required to encode {CastStreamingSenderAudioVideo} |
| frames, in milliseconds. Histogram is recorded at the end of the mirroring |
| session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.AverageEndToEndLatency" |
| units="ms" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records the average {CastStreamingSenderAudioVideo} latency in milliseconds |
| end to end, from the beginning of capturing a frame to when the frame is |
| played out on the receiver. Histogram is recorded at the end of the |
| mirroring session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.AverageNetworkLatency" |
| units="ms" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records the average {CastStreamingSenderAudioVideo} latency in milliseconds |
| from sender to receiver. Histogram is recorded at the end of the mirroring |
| session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.ExceededPlayoutDelayPacketsPercentage" |
| units="%" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records number of {CastStreamingSenderAudioVideo} packets that exceeded the |
| playout delay as a percentage of all packets. Histogram is recorded at the |
| end of the mirroring session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.LateFramesPercentage" |
| units="%" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records the percentage of {CastStreamingSenderAudioVideo} frames that are |
| reported as late, and therefore dropped by the sender, during a cast |
| mirroring session. Recorded at the end of a cast mirroring session. Logged |
| on all desktop platforms. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.RetransmittedPacketsPercentage" |
| units="%" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records number of {CastStreamingSenderAudioVideo} packets that had to be |
| retransmitted as a percentage of number of packets sent. Histogram is |
| recorded at the end of the mirroring session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSenderAudioVideo}.TransmissionRate" |
| units="kbps" expires_after="2026-03-12"> |
| <owner>anasr@google.com</owner> |
| <owner>bzielinski@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Records the {CastStreamingSenderAudioVideo} packet transmission bitrate in |
| kbps during a Cast Streaming session. Histogram is recorded at the end of |
| the mirroring session. |
| </summary> |
| <token key="CastStreamingSenderAudioVideo" |
| variants="CastStreamingSenderAudioVideo"/> |
| </histogram> |
| |
| <histogram name="CastStreaming.Sender.{CastStreamingSender}.FrameDropped" |
| enum="CastStreamingFrameDropReason" expires_after="2026-05-17"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the reason when an frame is dropped during a Cast Streaming session. |
| </summary> |
| <token key="CastStreamingSender" variants="CastStreamingSender"/> |
| </histogram> |
| |
| <histogram |
| name="CastStreaming.Sender.{CastStreamingSender}.PercentDroppedFrames" |
| units="%" expires_after="2026-05-17"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the total percentage of frames dropped for a given Cast Streaming |
| session. |
| </summary> |
| <token key="CastStreamingSender" variants="CastStreamingSender"/> |
| </histogram> |
| |
| <histogram name="Media.AImageReaderGLOwner.AcquireImageResult" |
| enum="MediaStatus" expires_after="2026-07-07"> |
| <owner>vikassoni@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Error codes to handle AImage and AImageReader api calls. This is recorded |
| when AImageReader acquireNextImage or acquireLatestImage is called and the |
| returned code is other than AMEDIA_OK. This histogram was enabled in the |
| past and became absolete on 2018-11-25. NOTE: metric expired from 2024-12-15 |
| to 2025-07-07. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AImageReaderGLOwner.CodecType" |
| enum="TextureOwnerCodecType" expires_after="2026-05-10"> |
| <owner>vasilyt@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs whether we use MediaCodec or MediaPlayer (aka StreamTexture path). This |
| is recorded when AImageReader acquireNextImage or acquireLatestImage is |
| called. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AImageReaderGLOwner.HasFence" enum="Boolean" |
| expires_after="2026-01-18"> |
| <owner>vasilyt@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs whether AImageReader provided an acquire fence in acquireNextImage or |
| acquireLatestImage. Logged once for each successfuly acquired frame. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Android.BecomingNoisy" enum="Boolean" |
| expires_after="2023-01-15"> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Android-specific metric. Occasionally, we cannot start a foreground service |
| when headphones are unplugged. This tracks how often that occurs, which is |
| one recorded boolean per "user unplugs headphones while media is |
| playing". See https://crbug.com/1245017 for more details. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Android.GetColorSpaceError" enum="BooleanError" |
| expires_after="2025-06-08"> |
| <owner>vasilyt@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Android: Whether we successfuly got ColorSpace from MediaCodec or not. |
| Recorded each time output format changes from MediaCodec. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audible.ConcurrentTabsTime" units="ms" |
| expires_after="2026-05-19"> |
| <owner>evliu@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records how long more than one tab is audible at the same time. The |
| concurrent tabs might change during this period. The time recorded starts |
| when the browser goes from one to two audbile tabs and stops when it is back |
| below two. Warning: this histogram was expired from 2020-09-05 to 4-18-22; |
| data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audible.ConcurrentTabsWhenStarting" units="units" |
| expires_after="2026-05-19"> |
| <owner>evliu@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records how many tabs were audible when a new tab started to be audible. |
| Warning: this histogram was expired from 2020-09-05 to 4-18-22; data may be |
| missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audible.MaxConcurrentTabsInSession" units="units" |
| expires_after="2026-05-19"> |
| <owner>evliu@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records how many tabs are audible at the same time during the session. It is |
| recording the maximum audible tab count everytime it increases. In other |
| words, a session with N concurrent audible tabs will record entries from 1 |
| through N exactly once. Warning: this histogram was expired from 2020-09-05 |
| to 4-18-22; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.AAudioBufferSizeInFrames.{Direction}{AudioLatencyTag}" |
| units="frames" expires_after="2026-05-24"> |
| <owner>kawasin@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <summary> |
| The buffer size in frames of an AAudio {Direction} stream got by |
| `AAudioStream_getBufferSizeInFrames()` and {AudioLatencyTag}. Logged when an |
| AAudio stream is opened. |
| </summary> |
| <token key="Direction" variants="AudioDirection"/> |
| <token key="AudioLatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.AAudioFramesPerBurst.{Direction}{AudioLatencyTag}" |
| units="frames" expires_after="2026-05-31"> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The frames per burst of an AAudio {Direction} stream retrieved by |
| `AAudioStream_getFramesPerBurst()` and {AudioLatencyTag}. Logged when an |
| AAudio stream is opened. |
| </summary> |
| <token key="Direction" variants="AudioDirection"/> |
| <token key="AudioLatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.AAudioFramesPerBurstChanged.{Direction}{AudioLatencyTag}" |
| enum="Boolean" expires_after="2026-05-31"> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether the value returned by `AAudioStream_getFramesPerBurst()` changed |
| bewtween when an {Direction} stream was opened and when it was closed. |
| Logged when an AAudio stream is closed. |
| </summary> |
| <token key="Direction" variants="AudioDirection"/> |
| <token key="AudioLatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.AAudioFramesPerDataCallback.{Direction}{AudioLatencyTag}" |
| units="frames" expires_after="2026-05-24"> |
| <owner>kawasin@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <summary> |
| The number of frames per data callback for an AAudio stream got by |
| `AAudioStream_getFramesPerDataCallback()` and {AudioLatencyTag}. Logged when |
| an AAudio stream is opened. The requested value by the client is logged as |
| `Media.Audio.Android.RequestedInputFramesPerBuffer` or |
| `Media.Audio.Android.RequestedOutputFramesPerBuffer`. Note that |
| `Media.Audio.Android.AAudioFramesPerDataCallback` can be different from the |
| actual buffer size used by the stream on Android which is logged as |
| `Media.Audio.Android.AAudioBufferSizeInFrames`. |
| </summary> |
| <token key="Direction" variants="AudioDirection"/> |
| <token key="AudioLatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram name="Media.Audio.Android.AAudioSetDeviceId.{Direction}.{Result}" |
| enum="AndroidAudioDeviceType" expires_after="2026-03-22"> |
| <owner>mjel@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| For every AAudio {Direction} stream that is opened without resulting in an |
| internal AAudio error and with a non-default device requested, records if |
| setting the device ID was a {Result}. This operation is considered |
| successful if the requested device (passed to |
| AAudioStreamBuilder_setDeviceId) is the same as the actual device assigned |
| to the stream (received via AAudioStream_getDeviceId). |
| </summary> |
| <token key="Direction"> |
| <variant name="Input"/> |
| <variant name="Output"/> |
| </token> |
| <token key="Result"> |
| <variant name="Failure"/> |
| <variant name="Success"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.Android.DevicesChanged" enum="DeviceChangeKind" |
| expires_after="2026-10-20"> |
| <owner>mjel@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| For every call to SystemMonitor::ProcessDevicesChanged indicating a change |
| in available audio devices, records whether it was caused by devices being |
| added or removed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Android.MissingChannelMask" units="sparse" |
| expires_after="2026-06-01"> |
| <owner>dvalenzuela@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the AudioDevice channel masks that are supported by Android |
| automotive, but not yet mapped to a corresponding media::ChannelLayout. To |
| interpret these numbers as AudioFormat.channelMasks, see: |
| https://developer.android.com/reference/android/media/AudioFormat#channelMask |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.PreferredOutputFramesPerBuffer{AudioLatencyTagWithInvalidInputParams}" |
| units="frames" expires_after="2026-05-24"> |
| <owner>kawasin@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <summary> |
| The preferred output buffer size in frames for an audio output stream |
| calculated from OS provided buffer size on Android. This is for audio output |
| streams that {AudioLatencyTagWithInvalidInputParams}. Logged when |
| GetPreferredOutputStreamParameters() is called. This value is usally used by |
| the client to calculate the buffer size in frames for an audio output stream |
| which is logged as `Media.Audio.Android.RequestedOutputFramesPerBuffer`. |
| </summary> |
| <token key="AudioLatencyTagWithInvalidInputParams"> |
| <variant name="" summary="All latency tags are combined"/> |
| <variant name=".InvalidInputParams" |
| summary="The input parameters are invalid to calculate the buffer |
| size from"/> |
| <variant name=".LatencyExactMs" summary="Latency tag is ExactMS"/> |
| <variant name=".LatencyInteractive" summary="Latency tag is Interactive"/> |
| <variant name=".LatencyPlayback" summary="Latency tag is Playback"/> |
| <variant name=".LatencyRtc" summary="Latency tag is RTC"/> |
| <variant name=".LatencyUnknown" summary="Latency tag is Unknown"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.RequestedInputFramesPerBuffer{AudioLatencyTag}" |
| units="frames" expires_after="2026-06-18"> |
| <owner>kawasin@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@chromium.org</owner> |
| <summary> |
| The number of frames per data callback for an audio input stream requested |
| by the client and {AudioLatencyTag}. Logged on stream creation. |
| `Media.Audio.Android.AAudioFramesPerDataCallback.Input` logs the actual |
| values used in an AAudio input stream. |
| </summary> |
| <token key="AudioLatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Android.RequestedOutputFramesPerBuffer{AudioLatencyTag}" |
| units="frames" expires_after="2026-05-24"> |
| <owner>kawasin@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@chromium.org</owner> |
| <summary> |
| The number of frames per data callback for an audio output stream requested |
| by the client and {AudioLatencyTag}. Logged on stream creation. |
| `Media.Audio.Android.AAudioFramesPerDataCallback.Output` logs the actual |
| values used in an AAudio output stream. |
| </summary> |
| <token key="AudioLatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram name="Media.Audio.Android.SupportedChannelMask" units="sparse" |
| expires_after="2026-06-01"> |
| <owner>dvalenzuela@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the AudioDevice channel masks that are supported by Android |
| automotive. These only include masks that are mapped to a corresponding |
| media::ChannelLayout. To interpret these numbers as |
| AudioFormat.channelMasks, see: |
| https://developer.android.com/reference/android/media/AudioFormat#channelMask |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Autoplay" enum="AutoplaySource" |
| expires_after="2026-05-31"> |
| <owner>evliu@google.com</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Records the autoplay source of audios.</summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.DetectedMissingCallbacks" |
| enum="BooleanMissingCallbacks" expires_after="2026-01-25"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether missing callbacks where detected during audio capture. Logged when |
| AudioInputDevice is stopped. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.FramesProvided" units="frames" |
| expires_after="2026-11-03"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of captured audio frames that is provided by the operating system |
| in each callback. Typically, Chrome will want to use a 10 ms buffer (e.g. |
| 480 frames for a sample rate of 48 kHz), but the OS may decide to capture |
| e.g. 256 frames of audio at a time. If the desired frame size is used, the |
| emitted value is special-cased to be 0. This histogram then shows how |
| frequent it is that the desired number of frames is used and if not, the |
| number of frames used in practice. The number of frames per callback is |
| normally constant or very rarely changed throughout the lifetime of the |
| audio stream. The first value that differs from the desired value is stored |
| and logged when an audio input stream is closed. Any further differences |
| during the lifetime will be ignored. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.InputStreamDuration" units="ms" |
| expires_after="2026-02-01"> |
| <owner>olka@chromium.org</owner> |
| <owner>saza@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| This histogram measures the duration of every input stream, as seen from the |
| renderer. It counts from when it has been successfully started, until it is |
| stopped. Streams that fail to start are not logged. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.LowLatencyCallbackError" |
| enum="BooleanError" expires_after="2026-06-07"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| A boolean that reflects whether or not an error was reported during audio |
| capture for a low latency stream. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Capture.Mac.MicSystemPermission.FixedTime.SinceFirstFailure" |
| units="ms" expires_after="2024-03-17"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The time from the first microphone access failure due to blocked system |
| permission before the last browser restart to startup after browser restart. |
| Logged once at browser startup if the system permission then is allowed. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Capture.Mac.MicSystemPermission.FixedTime.SinceLastFailure" |
| units="ms" expires_after="2024-01-14"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The time from the last microphone access failure due to blocked system |
| permission before the last browser restart to startup after browser restart. |
| Logged once at browser startup if the system permission then is allowed. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Mac.MicSystemPermission.Startup" |
| enum="SystemMediaCapturePermission" expires_after="2026-05-31"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The Mac system permission state for microphone. Logged once at browser |
| startup. For more information on the values, see |
| https://developer.apple.com/documentation/avfoundation/avauthorizationstatus. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Capture.Mac.MicSystemPermission.StartupAfterFailure" |
| enum="SystemMediaCapturePermission" expires_after="2024-01-14"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The Mac system permission state for microphone. Logged once at browser |
| startup if there was a failure accessing the microphone due to blocked |
| system permission before the last browser restart. For more information on |
| the values, see |
| https://developer.apple.com/documentation/avfoundation/avauthorizationstatus. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Mac.MicSystemPermission.UserMedia" |
| enum="SystemMediaCapturePermission" expires_after="2024-03-17"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The Mac system permission state for microphone at the time of a user media |
| request. Logged when the system permission is checked. If the permission is |
| "not determined" this is logged, permission is requested, and the |
| resulting permission (from the user response) is also logged. For more |
| information on the values, see |
| https://developer.apple.com/documentation/avfoundation/avauthorizationstatus. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Capture.NeuralResidualEchoEstimationModelAvailable" |
| enum="BooleanAvailable" expires_after="2026-05-25"> |
| <owner>saza@chromium.org</owner> |
| <owner>devicentepena@webrtc.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| A boolean that reflects whether or not an ML model for neural residual echo |
| estimation is available. Logged when an audio processor with echo |
| cancellation is constructed. Logging is restricted to when audio service ML |
| model delivery is enabled. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.ProcessingAudioFifo.MaxUsage" |
| units="buffers" expires_after="2026-11-17"> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Maximum size (in buffers) of the unprocessed data queue, reached over a |
| sampling interval (1000 callbacks). Not logged for streams received less |
| than 1000 callbacks. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.ProcessingAudioFifo.Overruns" |
| units="count" expires_after="2026-11-17"> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Number of times over a sampling interval (1000 callbacks) a |
| ProcessingAudioFifo has overflowed and dropped buffers. Capped at 100 (1/10 |
| of all callbacks). Not logged for streams received less than 1000 callbacks. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.SCK.ContentEnumerationTimedOut" |
| enum="Boolean" expires_after="2025-12-28"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Indicates if SCShareableContent enumeration has timed out during a call to |
| SCKAudioInputStream::Open(). The timeout exists to prevent a deadlock if the |
| API is misbehaving. We do not expect any timeouts under normal conditions. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.SCK.ContentEnumerationTimeMs" units="ms" |
| expires_after="2025-12-28"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Measures the time required for SCShareableContent enumeration (displays and |
| open applications/windows) when calling SCKAudioInputStream::Open(). The |
| duration can vary based on the amount of applications and windows open on |
| the system. This enumeration is a blocking operation, and as such should |
| complete as fast as possible. If metrics show long times, the operation |
| might have to be made asynchronous. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.SCK.StreamError" units="errorcode" |
| expires_after="2024-08-09"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Error codes reported by ScreenCaptureKit in |
| SCKAudioInputStream::OnStreamError() during stream setup or while streaming |
| samples. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.StreamCallbackError2" |
| enum="AudioCaptureDeviceError" expires_after="never"> |
| <!-- expires-never: Audio pipeline health metric. --> |
| |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| When AudioInputDevice is stopped, this stat is recorded with whether an |
| error callback was ever received over IPC, and in that case whether the |
| error occurred during or after stream creation. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.AbsTimestampDiffMs" units="ms" |
| expires_after="2026-11-30"> |
| <owner>henrika@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The absolute time difference in milliseconds between a default QPC-based |
| timstamp and a timestamp from TimeTicks::Now(). By default, the difference |
| will be small and correspond to the size of the audio capture buffer which |
| is about 10 milliseconds. It can however be very large on some devices, e.g. |
| when using RDP. If the diffeence is larger than 500 milliseconds, so-called |
| fake audio capture timestamps (based on TimeTicks::Now()) will be utilized. |
| This value is logged once per audio input stream session at the first audio |
| callback. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.AudioEngineFormat" enum="SampleFormat" |
| expires_after="2026-10-28"> |
| <owner>lowkey@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This is the SampleFormat the Windows Audio Engine returns as its preferred |
| format when we open an Audio Input Stream. This is recorded everytime a user |
| decides to record audio (e.g. record via microphone). This is recorded once |
| per Input Stream, notably recorded at Stream Open rather than Stream |
| Initialization. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.AudioEngineFormat.Unknown" |
| units="combined_format" expires_after="2026-10-28"> |
| <owner>lowkey@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This is the SubFormat.Data1 (i.e. wFormatTag) the Windows Audio Engine |
| returns as its preferred format when we open an Audio Input Stream, recorded |
| only when the format does not map to a known media::SampleFormat. This is |
| potentially recorded everytime a user decides to record audio (e.g. record |
| via microphone). This is recorded once per Input Stream, notably recorded at |
| Stream Open rather than Stream Initialization. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.FakeTimestamps" enum="Boolean" |
| expires_after="2026-02-01"> |
| <owner>henrika@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logs whether audio capture timestamps on Windows are fake or not. By default |
| QPC-based timestamps provided by native audio APIs are utilized. In some |
| cases the QPC-based timestamps differ a lot compared with TimeTicks::Now() |
| timestamps and this can lead to issues (see http://crbug.com/1439283). If an |
| absolute difference larger than 500 msec between these two types of |
| timestamps is detected, we fall back to using TimeTicks::Now() and these |
| timestams are called fake timestamps. We expect that usage of fake |
| timestamps will be low. This value is logged once per audio input stream |
| session at the first audio callback. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.GetAudioClientTimedOut" enum="Boolean" |
| expires_after="2026-05-30"> |
| <owner>henrika@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logs whether the attempt to acquire an input audio client asynchronously |
| timed out or not. A timeout corresponds to a waiting time which exceeds 10 |
| seconds. Logged once when an input audio stream is opened and the specified |
| device ID is a process loopback device. Only supported on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.Glitches2" units="glitches" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>henrika@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of glitches that were detected at the OS level while an audio |
| input stream was active. A glitch in this case corresponds to a certain |
| error code from the IAudioCaptureClient::GetBuffer() API: |
| AUDCLNT_BUFFERFLAGS_DATA_DISCONTINUITY. This value is logged every 1000 OS |
| callbacks on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.InitError" enum="Hresult" |
| expires_after="2026-05-31"> |
| <owner>olka@chromium.org</owner> |
| <owner>tommi@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Error codes from IAudioClient::Initialize() in |
| WASAPIAudioInputStream::InitializeAudioEngine on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.InitError.FormatRelated" |
| enum="AudioStreamFormatRelatedInitError" expires_after="2026-05-11"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Errors from IAudioClient::Initialize() in |
| WASAPIAudioInputStream::InitializeAudioEngine on Windows that are related to |
| the audio format. Each error is split by whether format conversion was used |
| or not. Warning: this histogram was expired from 2022-10-17 to 2022-10-18; |
| data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.Open" enum="AudioStreamOpenResult" |
| expires_after="2026-06-07"> |
| <owner>gudiou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Success/error cases for opening an audio input stream on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.ProcessLoopbackInitError" |
| enum="Hresult" expires_after="2026-10-28"> |
| <owner>lowkey@google.com</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The HRESULT code for an error when initializing for process loopback |
| capture. This is recorded only when initialization fails and the device is a |
| process loopback device. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.TimeToGetAudioClient" units="ms" |
| expires_after="2026-05-30"> |
| <owner>henrika@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| This histogram records the time it takes to activate an audio client |
| asynchronously, which occurs on the audio.CrUtilityMain thread in the |
| AudioService process. Logged once when an input audio stream is successfully |
| opened and the specified device ID is a process loopback device. Only |
| supported on Windows and when Media.Audio.Capture.Win.GetAudioClientTimedOut |
| is false. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Capture.Win.VoiceProcessingEffects" |
| enum="AudioEffectType" expires_after="2026-03-01"> |
| <owner>henrika@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Supported audio effect types detected for audio input devices. Emitted each |
| time a client requests the preferred audio parameters for a specified device |
| but also each time a client opens an audio input stream where an AEC effect |
| is requested by the input parameters. Only supported on Windows and when the |
| EnforceSystemEchoCancellation flag is enabled. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.CrasInputStreamNotifyStreamError" |
| units="errorcode" expires_after="2026-05-17"> |
| <owner>peah@chromium.org</owner> |
| <owner>hychao@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Error codes reported by the NotifyStreamError function in CrasInputStream. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.CrasInputStreamOpenSuccess" |
| enum="CrasInputStreamOpenSuccess" expires_after="2026-04-12"> |
| <owner>peah@chromium.org</owner> |
| <owner>hychao@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logged at each call to CrasInputStream::Open to indicate any errors. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.CrasInputStreamStartSuccess" |
| enum="CrasInputStreamStartSuccess" expires_after="2025-04-28"> |
| <owner>peah@chromium.org</owner> |
| <owner>hychao@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logged at each call to CrasInputStream::Start to indicate any errors. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.CrasUnifiedStreamNotifyStreamError" |
| units="errorcode" expires_after="2026-05-11"> |
| <owner>peah@chromium.org</owner> |
| <owner>hychao@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Error codes reported by the NotifyStreamError function in CrasUnifiedStream. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.CrasUnifiedStreamOpenSuccess" |
| enum="CrasUnifiedStreamOpenSuccess" expires_after="2026-04-05"> |
| <owner>peah@chromium.org</owner> |
| <owner>hychao@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logged at each call to CrasUnifiedStream::Open to indicate any errors. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.CrasUnifiedStreamStartSuccess" |
| enum="CrasUnifiedStreamStartSuccess" expires_after="2026-05-11"> |
| <owner>peah@chromium.org</owner> |
| <owner>hychao@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logged at each call to CrasUnifiedStream::Start to indicate any errors. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.InputController.Delay.{AECType}" units="ms" |
| expires_after="2026-07-23"> |
| <owner>henrika@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the audio delays seen by the audio::InputController::OnData() |
| callback for a source of type {AECType}. |
| </summary> |
| <token key="AECType"> |
| <variant name="ChromeWideAEC"/> |
| <variant name="LoopbackAEC"/> |
| <variant name="NoAudioServiceAEC"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.InputStartupSuccessMac{MacAudioInputVariants}" |
| enum="BooleanSuccess" expires_after="2026-05-24"> |
| <owner>henrika@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Indicates if audio capturing did start after stream startup was requested. |
| Sampled once, a few seconds after a stream has been asked to start. |
| {MacAudioInputVariants} |
| </summary> |
| <token key="MacAudioInputVariants"> |
| <variant name=""/> |
| <variant name="_HighLatency" |
| summary="Measures the standard Mac audio driver (i.e. not |
| low-latency)."/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.LoopbackReference.HadRuntimeError" |
| enum="BooleanRuntimeError" expires_after="2026-07-03"> |
| <owner>henrika@google.com</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports if a loopback AEC reference audio input stream was closed due to a |
| runtime error or not. Only supported on Windows and Mac. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.LoopbackReference.OpenResult" |
| enum="ReferenceOpenOutcome" expires_after="2026-07-03"> |
| <owner>henrika@google.com</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports success/error cases for opening a loopback AEC reference audio input |
| stream on Windows or Mac. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.AggregateDeviceCompositionPropertyIsNull" |
| enum="Boolean" expires_after="2026-02-20"> |
| <owner>agpalak@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the number of occurences of null output dictionary when |
| AudioObjectGetPropertyData for kAudioAggregateDevicePropertyComposition is |
| called. This is equivalent to the number of crashes that were reported in |
| crbug.com/1428619. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.AggregateDeviceIsPrivate{Type}" enum="Boolean" |
| expires_after="2026-02-22"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the number of occurences of private aggregate devices where the |
| dictionary entry for kAudioAggregateDeviceIsPrivateKey is successfully |
| interpreted as a {Type}. Recorded for each call to |
| IsPrivateAggregateDevice() if the AudioObjectID is of type |
| kAudioDeviceTransportTypeAggregate and there is a dictionary. This histogram |
| is used to determine the type of the value in the dictionary for |
| kAudioAggregateDeviceIsPrivateKey. If no occurences of type Number are |
| detected, we can remove the code path that parses the dictionary as a |
| number. |
| </summary> |
| <token key="Type"> |
| <variant name="Boolean"/> |
| <variant name="Number"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.ChannelCountMismatch" |
| units="count" expires_after="2026-02-15"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the number of callbacks where the channel count in the sample |
| callback did not match the channel count of the stream. The histogram is |
| recorded when the capture is stopped. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.FramesMismatch" |
| units="count" expires_after="2026-02-15"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the number of callbacks where the number of frames in the sample |
| callback did not match the frames per buffer of the stream. The histogram is |
| recorded when the capture is stopped. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.HostTimeStatus" |
| enum="CatapAudioInputStreamHostTimeStatus" expires_after="2026-04-26"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| This metric reports whether host time was provided in the sample callbacks. |
| It also tracks recoveries, defined as a callback with host time occurring |
| after a callback without host time. The histogram is recorded when the |
| capture is stopped. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.IsAlive" enum="Boolean" |
| expires_after="2026-02-15"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the IsAlive property of the CoreAudio tap's aggregated device. The |
| histogram is recorded in the property listener's callback when the IsAlive |
| property is reported to have changed. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Mac.CatapAudioInputStream.OperationDuration.{Operation}.{Status}" |
| units="ms" expires_after="2026-04-26"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the duration of the operation {Operation} in CatapAudioInputStream. |
| The duration is measured from the time the operation is called until the |
| operation completes with a success or failure. The result is immediately |
| logged. This histogram tracks the duration of operations that result in a |
| {Status}. |
| </summary> |
| <token key="Operation"> |
| <variant name="Close"/> |
| <variant name="GetProcessAudioDeviceIds"/> |
| <variant name="Open"/> |
| <variant name="Start"/> |
| <variant name="Stop"/> |
| </token> |
| <token key="Status"> |
| <variant name="Failure"/> |
| <variant name="Success"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.Status.Close" |
| enum="CatapAudioInputStreamStatusClose" expires_after="2026-04-26"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the status of the operation Close in CatapAudioInputStream. Failures |
| are recorded directly after the failure occurs. The histogram is recorded |
| immediately after the operation completes, either with a success or failure. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.Status.Open" |
| enum="CatapAudioInputStreamStatusOpen" expires_after="2026-04-26"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the status of the operation Open in CatapAudioInputStream. Failures |
| are recorded directly after the failure occurs. The histogram is recorded |
| immediately after the operation completes, either with a success or failure. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.CatapAudioInputStream.Status.{Operation}" |
| enum="BooleanSuccess" expires_after="2026-04-26"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Reports the status of the operation {Operation} in CatapAudioInputStream. |
| Failures are recorded directly after the failure occurs. The histogram is |
| recorded immediately after the operation completes, either with a success or |
| failure. |
| </summary> |
| <token key="Operation"> |
| <variant name="Start"/> |
| <variant name="Stop"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.HardwareLatency.{Direction}.{Component}" |
| units="misses" expires_after="2026-03-22"> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The reported hardware latency, used to adjust timestamps for A/V sync. |
| Logged once per low-latency input stream creation (AUAudioInputStream only), |
| or once per output stream creation. |
| </summary> |
| <token key="Direction"> |
| <variant name="Input" summary="Audio capture"/> |
| <variant name="Output" summary="Audio playback"/> |
| </token> |
| <token key="Component"> |
| <variant name="AudioUnit" summary="Latency reported by AudioUnit"/> |
| <variant name="Device" summary="Latency reported by the HW device"/> |
| <variant name="Stream" summary="Latency reported by the stream"/> |
| <variant name="Total" summary="Total reported latency"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.Mac.NoiseSuppressionAvailable" |
| enum="BooleanSuccess" expires_after="2026-05-24"> |
| <owner>brandstrom@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| If the device reports that system noise supression is available. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Audio.Mac.VoiceProcessedInputStreamDetectedWithoutNativeAEC" |
| enum="BooleanDetected" expires_after="2026-04-23"> |
| <owner>brandstrom@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| If we detect voice processing input streams. Logged at calls to |
| media::core_audio_mac::IsInputDevice. Used for debugging |
| crbug.com/392938088. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.MakeAudioInputStreamStatus" |
| enum="MakeAudioStreamStatus" expires_after="2026-04-26"> |
| <owner>yuhsuan@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logged at each call to AudioManagerBase::MakeAudioInputStream to indicate |
| any errors. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.MakeAudioOutputStreamStatus" |
| enum="MakeAudioStreamStatus" expires_after="2026-04-26"> |
| <owner>yuhsuan@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Logged at each call to AudioManagerBase::MakeAudioOutputStream to indicate |
| any errors. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Output.Win.{AudioOutputMethod}Error" |
| enum="Hresult" expires_after="2026-05-17"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Errors from various methods on WASAPIAudioOutputStream. Recorded upon a |
| failure being returned from a call into WASAPI. |
| </summary> |
| <token key="AudioOutputMethod"> |
| <variant name="Open"/> |
| <variant name="Render"/> |
| <variant name="Run"/> |
| <variant name="Start"/> |
| <variant name="Stop"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.OutputDeviceAuthorizationTime" units="ms" |
| expires_after="2026-04-26"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Time delta between the moment output device authorization request is |
| received by the browser and the moment its processessing is finished (and |
| reply is to be sent back to the renderer if IPC is not closed yet). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.OutputDeviceMixer.MixedPlaybackStatus" |
| enum="AudioOutputDeviceMixerMixedPlaybackStatus" expires_after="2026-05-31"> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Health status of the mixed playback. Recorded when mixed playback stopped or |
| failed to start. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.OutputDeviceMixer.OvertimeCount" units="count" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>saza@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Number of times over a sampling interval (1000 callbacks) when the mixing |
| callback took longer than the playback buffer duration to finish. Capped at |
| 100 (1/10 of all callbacks). Not logged if the mixer was called less than |
| 1000 times. Warning: this histogram was expired from 2025-11-17 to |
| 2025-12-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.OutputDeviceMixer.StreamStatus" |
| enum="AudioOutputDeviceMixerStreamStatus" expires_after="2026-05-10"> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Health status of each output stream managed by mixer. Recorded when the |
| stream is closed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.OutputDeviceMixerManager.StreamCreation" |
| enum="AudioOutputDeviceMixerManagerStreamCreation" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| A path OutputDeviceMixerManager uses to create an output stream. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Processing.CaptureDelayMs" units="ms" |
| expires_after="2026-06-07"> |
| <owner>saza@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The time, in milliseconds, between when a block of audio is read from the |
| soundcard and when it's presented to the audio processor. Used in |
| calculating the total system delay for the audio processor. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Processing.CaptureDelayVarianceMs" |
| units="ms squared" expires_after="2026-05-11"> |
| <owner>saza@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The variance of the capture delay in milliseconds (see |
| Media.Audio.Processing.CaptureDelayMs). Logged once every second and |
| calculated over the past second of data. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Processing.RenderDelayMs" units="ms" |
| expires_after="2026-05-03"> |
| <owner>saza@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The time, in milliseconds, between when a block of audio is presented to the |
| audio processor and the time it's played out on the soundcard. Used in |
| calculating the total system delay for the audio processor. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Processing.RenderDelayVarianceMs" |
| units="ms squared" expires_after="2026-05-11"> |
| <owner>saza@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The variance of the render delay in milliseconds (see |
| Media.Audio.Processing.RenderDelayMs). Logged once every second and |
| calculated over the past second of data. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Processing.TotalDelayMs" units="ms" |
| expires_after="2026-06-07"> |
| <owner>saza@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The estimated total audio system delay presented to the audio processor. The |
| sum of the individual capture and render delays at similar points in time. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Processing.TotalDelayVarianceMs" |
| units="ms squared" expires_after="2026-05-11"> |
| <owner>saza@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The variance of the total delay in milliseconds (see |
| Media.Audio.Processing.TotalDelayMs). Logged once every second and |
| calculated over the past second of data. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.RawProcessingSupportedWin" enum="BooleanSupported" |
| expires_after="2027-01-04"> |
| <owner>henrika@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether the capture device supports raw audio capture or not. Emitted when |
| the audio input stream is closed but only on Windows platforms. Only |
| uploaded for the case when analog AGC is enabled, i.e., for WebRTC-based |
| audio input streams. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.FramesRequested" units="frames" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of frames audio is actually rendered at if the number is |
| different from the desired number of frames. If the desired frame size is |
| used, this value will be 0. Typically, Chrome will want to use a 10ms buffer |
| (e.g. 480 frames for a sample rate of 48kHz), but we might have to render |
| audio 256 frames at a time. This histogram gives us an indication as to how |
| frequent that is and what buffer sizes are used in practice. This value is |
| logged when an audio output stream is stopped. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.GetSourceDataTime.WebRTC" |
| units="microseconds" expires_after="2026-05-11"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The time spent to get audio data from the source. For WebRTC, it's the time |
| spent in WebRtcAudioRenderer::SourceCallback. Logged every function call, |
| which is every 10 ms. |
| |
| Warning: This metric may include reports from clients with low-resolution |
| clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports |
| will cause this metric to have an abnormal distribution. When considering |
| revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the |
| solution. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.GetSourceDataTimeMax.WebRTC" |
| units="microseconds" expires_after="2026-05-11"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The maximum time spent to get audio data from the source during a session. |
| For WebRTC, it's the time spent in WebRtcAudioRenderer::SourceCallback. A |
| session is between Start() and Stop() of WebRtcAudioRenderer. |
| |
| Warning: This metric may include reports from clients with low-resolution |
| clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports |
| will cause this metric to have an abnormal distribution. When considering |
| revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the |
| solution. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.OutputDeviceAuthorizationTime" units="ms" |
| expires_after="2026-05-17"> |
| <owner>olka@chromium.org</owner> |
| <owner>henrika@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Similar to Media.Audio.OutputDeviceAuthorizationTime, this histogram |
| measures the time required for device authorization, but it is measured on |
| the renderer side when AudioOutputDevice calls RequestDeviceAuthorization on |
| the IO thread until it receives OnDeviceAuthorized, also on the IO thread. |
| Note that an authorization timeout will cause OnDeviceAuthorized to be |
| called, so for platforms that use a timeout, very few times will be above |
| the timeout value. Warning: this histogram was expired from 2020-04-05 to |
| 2021-06-04; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.OutputDeviceAuthorizationTimedOut" |
| enum="BooleanTimedOut" expires_after="2026-05-24"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether audio output device timed out waiting for authorization reply from |
| the browser side. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.OutputDeviceStartTime2" units="ms" |
| expires_after="2026-04-13"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The time delta from an AudioOutputDevice sending its first PlayStream |
| message to it getting its first data callback. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.OutputDeviceStatus" |
| enum="OutputDeviceStatus" expires_after="2026-06-07"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Device status received in response to device authorization request. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.OutputStreamDuration2" units="ms" |
| expires_after="2026-05-10"> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| This histogram measures the duration of every output stream, as seen from |
| the renderer. It counts from when it has been successfully started, until it |
| is stopped. Streams that fail to start are not logged. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.StreamCallbackError2" |
| enum="AudioRenderDeviceError" expires_after="never"> |
| <!-- expires-never: Audio pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| When AudioOutputDevice is stopped, this stat is recorded with whether an |
| error callback was ever received over IPC, and in that case whether the |
| error occurred during or after stream creation. Expired in Apr 2020 and |
| re-enabled in May 2021. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.Render.SystemDelay" units="ms" |
| expires_after="2026-05-17"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The delay between audio being delivered to the OS-specific implementation of |
| AudioOutputStream and the audio being played out by the speakers. Reported |
| every time the AudioOutputStream calls AudioSourceCallback::OnMoreData. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.TabAudioMuted" enum="Boolean" |
| expires_after="2026-05-12"> |
| <owner>evliu@google.com</owner> |
| <owner>chrome-media-ux@google.com</owner> |
| <summary> |
| Logged when a user clicks on the audio indicator button in the tab strip. |
| Logs true if the click mutes the tab and false if the click unmutes the tab. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.TrackAudioRenderer.DeviceStatus" |
| enum="OutputDeviceStatus" expires_after="never"> |
| <!-- expires-never: used for audio output devices monitoring. --> |
| |
| <!-- https://crbug.com/986492 --> |
| |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Device status received during TrackAudioRenderer initialization. This is a |
| specific case of Media.Audio.Render.OutputDeviceStatus histogram. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.TrackAudioRenderer.SwitchDeviceStatus" |
| enum="OutputDeviceStatus" expires_after="never"> |
| <!-- expires-never: used for audio output devices monitoring. --> |
| |
| <!-- https://crbug.com/986492 --> |
| |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Device status received by TrackAudioRenderer when switching the output |
| device. This is a specific case of Media.Audio.Render.OutputDeviceStatus |
| histogram. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.WebRTCAudioRenderer.DeviceStatus" |
| enum="OutputDeviceStatus" expires_after="never"> |
| <!-- expires-never: used for WebRTC audio output devices monitoring. --> |
| |
| <!-- https://crbug.com/986501 --> |
| |
| <owner>olka@chromium.org</owner> |
| <owner>fhrenqvist@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Device status received during WebRTCAudioRenderer initialization. This is a |
| specific case of Media.Audio.Render.OutputDeviceStatus histogram. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.WebRTCAudioRenderer.SwitchDeviceStatus" |
| enum="OutputDeviceStatus" expires_after="never"> |
| <!-- expires-never: used for WebRTC audio output devices monitoring. --> |
| |
| <!-- https://crbug.com/986501 --> |
| |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Device status received by WebRTCAudioRenderer when switching the output |
| device. This is a specific case of Media.Audio.Render.OutputDeviceStatus |
| histogram. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Audio.{Type}.EarlyGlitchDetected" enum="BooleanDetected" |
| expires_after="2026-04-26"> |
| <owner>olka@chromium.org</owner> |
| <owner>saza@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether a glitch in the {Type} audio at the OS level was detected during the |
| first 1000 OS callbacks of an active input/output stream. A glitch is |
| detected if the OS skips providing/requesting any frames of audio, and is |
| recorded when the stream ends, as long as the stream saw at least one OS |
| callback. Reported on Windows and Mac. |
| </summary> |
| <token key="Type"> |
| <variant name="Capture"/> |
| <variant name="Loopback"/> |
| <variant name="LoopbackReference"/> |
| <variant name="Render"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.{Type}.Glitches2" units="glitches" |
| expires_after="2026-04-12"> |
| <owner>olka@chromium.org</owner> |
| <owner>saza@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of glitches that were detected at the OS level while an audio |
| {Type} stream was active. A glitch is detected if the OS skips |
| providing/requesting any frames of audio. This value is aggregated over a |
| period of 1000 OS callbacks (every 10 seconds for buffer size 10 ms) and is |
| logged at the end of each collection interval. Not recorded for streams |
| shorter than 1000 callbacks. Reported on Windows, Mac and ChromeOS. |
| </summary> |
| <token key="Type"> |
| <variant name="Capture"/> |
| <variant name="Loopback"/> |
| <variant name="LoopbackReference"/> |
| <variant name="Render"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.{Type}.LargestGlitchMs2" units="ms" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>saza@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The length in milliseconds of the largest glitch that was detected at the OS |
| level by an audio input {Type} stream. This value is aggregated over a |
| period of 1000 OS callbacks (every 10 seconds for buffer size 10 ms) and is |
| logged at the end of each collection interval if any glitches were detected. |
| Not recorded for streams shorter than 1000 callbacks. Reported on Windows |
| and Mac. |
| </summary> |
| <token key="Type"> |
| <variant name="Capture"/> |
| <variant name="Loopback"/> |
| <variant name="LoopbackReference"/> |
| <variant name="Render"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.{Type}.LostFramesInMs2" units="ms" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>saza@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The combined length in milliseconds of {Type} audio glitches detected at the |
| OS level. This is useful to know in particular for audio processing such as |
| echo cancellation. This value is aggregated over a period of 1000 OS |
| callbacks (every 10 seconds for buffer size 10 ms) and is logged at the end |
| of each collection interval if any glitches were detected. Not recorded for |
| streams shorter than 1000 callbacks. Reported on Windows and Mac. |
| </summary> |
| <token key="Type"> |
| <variant name="Capture"/> |
| <variant name="Loopback"/> |
| <variant name="LoopbackReference"/> |
| <variant name="Render"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Audio.{Type}.SystemGlitchDuration" units="ms" |
| expires_after="2026-05-03"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The duration of audio glitches occurring in the OS-specific implementation |
| of an audio stream (AudioInputStream for Capture and Loopback, and |
| AudioOutputStream for Render). Reported every time a glitch occurs. |
| </summary> |
| <token key="Type"> |
| <variant name="Capture"/> |
| <variant name="Loopback"/> |
| <variant name="Render"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.AudioCapturerAudioGlitches" enum="AudioGlitchResult" |
| expires_after="2026-05-24"> |
| <owner>olka@chromium.org</owner> |
| <owner>gustaf@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether there is input audio glitches due to dropped input audio data or |
| not. Sampled when a low-latency input audio stream is destructed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioCapturerDroppedData10sIntervals" units="drops" |
| expires_after="2026-05-11"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of input audio data blocks that were dropped at the |
| browser/renderer boundary due to for example buffer overflow in the writer |
| side buffer or in the socket. This value is aggregated over a period of 1000 |
| input data pushes (every 10 seconds for buffer size 10 ms) and is logged at |
| the end of each collection interval. Not recorded for streams with less than |
| 1000 input data pushes. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioCapturerDroppedDataBelow10s" units="drops" |
| expires_after="2026-05-11"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of input audio data blocks that were dropped at the |
| browser/renderer boundary due to for example buffer overflow in the writer |
| side buffer or in the socket. This value is only logged for streams with |
| less than 1000 input data pushes (10 seconds for buffer size 10 ms). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioCapturerMissedReadDeadline10sIntervals" |
| units="misses" expires_after="2026-01-18"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of times input audio data blocks that had to be buffered because |
| there was not room in the shared memory ring buffer on the browser/renderer |
| boundary. This happens if the reading side hasn't read data in time. This |
| value is aggregated over a period of 1000 input data pushes (every 10 |
| seconds for buffer size 10 ms) and is logged at the end of each collection |
| interval. Not recorded for streams with less than 1000 input data pushes. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioCapturerMissedReadDeadlineBelow10s" units="misses" |
| expires_after="2026-01-04"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of times input audio data blocks that had to be buffered because |
| there was not room in the shared memory ring buffer on the browser/renderer |
| boundary. This happens if the reading side hasn't read data in time. This |
| value is only logged for streams with less than 1000 input data pushes (10 |
| seconds for buffer size 10 ms). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioCodec" enum="AudioCodec" expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <summary>Audio codec used in HTML5 media.</summary> |
| </histogram> |
| |
| <histogram name="Media.AudioCodecProfile.AAC" enum="AudioCodecProfile" |
| expires_after="2026-06-08"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Audio codec profile used in HTML5 media for AAC playback.</summary> |
| </histogram> |
| |
| <histogram name="Media.AudioDeviceConnectionStatus.{AudioDeviceType}" |
| enum="AudioDeviceConnectionStatus" expires_after="2026-04-26"> |
| <owner>iwells@chromium.org</owner> |
| <owner>clank-readaloud@google.com</owner> |
| <summary> |
| Records connection status changes for {AudioDeviceType} audio devices, |
| emitted when a device is connected or disconnected. Disconnection of |
| Bluetooth devices may be reported more than fifteen seconds after the device |
| is actually disconnected. If using a 3.5mm-to-USB adapter, a 3.5mm device |
| may be reported as USB. |
| </summary> |
| <token key="AudioDeviceType"> |
| <variant name="Bluetooth"/> |
| <variant name="USB"/> |
| <variant name="Wired"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.AudioDuckerWin.UnduckSessionIterationResult" |
| enum="BooleanSuccess" expires_after="2026-05-10"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the AudioDuckerWin attempts to stop ducking other applications |
| while at least 1 application is currently being ducked. Records `Failure` if |
| we receive errors querying the OS for the list of audio sessions, otherwise |
| records `Success`. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioDuckerWin.UnduckSessionResult" |
| enum="BooleanSuccess" expires_after="2026-05-10"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the AudioDuckerWin attempts to stop ducking another |
| application. Records `Failure` if we receive errors from the OS when |
| attempting to re-adjust the other application's volume, otherwise records |
| `Success`. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioInputController{MediaAudioInputControllerTime}" |
| units="ms" expires_after="never"> |
| <!-- expires-never: Audio pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Measures the time taken for AudioInputController:: |
| {MediaAudioInputControllerTime} |
| </summary> |
| <token key="MediaAudioInputControllerTime"> |
| <variant name=""/> |
| <variant name=".CloseTime" |
| summary="Measures the time taken for DoClose()."/> |
| <variant name=".CreateTime" |
| summary="Measures the time taken for DoCreate()."/> |
| <variant name=".RecordTime" |
| summary="Measures the time taken for DoRecord()."/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.AudioInputDevice.AudioServiceDelay" units="ms" |
| expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The audio capture delay in the Audio Service, including the IPC and the OS. |
| Logged at every CaptureCallback::Capture() call at AudioInputDevice level. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioInputDevice.AudioServiceGlitchCount{Duration}" |
| units="glitches" expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of events causing audio capture glitches in the Audio Service, |
| including the IPC and the OS. A glitch is when capture data is dropped due |
| to a buffer overflow. Logged at the end of each 1000-callback interval for |
| Intervals. Logged at the end of the stream for Short. |
| </summary> |
| <token key="Duration" variants="AudioAggregationDuration"/> |
| </histogram> |
| |
| <histogram name="Media.AudioInputDevice.AudioServiceGlitchDuration{Duration}" |
| units="permille" expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The proportion of the audio capture interval that was dropped due to buffer |
| overflows in the Audio Service, including the IPC and the OS. Logged at the |
| end of each 1000-callback interval for Intervals. Logged at the end of the |
| stream for Short. |
| </summary> |
| <token key="Duration" variants="AudioAggregationDuration"/> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputController.CallbackError" enum="BooleanError" |
| expires_after="2026-05-24"> |
| <owner>olka@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| A boolean that reflects whether or not an error was reported during audio |
| rendering, reported after a stream has stopped, if it was started. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputController.LifeTime" units="ms" |
| expires_after="never"> |
| <!-- expires-never: used for audio output controller monitoring. --> |
| |
| <!-- https://crbug.com/1036864 --> |
| |
| <owner>olka@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Time interval from the output stream controller construction to its |
| destruction. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputController.ProxyStreamCreationResult" |
| enum="AudioOutputStreamCreationResult" expires_after="2026-05-10"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether an AudioOutputController succeeded in creating and opening an output |
| stream proxy after receiving a default device change event. Note: in |
| September 2021 this histogram unintentionally swapped its meaning with |
| Media.AudioOutputController.ProxyStreamCreationResultForDeviceChange. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.AudioOutputController.ProxyStreamCreationResultForDeviceChange" |
| enum="AudioOutputStreamCreationResult" expires_after="2026-05-10"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether an AudioOutputController succeeded in creating and opening an output |
| stream proxy. Only logged for the initial creation, subsequent re-creations |
| due to device change events are logged in the |
| Media.AudioOutputController.ProxyStreamCreationResult histogram. Note: in |
| September 2021 this histogram unintentionally swapped its meaning with |
| Media.AudioOutputController.ProxyStreamCreationResult. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputControllerDataNotReady" units="ms" |
| expires_after="never"> |
| <!-- expires-never: Audio pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Time spent waiting in AudioOutputController::WaitTillDataReady() if the data |
| was not initially available. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputControllerPlaybackStartupSuccess" |
| enum="BooleanSuccess" expires_after="never"> |
| <!-- expires-never: Audio pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether playback started successfully after stream startup was requested. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputDevice.AudioServiceDelay{LatencyTag}" |
| units="ms" expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The audio playout delay in the Audio Service, including the IPC and the OS. |
| Logged at every RenderCallback::Render() call at AudioPlayoutDevice level. |
| </summary> |
| <token key="LatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram |
| name="Media.AudioOutputDevice.AudioServiceGlitchCount{Duration}{LatencyTag}" |
| units="glitches" expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of events causing audio playout glitches in the Audio Service, |
| including the IPC and the OS. A glitch is an inserted silence due to an |
| underrun. Logged at the end of each 1000-callback interval for Intervals. |
| Logged at the end of the stream for Short. |
| </summary> |
| <token key="Duration" variants="AudioAggregationDuration"/> |
| <token key="LatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram |
| name="Media.AudioOutputDevice.AudioServiceGlitchDuration{Duration}{LatencyTag}" |
| units="permille" expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The proportion of the audio playout interval that was silent due to |
| underruns in the Audio Service, including the IPC and the OS. Logged at the |
| end of each 1000-callback interval for Intervals. Logged at the end of the |
| stream for Short. |
| </summary> |
| <token key="Duration" variants="AudioAggregationDuration"/> |
| <token key="LatencyTag" variants="AudioLatencyTag"/> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputResampler.OpenLowLatencyStream2" |
| enum="AudioOutputResamplerLowLatencyOpenStreamResult" |
| expires_after="2026-05-24"> |
| <owner>olka@chromium.org</owner> |
| <owner>armax@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether a low latency stream to be rendered through the resampler was opened |
| successfully or which type of fallback stream was used instead. In case a |
| fake fallback stream is used it means audio rendered through the resampler |
| will be muted. In case fallback fails entirely, renderer callback error will |
| be signalled. In case audio output stream is opened in offload mode, record |
| successful opening in offload mode explicitly to distinguish from |
| non-offload mode. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioOutputStreamProxy.StreamFormat" |
| enum="AudioOutputProxyStreamFormat" expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Records format used by AudioManager to create audio output stream proxy. If |
| a fake stream is created it results in muted audio playback. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioRendererAudioGlitches2.{LatencyTag}" |
| enum="AudioGlitchResult" expires_after="2026-05-24"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Captures if render-side audio glitches are detected or not. Sampled when a |
| low-latency output audio stream is destructed. |
| </summary> |
| <token key="LatencyTag"> |
| <variant name="" summary="All latencies combined"/> |
| <variant name="LatencyExactMs"/> |
| <variant name="LatencyInteractive"/> |
| <variant name="LatencyPlayback"/> |
| <variant name="LatencyRtc"/> |
| <variant name="LatencyUnknown"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.AudioRendererImpl.SinkStatus" enum="OutputDeviceStatus" |
| expires_after="2026-06-07"> |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Status of audio sink used by AudioRendererImpl. If not OK, a NullAudioSink |
| will be used for audio output instead. This is logged for every call to |
| AudioRendererImpl::Initialize, which generally occurs once per active audio |
| session (i.e., between a play and pause). If audio track changes are ever |
| enabled, it may additionally be called for every audio track change. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.AudioRendererMissedDeadline3{Mixing}{Duration}{LatencyTag}" |
| units="misses" expires_after="2026-05-24"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| The number of SyncReader::Read() calls where the renderer missed its |
| realtime deadline. Logged at the end of each 1000-read interval for |
| Intervals. Logged at the end of the stream for Short. |
| </summary> |
| <token key="Mixing"> |
| <variant name="" summary="Whole stream lifetime"/> |
| <variant name=".Mixing" summary="During mixing"/> |
| </token> |
| <token key="Duration"> |
| <variant name=".Intervals" summary="Whole intervals of 1000 reads"/> |
| <variant name=".Short" summary="Streams shorter than 1000 reads"/> |
| </token> |
| <token key="LatencyTag"> |
| <variant name="" summary="All latencies combined"/> |
| <variant name=".LatencyExactMs"/> |
| <variant name=".LatencyInteractive"/> |
| <variant name=".LatencyPlayback"/> |
| <variant name=".LatencyRtc"/> |
| <variant name=".LatencyUnknown"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.AudioService.AudioManagerStartupTime" units="ms" |
| expires_after="2026-04-12"> |
| <owner>fhernqvist@google.com</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| How long it take for the audio manager instance to be created by the audio |
| service, in case the audio service owns the audio manager. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioSystem.GetDeviceDescription.Result" |
| enum="BooleanSuccess" expires_after="2024-03-24"> |
| <owner>toprice@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <summary> |
| Records whether AudioSystemToServiceAdapter::GetDeviceDescriptions calls to |
| the audio service returned successfully, or failed and retured an default |
| empty list due to an audio service crash. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AudioThreadStatus" enum="AudioThreadStatus" |
| expires_after="never"> |
| <!-- expires-never: Audio pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| State of the audio thread. A value of "started" is emitted once |
| the hang monitor has been initialized. If the thread is detected as hung |
| later, a value of "hung" is emitted. If the hung thread later |
| recovers a value of "recovered" is emitted. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AutoPictureInPicture.BackToTabPostHideTime" units="ms" |
| expires_after="2026-10-31"> |
| <owner>philyan@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the time elapsed between the user hiding an auto-picture-in-picture |
| window and the user returning to the original tab. This is only recorded |
| when the user taps the "hide" button (a headphone icon) on the PiP |
| window on Android, which keeps the audio playing in the background. The hide |
| icon is only visible for auto-pip initialized pausable media. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.PromptResultV2" |
| enum="MediaAutoPictureInPicturePromptResult" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded for automatic picture in picture reason |
| "{AutomaticReason}", when the user either selects an option from |
| the Automatic picture-in-picture permission prompt, or when the user |
| manually closes the picture-in-picture window without responding to the |
| prompt, or when we decide to not show the prompt at all. When the prompt is |
| shown, this records their selection (or "Ignored" if they did not |
| select an option). When the prompt is not shown, records why it was not |
| shown. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTime" |
| units="ms" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent on a Picture in Picture window for automatic picture in |
| picture reason "{AutomaticReason}". The timer starts counting |
| every time the AutoPictureInPictureTabHelper calls |
| `EnterAutoPictureInPicture`; the time elapsed is recorded when the Picture |
| in Picture window is closed. This metric is recorded regardless of the |
| Picture in Picture window type (document vs video), and of the reason for |
| closing the window (UI interaction, returning back to opener tab, etc.). |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTimeForSession" |
| units="ms" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent accross all Picture in Picture windows opened by the |
| `AutoPictureInPictureTabHelper`, for automatic picture in picture reason |
| "{AutomaticReason}". The timer starts counting every time the |
| AutoPictureInPictureTabHelper calls `EnterAutoPictureInPicture`; the time is |
| accumulated any time the tab helper opens and subsequently closes a picture |
| in picture window. The total picture in picture time is recorded when the |
| `AutoPictureInPictureTabHelper` is destroyed. This metric does not |
| differentiate between the Picture in Picture window types (document vs |
| video). |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTimeForSessionV2" |
| units="ms" expires_after="2026-06-11"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent accross all Picture in Picture windows opened by the |
| `AutoPictureInPictureTabHelper`, for automatic picture in picture reason |
| "{AutomaticReason}". The timer starts counting every time the |
| AutoPictureInPictureTabHelper calls `EnterAutoPictureInPicture`; the time is |
| accumulated any time the tab helper opens and subsequently closes a picture |
| in picture window. The total picture in picture time is recorded when the |
| `AutoPictureInPictureTabHelper` is destroyed. This metric does not |
| differentiate between the Picture in Picture window types (document vs |
| video). |
| |
| Similar to |
| Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTimeForSession, |
| but with a maximum of 10 hours and a bucket size of 100. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTimeV2" |
| units="ms" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent on a Picture in Picture window for automatic picture in |
| picture reason "{AutomaticReason}". The timer starts counting |
| every time the AutoPictureInPictureTabHelper calls |
| `EnterAutoPictureInPicture`; the time elapsed is recorded when the Picture |
| in Picture window is closed. This metric is recorded regardless of the |
| Picture in Picture window type (document vs video), and of the reason for |
| closing the window (UI interaction, returning back to opener tab, etc.). |
| |
| Similar to |
| Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTime, |
| but with a maximum of 10 hours and a bucket size of 100. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.MediaPlayback.PlaybackToTotalTimeRatio" |
| units="%" expires_after="2026-09-18"> |
| <owner>philyan@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the ratio of watch time (i.e., when the video was actively playing) |
| to total time the Picture-in-Picture window was open, for windows opened |
| automatically for the MediaPlayback reason. Recorded when the window is |
| closed. This helps understand user engagement with auto-PiP windows. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.MediaPlayback.TotalPlaybackTime" |
| units="ms" expires_after="2026-09-18"> |
| <owner>philyan@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the cumulative watch time (i.e., when the video was actively |
| playing) within a Picture-in-Picture window that was opened automatically |
| for the MediaPlayback reason. Recorded when the window is closed. To |
| understand the proportion of time spent watching video vs the total time the |
| window was open, see `PlaybackToTotalTimeRatio`. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.{AutomaticReason}.PromptResultV2" |
| enum="MediaAutoPictureInPicturePromptResult" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded for automatic picture in picture reason |
| "{AutomaticReason}", when the user either selects an option from |
| the Automatic picture-in-picture permission prompt, or when the user |
| manually closes the picture-in-picture window without responding to the |
| prompt, or when we decide to not show the prompt at all. When the prompt is |
| shown, this records their selection (or "Ignored" if they did not |
| select an option). When the prompt is not shown, records why it was not |
| shown. |
| |
| The AutomaticReasonV2 histograms add the BrowserInitiated bucket. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="BrowserInitiated"/> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.{AutomaticReason}.TotalTime" |
| units="ms" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent on a Picture in Picture window for automatic picture in |
| picture reason "{AutomaticReason}". The timer starts counting |
| every time the AutoPictureInPictureTabHelper calls |
| `EnterAutoPictureInPicture`; the time elapsed is recorded when the Picture |
| in Picture window is closed. This metric is recorded regardless of the |
| Picture in Picture window type (document vs video), and of the reason for |
| closing the window (UI interaction, returning back to opener tab, etc.). |
| |
| The AutomaticReasonV2 histograms add the BrowserInitiated bucket. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="BrowserInitiated"/> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.{AutomaticReason}.TotalTimeForSession" |
| units="ms" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent accross all Picture in Picture windows opened by the |
| `AutoPictureInPictureTabHelper`, for automatic picture in picture reason |
| "{AutomaticReason}". The timer starts counting every time the |
| AutoPictureInPictureTabHelper calls `EnterAutoPictureInPicture`; the time is |
| accumulated any time the tab helper opens and subsequently closes a picture |
| in picture window. The total picture in picture time is recorded when the |
| `AutoPictureInPictureTabHelper` is destroyed. This metric does not |
| differentiate between the Picture in Picture window types (document vs |
| video). |
| |
| The AutomaticReasonV2 histograms add the BrowserInitiated bucket. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="BrowserInitiated"/> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.{AutomaticReason}.TotalTimeForSessionV2" |
| units="ms" expires_after="2026-06-11"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent accross all Picture in Picture windows opened by the |
| `AutoPictureInPictureTabHelper`, for automatic picture in picture reason |
| "{AutomaticReason}". The timer starts counting every time the |
| AutoPictureInPictureTabHelper calls `EnterAutoPictureInPicture`; the time is |
| accumulated any time the tab helper opens and subsequently closes a picture |
| in picture window. The total picture in picture time is recorded when the |
| `AutoPictureInPictureTabHelper` is destroyed. This metric does not |
| differentiate between the Picture in Picture window types (document vs |
| video). |
| |
| Similar to |
| Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTimeForSession, |
| but with a maximum of 10 hours and a bucket size of 100. |
| |
| The AutomaticReasonV2 histograms add the BrowserInitiated bucket. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="BrowserInitiated"/> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReasonV2.{AutomaticReason}.TotalTimeV2" |
| units="ms" expires_after="2026-06-18"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent on a Picture in Picture window for automatic picture in |
| picture reason "{AutomaticReason}". The timer starts counting |
| every time the AutoPictureInPictureTabHelper calls |
| `EnterAutoPictureInPicture`; the time elapsed is recorded when the Picture |
| in Picture window is closed. This metric is recorded regardless of the |
| Picture in Picture window type (document vs video), and of the reason for |
| closing the window (UI interaction, returning back to opener tab, etc.). |
| |
| Similar to |
| Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.{AutomaticReason}.TotalTime, |
| but with a maximum of 10 hours and a bucket size of 100. |
| |
| The AutomaticReasonV2 histograms add the BrowserInitiated bucket. |
| </summary> |
| <token key="AutomaticReason"> |
| <variant name="BrowserInitiated"/> |
| <variant name="MediaPlayback"/> |
| <variant name="VideoConferencing"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.AutoPictureInPicture.PromptResultV2" |
| enum="MediaAutoPictureInPicturePromptResult" expires_after="2026-04-19"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the user either selects an option from the Automatic |
| picture-in-picture permission prompt, or when the user manually closes the |
| picture-in-picture window without responding to the prompt, or when we |
| decide to not show the prompt at all. When the prompt is shown, this records |
| their selection (or "Ignored" if they did not select an option). |
| When the prompt is not shown, records why it was not shown. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AVDA.FrameInformation" enum="AVDAFrameInformation" |
| expires_after="2020-09-05"> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record a count for each frame sent to the client by AVDA, separated by what |
| type of frame it is: Non Overlay, secure overlay, etc. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.AVDA.FrameSentAsOverlay" enum="BooleanFrameAsOverlay" |
| expires_after="M86"> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record a count for each frame sent to the client by AVDA. True counts |
| indicate that the frame was an overlay (SurfaceView). False counts are for |
| Non Overlay frames. This will be deprecated in favor of |
| Media.AVDA.FrameInformation in M63. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.BreakoutBox.Usage" enum="BreakoutBoxUsage" |
| expires_after="2026-09-25"> |
| <owner>guidou@chromium.org</owner> |
| <owner>hta@chromium.org</owner> |
| <owner>tguilbert@chromium.org</owner> |
| <summary> |
| Usage of various BreakoutBox features. Recorded when a stream is created or |
| transferred in MediaStreamTrackProcessor or MediaStreamTrackGenerator. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Capabilities.DecodingInfo.Time.Video" units="ms" |
| expires_after="never"> |
| <!-- expires-never: performance monitoring. --> |
| |
| <owner>chcunningham@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time spent between receiving a decodingInfo() call and resolving it. It only |
| record successful calls and ignores audio-only. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Capabilities.DecodingInfo.Time.Video.Clear" units="ms" |
| expires_after="never"> |
| <!-- expires-never: performance monitoring. --> |
| |
| <owner>chcunningham@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time spent between receiving a decodingInfo() call and resolving it. It only |
| record successful calls and ignores audio-only. This is a subset of |
| Media.Capabilities.DecodingInfo.RequestTime.Video that only takes into |
| account clear content. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Capabilities.DecodingInfo.Time.Video.Encrypted" |
| units="ms" expires_after="never"> |
| <!-- expires-never: performance monitoring. --> |
| |
| <owner>chcunningham@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time spent between receiving a decodingInfo() call and resolving it. It only |
| record successful calls and ignores audio-only. This is a subset of |
| Media.Capabilities.DecodingInfo.RequestTime.Video that only takes into |
| account encrypted content. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ConditionalFocus.Decision" |
| enum="ConditionalFocusDecision" expires_after="2023-09-17"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>toprice@chromium.org</owner> |
| <summary> |
| Records (1) explicit conditional-focus API invocations, (2) microtask-borne |
| decisions and (3) timer-triggered decisions. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ConditionalFocus.ExplicitLateCall" units="ms" |
| expires_after="2023-07-18"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>toprice@chromium.org</owner> |
| <summary> |
| Records the delay experienced by late explicit invocations of the focus() |
| API. By "late" we mean those calls which had no effect, on account |
| of arriving after the browser-side timer forced an implicit decision. (Note |
| that post-microtask explicit invocations are not recorded. They're simply an |
| application error.) |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ConditionalFocus.ExplicitOnTimeCall" units="ms" |
| expires_after="2023-07-18"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>toprice@chromium.org</owner> |
| <summary> |
| Records the delay experienced by on-time explicit invocations of the focus() |
| API. By "on-time" we mean those calls which had an effect, on |
| account of arriving before either the microtask or the browser-side timer |
| forced an implicit decision. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ConditionalFocus.MicrotaskDelay" units="ms" |
| expires_after="2023-07-18"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>toprice@chromium.org</owner> |
| <summary> |
| Track the delay distribution of invocations of the microtask. Measure this |
| independently of whether an explicit API call was made, and independently of |
| whether the browser-side timer expired. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ContentAudioDecoder.CreateReaderSuccess" |
| enum="BooleanSuccess" expires_after="2026-12-05"> |
| <owner>jophba@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records whether creating an AudioFileReader for processing WebAudio was |
| successful. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ContentAudioDecoder.DecodeTimePerFrame" units="ms" |
| expires_after="2026-12-05"> |
| <owner>jophba@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the average amount of time per frame required to decode an audio |
| file provided to the WebAudio API. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ContentAudioDecoder.Duration" units="ms" |
| expires_after="2026-12-05"> |
| <owner>jophba@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the file duration calculated during decoding an audio file provided |
| to the WebAudio API. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Controls.CTR{MediaControlsElements}" |
| enum="MediaControlsCTREvent" expires_after="2025-01-05"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records events related to click through rate (CTR) calculation. |
| |
| The CTR can be calculated by computing "Interacted" / |
| "Displayed". "Interacted", for buttons, means that they |
| were clicked. For sliders, it will reflect any change in the internal state |
| and includes other events in addition to clicks. "Displayed" means |
| that the control element was meant to be displayed in the controls. It does |
| not mean that the user have seen the element so is not to be confused with |
| visibility. Furthermore, because the controls UI changes while loading, |
| "Displayed" is only computed when metadata are available unless |
| preloading was disabled on the element or the browser. |
| |
| Data is missing from 2020-04-05 to 2021-05-18. {MediaControlsElements} |
| </summary> |
| <token key="MediaControlsElements"> |
| <variant name=""/> |
| <variant name=".CastButton" summary="Cast button"/> |
| <variant name=".CastOverflowButton" summary="Cast overflow button"/> |
| <variant name=".CastOverlayButton" summary="Cast overlay button"/> |
| <variant name=".ClosedCaptionButton" summary="Closed caption button"/> |
| <variant name=".ClosedCaptionOverflowButton" |
| summary="Closed caption overflow button"/> |
| <variant name=".DisplayCutoutFullscreenButton" |
| summary="Display cutout fullscreen button"/> |
| <variant name=".DownloadButton" summary="Download button"/> |
| <variant name=".DownloadOverflowButton" summary="Download overflow button"/> |
| <variant name=".FullscreenButton" summary="Fullscreen button"/> |
| <variant name=".FullscreenOverflowButton" |
| summary="Fullscreen overflow button"/> |
| <variant name=".MuteButton" summary="Mute button"/> |
| <variant name=".MuteOverflowButton" summary="Mute overflow button"/> |
| <variant name=".OverflowButton" summary="Overflow button"/> |
| <variant name=".PictureInPictureButton" |
| summary="Picture-in-Picture button"/> |
| <variant name=".PictureInPictureOverflowButton" |
| summary="Picture-in-Picture overflow button"/> |
| <variant name=".PlaybackSpeedButton" summary="Playback speed button"/> |
| <variant name=".PlaybackSpeedOverflowButton" |
| summary="Playback speed overlay button"/> |
| <variant name=".PlayOverlayButton" summary="Play overlay button"/> |
| <variant name=".PlayPauseButton" summary="Play/pause button"/> |
| <variant name=".PlayPauseOverflowButton" |
| summary="Play/pause overflow button"/> |
| <variant name=".TimelineSlider" summary="Timeline slider"/> |
| <variant name=".VolumeSlider" summary="Volume slider"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Controls.PlaybackSpeed" |
| enum="MediaControlsPlaybackSpeed" expires_after="2023-11-12"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record the playback speed selected by the user in the list of playback |
| speeds on the media controls. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.CrosGlobalMediaControls.PinAction" enum="BooleanPinned" |
| expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record each time user pins/unpins CrOS global media controls. Warning: this |
| histogram was expired from 2022-04-24 to 2024-01-04; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.CrosGlobalMediaControls.RepeatUsageInQuickSetting" |
| enum="BooleanIsRepeat" expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record each time media controls' sub-menu in quick settings is opened. True |
| if it is a repeat usage. Warning: this histogram was expired from 2022-05-01 |
| to 2024-01-04; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.CrosGlobalMediaControls.RepeatUsageOnShelf" |
| enum="BooleanIsRepeat" expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record each time global media controls on the shelf is opened. True if it is |
| a repeat usage. Warning: this histogram was expired from 2022-04-24 to |
| 2024-01-04; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.D3D11.UnusedPictureBufferCount.MultiTexture" |
| units="instances" expires_after="2022-11-01"> |
| <owner>liberato@chromium.org</owner> |
| <owner>tmathmeyer@chromium.org</owner> |
| <summary> |
| This histogram lets us count how many PictureBuffers we've overallocated |
| when we're allocating each texture separately. This case is relatively |
| simple to optimize compared to SingleTexture. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.D3D11.UnusedPictureBufferCount.SingleTexture" |
| units="instances" expires_after="2022-11-01"> |
| <owner>liberato@chromium.org</owner> |
| <owner>tmathmeyer@chromium.org</owner> |
| <summary> |
| This histogram lets us count how many PictureBuffers we've overallocated |
| when we're allocating in contiguous blocks. This case is harder to optimize |
| than the MultiTexture variant, but it is good to know the proportion of the |
| two of them to determine usage. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DetectedAudioCodecHash" enum="FFmpegCodecHashes" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Audio codec used in HTML5 media. Reporting corrected in M51 to include all |
| detected audio codecs, not just those up to and including the first one |
| supported. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DetectedAudioCodecHash.Local" enum="FFmpegCodecHashes" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Audio codec used in HTML5 media for a local file playback.</summary> |
| </histogram> |
| |
| <histogram name="Media.DetectedContainer" enum="MediaContainers" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Container used for HTML5 media. Views that include pre-M34 data will |
| categorize dash (38) and smooth streaming (39) in the "Other" |
| bucket. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DetectedContainer.Local" enum="MediaContainers" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Container used for HTML5 media for a local file playback.</summary> |
| </histogram> |
| |
| <histogram name="Media.DetectedVideoCodecHash" enum="FFmpegCodecHashes" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec used in HTML5 media. Reporting corrected in M51 to include all |
| detected video codecs, not just those up to and including the first one |
| supported. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DetectedVideoCodecHash.Local" enum="FFmpegCodecHashes" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Video codec used in HTML5 media for a local file playback.</summary> |
| </histogram> |
| |
| <histogram name="Media.DocumentPictureInPicture.CloseReason" |
| enum="DocumentPictureInPictureCloseReason" expires_after="2026-05-24"> |
| <owner>steimel@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the reason why a document picture-in-picture window is closed (e.g. |
| the user clicking on the Back to Tab button). Recorded on destruction of the |
| picture-in-picture window. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DocumentPictureInPicture.RequestedInitialHeight" |
| units="px" expires_after="2026-06-07"> |
| <owner>steimel@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the height that the website has requested for a document |
| picture-in-picture window. Recorded when calculating the initial bounds of a |
| newly-opened document picture-in-picture window. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DocumentPictureInPicture.RequestedInitialWidth" |
| units="px" expires_after="2026-02-01"> |
| <owner>steimel@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the width that the website has requested for a document |
| picture-in-picture window. Recorded when calculating the initial bounds of a |
| newly-opened document picture-in-picture window. If the website requests a |
| size larger than the area of the screen, it will be recorded as 100%. If a |
| website does not request a size or requests a size of zero, it is recorded |
| as 1%. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DocumentPictureInPicture.RequestedLargeInitialSize" |
| enum="BooleanOccurred" expires_after="2026-03-19"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when a website opens a document picture-in-picture window. Records |
| `Occurred` if the website requested a window size larger than the maximum |
| allowed window size, otherwise records `Did not occur`. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DocumentPictureInPicture.RequestedLargeResize" |
| enum="BooleanOccurred" expires_after="2026-05-24"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when a website resizes a document picture-in-picture window via the |
| `resizeTo()` or `resizeBy()` APIs. Records `Occurred` if the website |
| requested a window size larger than the maximum allowed window size, |
| otherwise records `Did not occur`. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DocumentPictureInPicture.RequestedSizeToScreenRatio" |
| units="%" expires_after="2026-04-05"> |
| <owner>steimel@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the ratio of the total screen area that the website has requested |
| for the picture-in-picture window, specifically the requested width times |
| the requested height as a ratio of the screen's width times height. Recorded |
| when calculating the initial bounds of a newly-opened document |
| picture-in-picture window. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DroppedFrameCount" units="units" expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Count of dropped frames between pipeline start and stop. Media pipeline |
| starts/stops when an HTML5 video is loaded/unloaded respectively in the |
| browser. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.DroppedFrameCount2.{RendererType}.{ClearOrEncrypted}" |
| units="units" expires_after="2026-05-24"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>frankli@microsoft.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Monitors the DroppedFrameCount that is originated from a {RendererType} and |
| the video playback is {ClearOrEncrypted}. It is the count of dropped video |
| frames when an HTML5 video is unloaded. |
| </summary> |
| <token key="RendererType" variants="RendererType"/> |
| <token key="ClearOrEncrypted"> |
| <variant name="Clear"/> |
| <variant name="Encrypted"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.ElementCapture.ProduceTarget.Function.Result" |
| enum="ProduceTargetFunctionResult" expires_after="2024-08-29"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| Tracks the result of calls to RestrictionTarget.fromElement(). Specifically, |
| this histogram tracks whether a new Promise was produced, and if not, why |
| not. Another histogram tracks the result of new Promises, i.e. whether they |
| were resolved or rejected. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ElementCapture.ProduceTarget.Promise.Result" |
| enum="ProduceTargetPromiseResult" expires_after="2024-08-29"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| When RestrictionTarget.fromElement() is called for the first time on a given |
| Element, a new Promise is produced. This histogram tracks the result of this |
| Promise - whether it was resolved or rejected. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ElementCapture.RestrictTo.Latency" units="ms" |
| expires_after="2024-09-20"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| Duration in milliseconds of the time it takes for a |
| BrowserCaptureMediaStreamTrack.restrictTo() call to resolve (either |
| successfully or with an error). Note a call which never resolves won't be |
| counted in this metric. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ElementCapture.RestrictTo.Result" |
| enum="ApplySubCaptureTargetResult" expires_after="2026-03-25"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| Tracks the result of calls to BrowserCaptureMediaStreamTrack.restrictTo(). |
| Recorded when resolving the promise produced by restrictTo(). |
| |
| Warning: this histogram was expired from 2024-09-20 to 2025-03-25; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmFileIO.FileSizeKBOnError" units="KB" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Size in KB of the last file successfully read by the CDM through CDM FileIO |
| before a specific error happens. This is reported only when the error |
| happens, which should be rare. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmFileIO.FileSizeKBOnFirstRead" units="KB" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Size in KB of the first file successfully read by the CDM through CDM |
| FileIO. This is recorded once per CDM instance. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmFileIO.TimeTo.{FileOperation}{IncognitoOrNormal}" |
| units="ms" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The actual time spent by the CDM FileIO {FileOperation} operation under |
| {IncognitoOrNormal} mode. Only recorded for successful operations. |
| </summary> |
| <token key="FileOperation" variants="FileOperation"/> |
| <token key="IncognitoOrNormal" variants="IncognitoOrNormal"/> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmFileIO.WriteFile.DataSizeKB" units="KB" |
| expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Size in KB of a file written by the CDM through CDM FileIO. This is recorded |
| once per write through the CDM. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmFileIO.{FileOperation}{IncognitoOrNormal}" |
| enum="BooleanSuccess" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether a CDM FileIO {FileOperation} operation succeded or not under |
| {IncognitoOrNormal} mode. |
| </summary> |
| <token key="FileOperation" variants="FileOperation"/> |
| <token key="IncognitoOrNormal" variants="IncognitoOrNormal"/> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmFileIO::OpenFile" enum="CdmStorageStatus" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The status of file open received by MojoCdmFileIO. This is reported every |
| time the CDM tries to open a file for read or write. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmHostVerificationStatus" |
| enum="CdmHostVerificationStatus" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The status of CDM host verification. This is reported per CDM load. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmInterfaceVersion" enum="GenericEnum" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Chromium could support multiple versions of CDM interface. This metric |
| records the CDM interface version that the CDM created by Chromium uses. |
| This is recorded once per CDM instance. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmLoadErrorCode" enum="WinGetLastError" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The error code of a library CDM load failure. Only reported on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmLoadResult" enum="CdmLoadResult" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>The result from an attempt to load a library CDM.</summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmLoadTime" units="ms" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>The time spent to load a library CDM.</summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmProcessDebuggerAttached" enum="Boolean" |
| expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Counts every time a debugger is attached to a CDM utility process. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageDatabase.IncompatibleDatabaseDetected" |
| enum="Boolean" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA records when the CdmStorageDatabase for a profile is incompatible. |
| This UMA is recorded on every OpenDatabase call that detects the database |
| with a version number of one, which means that it is operating under a |
| schema that does not include file_size and last_modified. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageDatabase.WriteFileForBigData" |
| enum="Boolean" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA records when the data being written to the CdmStorageDatabase |
| exceeds 15 KB. This UMA is recorded on every write over 15KB that succeeds. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageDatabaseSQLiteError" |
| enum="SqliteLoggedResultCode" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| SQLite specific errors reported while using the Cdm Storage Database. |
| Recorded on any error from a database operation. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageDatabaseSQLiteError.{CdmDatabaseOperation}" |
| enum="SqliteLoggedResultCode" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA records SQLite specific errors that occur when executing the |
| operation {CdmDatabaseOperation}. This UMA is recorded on every error for |
| this operation. |
| </summary> |
| <token key="CdmDatabaseOperation"> |
| <variant name="AlterDatabaseForFileSize"/> |
| <variant name="AlterDatabaseForLastModified"/> |
| <variant name="ClearDatabase"/> |
| <variant name="DeleteFile"/> |
| <variant name="DeleteForStorageKey"/> |
| <variant name="DeleteForTimeFrame"/> |
| <variant name="DeleteIfEmptyDatabase"/> |
| <variant name="GetSizeForFile"/> |
| <variant name="GetSizeForStorageKey"/> |
| <variant name="GetSizeForTimeFrame"/> |
| <variant name="OpenDatabase"/> |
| <variant name="QueryPageCount"/> |
| <variant name="QueryPageSize"/> |
| <variant name="ReadFile"/> |
| <variant name="WriteFile"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageDatabaseSQLiteError.{CdmDatabaseOperation}.{SqliteError}.Errno" |
| units="errno" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA records the errno that occur when executing the operation |
| {CdmDatabaseOperation} and getting a specific {SqliteError}. This UMA is |
| recorded every time this operation errors with the specific {SqliteError}. |
| </summary> |
| <token key="CdmDatabaseOperation"> |
| <variant name="AlterDatabaseForFileSize"/> |
| <variant name="AlterDatabaseForLastModified"/> |
| <variant name="ClearDatabase"/> |
| <variant name="DeleteFile"/> |
| <variant name="DeleteForStorageKey"/> |
| <variant name="DeleteForTimeFrame"/> |
| <variant name="DeleteIfEmptyDatabase"/> |
| <variant name="GetSizeForFile"/> |
| <variant name="GetSizeForStorageKey"/> |
| <variant name="GetSizeForTimeFrame"/> |
| <variant name="OpenDatabase"/> |
| <variant name="ReadFile"/> |
| <variant name="WriteFile"/> |
| </token> |
| <token key="SqliteError"> |
| <variant name="Busy"/> |
| <variant name="CantOpen"/> |
| <variant name="FullDisk"/> |
| <variant name="Generic"/> |
| <variant name="IoTruncate"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageManager.CurrentDatabaseUsageKB.{ProfileType}" |
| units="KB" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA records the current CdmStorageDatabase size in KB. This UMA is |
| recorded only once, on the first read, to retrieve usage levels of the |
| CdmStorageDatabase. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageManager.DatabaseOpenError" |
| enum="CdmStorageOpenError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from opening the CdmStorageDatabase. |
| Recorded on every open. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageManager.DatabaseOpenError.{ProfileType}" |
| enum="CdmStorageOpenError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from opening the CdmStorageDatabase. |
| Recorded on every open from an {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageManager.DeleteFileError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the DeleteFile function. Recorded |
| after every call of DeleteFile on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageManager.DeleteForStorageKeyError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the DeleteForStorageKey function. |
| Recorded after every call of DeleteForStorageKey on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageManager.DeleteForTimeFrameError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the DeleteForTimeFrame function. |
| Recorded after every call of DeleteForTimeFrame on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageManager.GetSizeForFileError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the GetSizeForFile function. Recorded |
| after every call of GetSizeForFile on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageManager.GetSizeForStorageKeyError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the GetSizeForStorageKey function. |
| Recorded after every call of GetSizeForStorageKey on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageManager.GetSizeForTimeFrameError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the GetSizeForTimeFrame function. |
| Recorded after every call of GetSizeForTimeFrame on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.CdmStorageManager.kDeleteForFilterError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the DeleteForFilter function. |
| Recorded after every call of DeleteForFilter on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageManager.ReadFileError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the ReadFile function. Recorded after |
| every call of ReadFile on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.EME.CdmStorageManager.WriteFileError.{ProfileType}" |
| enum="BooleanError" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This UMA logs overall error rates from the WriteFile function. Recorded |
| after every call of WriteFile on {ProfileType} profile. |
| </summary> |
| <token key="ProfileType"> |
| <variant name="Incognito"/> |
| <variant name="NonIncognito"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.EME.CrosCdmType" enum="CrosCdmType" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>cros-gfx-video@google.com</owner> |
| <summary> |
| Whether we used the platform CDM on Chrome OS that includes HW secure |
| Widevine support, or fell back to the Chrome SW CDM. Warning: this histogram |
| was expired from 2024-05-19 to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.CrosPlatformCdm.SystemCode" enum="CdmSystemCode" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>cros-gfx-video@google.com</owner> |
| <summary> |
| System code in promise rejection for ChromeOS platform CDM. Warning: this |
| histogram was expired from 2024-01-05 to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.DecoderBypassBlockCount" units="perFrame*100" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Ratio of the number of decorder bypass blocks seen / total frames displayed |
| * 100. Recorded for each video that could contain decoder bypass blocks. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.EncryptedEvent" enum="BooleanEncryptedEvent" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether EME encrypted event has been fired. Every time a WebMediaPlayerImpl |
| object is created a "false" value is reported to provide a |
| baseline. Every time an encrypted event is fired, a "true" value |
| will be reported. Note that it is possible to have multiple encrypted events |
| during the lifetime of a WebMediaPlayerImpl object. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.EncryptedMediaEnabled" enum="BooleanEnabled" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether encrypted media is enabled when requestMediaKeySystemAccess() is |
| called. User can enable and disable encrypted media in content settings. |
| Recorded when requestMediaKeySystemAccess() is called but will be reported |
| at most once per renderer process. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.EncryptionScheme.Initial.Audio" |
| enum="MediaEncryptionScheme" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The encryption scheme used by the audio stream in an HTML5 video. Reported |
| when metadata is available if the initial config is encrypted. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.EncryptionScheme.Initial.Video" |
| enum="MediaEncryptionScheme" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The encryption scheme used by the video stream in an HTML5 video. Reported |
| when metadata is available if the initial config is encrypted. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.IsIncognito" enum="BooleanIncognito" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether a given WebMediaPlayer instance, with a CDM attached, is played in |
| an incognito window or in Chrome OS guest mode. Players that never started |
| playback are excluded. Recorded once at time of player destruction. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaCryptoAvailable" enum="BooleanAvailable" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether MediaCrypto is available on a MediaDrm-based CDM. Reported once per |
| MediaDrmBridge creation. In normal cases it should always be available. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaDrm.FirstApiLevel" enum="AndroidApiLevel" |
| expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The Android Api level the device was released with, retrieved by obtaining |
| |ro.product.first_api_level| from the OS. We record this once at time of |
| checking the FirstApiLevel during the pre-provisioning flow. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaDrm.GetOriginIdResult" enum="GetOriginIdResult" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The status of every attempt to obtain a pre-provisioned origin ID to be used |
| by MediaDrm. This will only be reported for applications that use |
| MediaDrmOriginIdManager. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaDrm.PreprovisionedOriginId.NonPerAppProvisioningDevice" |
| units="units" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of pre-provisioned origin IDs available shortly after startup on |
| devices that do not support per-application provisioning. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaDrm.PreprovisionedOriginId.PerAppProvisioningDevice" |
| units="units" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of pre-provisioned origin IDs available shortly after startup on |
| devices that support per-application provisioning. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaDrm.Provisioning" |
| enum="MediaDrmProvisioningResult" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Result of trying to provision an origin using MediaDrm. Called every time |
| provisioning is attempted, once per origin. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaDrmBridge.KeySystemSupport" |
| enum="BooleanSupported" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether MediaDrmBridge supports the key system. Reported once per |
| MediaDrmBridge creation. In normal cases it should always be supported. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationCdm.ActivateCdmFactory" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT of MediaFoundationCdmModule::ActivateCdmFactory(). This is only |
| reported when ActivateCdmFactory() fails. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationCdm.LoadErrorCode" |
| enum="WinGetLastError" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The error code of a library CDM load failure. Only reported on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationCdm.LoadResult" enum="CdmLoadResult" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The result from an attempt to load a library MediaFoundation CDM. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationCdm.LoadTime" units="ms" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>The time spent to load a library MediaFoundation CDM.</summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationCdm.{KeySystem}.HardwareSecure.FirstInitialize" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT of the first (and only the first) MediaFoundationCdm initialization |
| in a MediaFoundationService process when using {KeySystem} in hardware |
| secure mode. Reported on both successes and failures. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationCdm.{KeySystem}.HardwareSecure.Initialize" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT of MediaFoundationCdm initialization when using {KeySystem} in |
| hardware secure mode. Only reported on failures. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationCdm.{KeySystem}.HardwareSecure.{EmeApi}" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT of MediaFoundationCdm and MediaFoundationCdmSession operations when |
| using {KeySystem} in hardware secure mode. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| <token key="EmeApi" variants="EmeApi"/> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationService.Crash2" |
| enum="BooleanAfterPowerOrDisplayChange" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether a MediaFoundationService process crash is within 5 seconds after |
| power or display change. Reported when the MediaFoundationService process |
| crashes. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.ErrorAfterPowerOrDisplayChange2" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULTs associated with errors happened in the MediaFoundationService |
| process within 5 seconds after power or display change. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.ErrorNotAfterPowerOrDisplayChange2" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULTs associated with errors happened in the MediaFoundationService |
| process NOT within 2 seconds after power or display change. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationService.HardwareContextReset" |
| enum="BooleanAfterPowerOrDisplayChange" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether a HardwareContextReset event happened in the MediaFoundationService |
| process within 5 seconds after power or display change. Reported whenever |
| such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.HardwareContextReset.ActiveGpuDisplayInfo" |
| enum="ActiveGpuDisplayInfo" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Active GPU's display information whether likely built-in or external when a |
| HardwareContextReset event happened in the MediaFoundationService process. |
| Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.HardwareContextReset.ActiveGpuInfo" |
| enum="ActiveGpuInfo" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Active and non-active GPU vendor information when a HardwareContextReset |
| event happened in the MediaFoundationService process. Reported whenever such |
| an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.HardwareContextReset.ActiveGpuVendorId" |
| enum="GpuVendorId" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Active GPU vendor ID when a HardwareContextReset event happened in the |
| MediaFoundationService process. Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.HardwareContextReset.DisplayCount" |
| enum="GpuOrDisplayCount" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of displays when a HardwareContextReset event happened in the |
| MediaFoundationService process. Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.HardwareContextReset.GpuCount" |
| enum="GpuOrDisplayCount" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of GPUs when a HardwareContextReset event happened in the |
| MediaFoundationService process. Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.HardwareContextReset.NonActiveGpuVendorId" |
| enum="GpuVendorId" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Non-active GPU vendor ID when a HardwareContextReset event happened in the |
| MediaFoundationService process. Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.MediaFoundationService.IsKeySystemSupported" |
| units="ms" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time for MediaFoundationService.IsKeySystemSupported() to finish. Reported |
| once per browser session lifetime. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.{KeySystem}.HardwareSecure.GetCdmCapability" |
| units="ms" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The time spent to get CdmCapability for {KeySystem}. The value will be |
| reported once per CDM instance for hw security in MediaFoundationService. |
| This value will only be reported for successful retrievals of the CDM |
| Capability. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.{KeySystem}.HardwareSecure.IsTypeSupported" |
| units="ms" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time for IMFContentDecryptionModuleFactory::IsTypeSupported() to finish in |
| MediaFoundationService when using {KeySystem} in hardware secure mode, which |
| are called by MediaFoundationService.IsKeySystemSupported() (called once per |
| browser session lifetime). IsKeySystemSupported() calls IsTypeSupported() |
| multiple times, for different audio/video codecs and encryption schemes. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.MediaFoundationService.{KeySystem}.HardwareSecure.IsTypeSupportedEx" |
| units="ms" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time for IMFExtendedDRMTypeSupport::IsTypeSupportedEx() to finish in |
| MediaFoundationService when using {KeySystem} in hardware secure mode, which |
| are called by MediaFoundationService.IsKeySystemSupported() (called once per |
| CDM per browser session lifetime). IsKeySystemSupported() calls |
| IsTypeSupportedEx() multiple times, for different audio/video codecs and |
| encryption schemes. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram name="Media.EME.MojoCdm.ConnectionError" |
| enum="BooleanConnectionError" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether connection error has happened for MojoCdm. Every time a MojoCdm |
| object is created a "false" value is reported to provide a |
| baseline. Every time a mojo connection error happened, a "true" |
| value will be reported, which typically means a remote CDM process crash. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.OutputProtection" enum="MediaOutputProtectionStatus" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Output protection query status and result. One query and one positive (no |
| unprotected external links) result (if any) are reported per CDM instance. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.OutputProtection.PlatformCdm" |
| enum="MediaOutputProtectionStatus" expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>cros-gfx-video@google.com</owner> |
| <summary> |
| Output protection query status and result. One query and one positive (no |
| unprotected external links) result (if any) are reported per CDM instance. |
| Warning: this histogram was expired from 2022-01-05 to 2025-09-01; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.RequestMediaKeySystemAccess.{KeySystem}" |
| enum="RequestMediaKeySystemAccessStatus" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| {KeySystem} support query status and result, as reported by |
| RequestMediaKeySystemAccess. Each value will be reported at most once per |
| frame. |
| </summary> |
| <token key="KeySystem" variants="KeySystem"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.RequestMediaKeySystemAccess.{KeySystem}.TimeTo.Reject" |
| units="ms" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The time spent to reject RequestMediaKeySystemAccess() for {KeySystem}. Each |
| time will be reported at most once per process. Only one of TimeTo.Resolve |
| or TimeTo.Reject will be reported at most once per process for a |
| {KeySystem}. |
| </summary> |
| <token key="KeySystem" variants="KeySystem"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.RequestMediaKeySystemAccess.{KeySystem}.TimeTo.Resolve" |
| units="ms" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The time spent to resolve RequestMediaKeySystemAccess() for {KeySystem}. |
| Each time will be reported at most once per process. Only one of |
| TimeTo.Resolve or TimeTo.Reject will be reported at most once per process |
| for a {KeySystem}. |
| </summary> |
| <token key="KeySystem" variants="KeySystem"/> |
| </histogram> |
| |
| <histogram name="Media.EME.UrlProvisionFetcher.ResponseCode" |
| enum="CombinedHttpResponseAndNetErrorCode" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The net error or HTTP response code of provisioning requests made by |
| UrlProvisionFetcher on Android and Cast devices. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.Widevine.HardwareSecure.ClearLeadSupport.{VideoCodec}" |
| enum="BooleanSupported" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Record for whether clear lead content is supported by the platform for |
| hardware security. This is reported only on Windows devices, only when codec |
| is supported for hardware security, per codec, and once per browser session |
| lifetime. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <!-- Widevine in hardware secure mode only --> |
| |
| <histogram name="Media.EME.Widevine.HardwareSecure.Pref" enum="BooleanEnabled" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether Media Foundation Widevine CDM is enabled or disabled based on |
| previous disabled timestamps in "Local State" pref. This is |
| reported once per browsing session around browser startup time if Media |
| Foundation Widevine CDM is enabled and available. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.Widevine.LibraryCdmAvailable" |
| enum="BooleanAvailable" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether the CDM is available for Widevine or not. In normal cases, this is |
| reported once per render process if the EME API is used. In rare cases it |
| could be reported more than once if the CDM is not available and then is |
| component updated. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.Widevine.SoftwareSecure.SystemCode" |
| enum="CdmSystemCode" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| System code in promise rejection when using Widevine key system in software |
| secure mode. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.EME.Widevine.VideoCapability.HasEmptyRobustness" |
| enum="BooleanEmpty" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether the robustness level of any video capability in the supported |
| configuration passed into requestMediaKeySystemAccess() is empty. This is |
| specific to the Widevine key system. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.{KeySystem}.CdmCapabilityQueryStatus.CreateDummyMediaFoundationCdmHresult" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT code if CreateDummyMediaFoundationCdm call fails when querying |
| hardware secure CDM capability. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram |
| name="Media.EME.{KeySystem}.CdmCapabilityQueryStatus.MediaFoundationGetCdmFactoryHresult" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT code if MediaFoundationCdmModule::GetCdmFactory call fails when |
| querying Widevine CDM capability. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.CreateCdm" enum="BooleanSuccess" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether the CDM instance is created successfully for {KeySystem}. Reported |
| each time a CDM instance creation is attempted, usually as a result of |
| Javascript call of createMediaKeys(). |
| </summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.CreateCdmStatus" enum="CreateCdmStatus" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The status when creating a CDM instance for {KeySystem}. Reported each time |
| a CDM instance creation is attempted, usually as a result of Javascript call |
| of createMediaKeys(). |
| </summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.CreateCdmTime" units="ms" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Time took to create the CDM instance for {KeySystem}.</summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.CreateSession.SessionType" |
| enum="EmeSessionType" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>EME session type passed into CreateSession.</summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.GenerateRequest.MojoCdmTimeout" |
| enum="CallbackTimeoutStatus" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The timeout status of MojoCdm::CreateSessionAndGenerateRequest() call. |
| </summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.HardwareSecure.AllowedForSite" |
| enum="BooleanEnabled" expires_after="2026-12-09"> |
| <owner>feras@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether Media Foundation based CDM is enabled or disabled based on previous |
| disabled timestamps in a "User Profile" pref. This is reported |
| once per browsing session when user requests hardware secure playback if |
| Media Foundation based CDM is enabled and available. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.HardwareSecure.CdmCapabilityQueryStatus" |
| enum="CdmCapabilityQueryStatus" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The status of the CDM capability query. This can be used to inspect the |
| reason when no capability reported. Reported at most once per browser |
| session per key system when EME query is triggered by a website. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.HardwareSecure.CdmInfoStatus" |
| enum="CdmInfoStatus" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The CdmInfo::Status of {KeySystem} hardware secure CDM capability. Reported |
| at most once per browser session when EME query is triggered by a website. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.HardwareSecure.Support" |
| enum="BooleanSupported" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| When hardware secure decryption is enabled, whether Widevine hardware secure |
| decryption is actually supported by the platform (device). Reported at most |
| once per browser session when EME query is triggered by a website, and when |
| Widevine hardware secure CDM was registered. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.HardwareSecure.Support.{VideoCodec}" |
| enum="BooleanSupported" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| When hardware secure decryption is enabled and supported by Widevine, |
| whether {VideoCodec} video codec is supported by the platform (device). |
| Reported at most once per browser session when EME query is triggered by a |
| website, and when Widevine hardware secure CDM was registered. |
| </summary> |
| <token key="KeySystem" variants="KeySystemForHardwareSecureOnly"/> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.InitialKeyStatusMix" |
| enum="CdmKeyStatusMix" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Reports a summary of key statuses associated with an EME CDM session. |
| Reported once per EME CDM session on the first key statuses update. |
| </summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.KeyStatusSystemCode" |
| enum="CdmSystemCode" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>System code associated with key status for {KeySystem}.</summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.LastKeyStatusMix" enum="CdmKeyStatusMix" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Reports a summary of key statuses associated with an EME CDM session. |
| Reported once per EME CDM session on the last key statuses update when the |
| EME CDM session gest closed. |
| </summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.TimeTo{ResolveOrReject}.{EmeApi}" |
| units="ms" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>The time it takes to {ResolveOrReject} a EME promise.</summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| <token key="ResolveOrReject" variants="ResolveOrReject"/> |
| <token key="EmeApi" variants="EmeApi"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.WaitingForKey" enum="Boolean" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Reports whether a playback with a CDM attached has been blocked waiting for |
| the CDM to be set or waiting for decryption key. Reported once per playback |
| when a CDM attached. |
| </summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.{EmeApi}" enum="CdmPromiseResult" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>Result of EME promises that were handled by Chromium code.</summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| <token key="EmeApi" variants="EmeApi"/> |
| </histogram> |
| |
| <histogram name="Media.EME.{KeySystem}.{EmeApi}.SystemCode" |
| enum="CdmSystemCode" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>System code in promise rejection.</summary> |
| <token key="KeySystem" variants="KeySystemWithRobustness"/> |
| <token key="EmeApi" variants="EmeApi"/> |
| </histogram> |
| |
| <histogram name="Media.FallbackToHighLatencyAudioPath2" |
| enum="BooleanDidFallBack" expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Whether Chrome had to fallback to the high latency audio path or not. The |
| fallback might be from either low latency offload path, or from low latency |
| non-offload path. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.FrameInfo.GuessedInitialCodedSizeSuccess" |
| enum="BooleanSuccess" expires_after="2026-12-09"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Indicates if the guessed coded size would have matched the real coded size. |
| Recorded on acquisition of real coded size for the first frame of playback. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.FrameReadBackCount.{RendererType}" units="frames" |
| expires_after="2024-12-08"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>frankli@microsoft.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Monitors the number of video frames being read back from a {RendererType}. |
| It is the count of video frames being read back from an HTML5 video when it |
| is unloaded. |
| </summary> |
| <token key="RendererType" variants="RendererType"/> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.BasicFlow.Win.GetApplicationIdResult" |
| enum="GetAppMainProcessIdWinResult" expires_after="2026-05-11"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>gabrielbrito@microsoft.com</owner> |
| <summary> |
| Records the result of trying to get the application ID of an application |
| whose window was selected in the getDisplayMedia() media picker on Windows. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.DisplaySurface" |
| enum="GetDisplayMediaConstraintsDisplaySurface" expires_after="2024-03-17"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the displaySurface |
| constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.MonitorTypeSurfaces" |
| enum="GetDisplayMediaIncludeExcludeConstraint" expires_after="2024-09-01"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the monitorTypeSurfaces |
| constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.RestrictOwnAudio" |
| enum="GetDisplayMediaBooleanConstraint" expires_after="2026-06-30"> |
| <owner>brandstrom@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the RestrictOwnAudio |
| constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.SelfBrowserSurface" |
| enum="GetDisplayMediaIncludeExcludeConstraint" expires_after="2023-05-07"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the selfBrowserSurface |
| constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.SuppressLocalAudioPlayback" |
| enum="GetDisplayMediaBooleanConstraint" expires_after="2023-05-07"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the |
| suppressLocalAudioPlayback constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.SurfaceSwitching" |
| enum="GetDisplayMediaIncludeExcludeConstraint" expires_after="2023-05-07"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the surfaceSwitching |
| constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.SystemAudio" |
| enum="GetDisplayMediaIncludeExcludeConstraint" expires_after="2026-05-03"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the systemAudio constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.Constraints.WindowAudio" |
| enum="GetDisplayMediaSystemWindowOrExcludeConstraint" |
| expires_after="2026-06-27"> |
| <owner>brandstrom@chromium.org</owner> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Records whether getDisplayMedia was called with the windowAudio constraint. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GetDisplayMedia.RequiresUserActivationResult" |
| enum="GetDisplayMediaTransientActivation" expires_after="2025-03-14"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <owner>hendrich@chromium.org</owner> |
| <summary> |
| Records whether getDisplayMedia was called with a user gesture (transient |
| activation) or whether it wasn't required. The requirement is only enforced |
| once `blink::features::kGetDisplayMediaRequiresUserActivation` is enabled |
| and can be bypassed with the `ScreenCaptureWithoutGestureAllowedForOrigins` |
| policy. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.DeviceSelectorAvailable" |
| enum="Boolean" expires_after="2023-02-12"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records if the Global Media Controls device selector was available. Recorded |
| once per notification either when the device selector was shown or when the |
| notification disappears. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.DeviceSelectorOpened" enum="Boolean" |
| expires_after="2025-08-24"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records if the Global Media Controls device selector was opened. Recorded |
| once per notification either when the device selector was opened or when the |
| notification disappears. This histogram is only recorded if the device |
| selector was available. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.DismissReason" |
| enum="GlobalMediaControlsDismissReason" expires_after="2023-01-01"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded each time a media session is dismissed or removed from the Global |
| Media Controls. Records the reason why it happened (e.g. user clicked the |
| dismiss button or playback stopped). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.EntryPoint" |
| enum="GlobalMediaControlsEntryPoint" expires_after="2026-01-18"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the entry point whenever the user opens the Global Media Controls |
| UI. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.InteractionDelayAfterPause" |
| units="ms" expires_after="2022-07-03"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded each time a paused media session is interacted with (e.g. playing |
| the media or clicking on the notification to go back to the tab). Records |
| the time passed since it was last interacted with (or since when it was |
| paused if this is the first post-pause interaction). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.MediaCastMode.{Action}" |
| enum="GlobalMediaControlsCastMode" expires_after="2026-02-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the type of Media Route that users {Action} from the Global Media |
| Controls dialog. Recorded when users click on a button and this histogram |
| doesn't represent the actual number of sessions {Action}ed from the GMC |
| dialog. |
| </summary> |
| <token key="Action"> |
| <variant name="Start" summary="start"/> |
| <variant name="Stop" summary="stop"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.MediaItemUIUpdatedViewAction" |
| enum="MediaItemUIUpdatedViewAction" expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when a user action is performed on the updated media item UI view |
| in the media dialog view on non-CrOS desktop platforms. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.NumberOfAvailableAudioDevices" |
| units="devices" expires_after="2022-12-04"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded each time the Global Media Controls Device picker dialog is opened |
| and is populated with devices. Records the number of device options |
| displayed, possibly including the default fallback device. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.RepeatUsage" enum="BooleanIsRepeat" |
| expires_after="2026-01-18"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded each time the Global Media Controls dialog is opened. True if this |
| was repeat usage of the dialog (e.g. if it's not the first time the dialog |
| has been opened this session). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GlobalMediaControls.UserActionFocus" |
| enum="BooleanFocused" expires_after="2026-01-18"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The focused state of the WebContents associated with the MediaSession that |
| the user is interacting with via the Global Media Controls. Recorded when |
| the user presses an action on the Global Media Controls dialog (e.g. play). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GPU.OutputFormatHardwareGmb" enum="OutputFormat" |
| expires_after="2026-03-22"> |
| <owner>hitawala@chromium.org</owner> |
| <owner>vasilyt@chromium.org</owner> |
| <owner>shared-image-team@google.com</owner> |
| <summary> |
| Records the format used for creating video frames with hardware backed |
| GpuMemoryBuffers. Result is an enum that represents OutputFormat in |
| GpuMemoryBufferVideoFramePool. Recorded once per VideoFrame creation. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GPU.OutputFormatSoftwareGmb" enum="OutputFormat" |
| expires_after="2026-03-22"> |
| <owner>hitawala@chromium.org</owner> |
| <owner>vasilyt@chromium.org</owner> |
| <owner>shared-image-team@google.com</owner> |
| <summary> |
| Records the format used for creating video frames with software backed |
| GpuMemoryBuffers. Result is an enum that represents OutputFormat in |
| GpuMemoryBufferVideoFramePool. Recorded once per VideoFrame creation. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GpuArcVideoDecodeAccelerator.InitializeFailed" |
| enum="VideoCodecProfile" expires_after="2026-09-01"> |
| <owner>andrescj@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Counts the unsuccessful calls to GpuArcVideoDecodeAccelerator::Initialize() |
| per VideoCodecProfile. Warning: this histogram was expired from 2025-01-05 |
| to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GpuArcVideoDecodeAccelerator.InitializeSucceeded" |
| enum="VideoCodecProfile" expires_after="2026-09-01"> |
| <owner>andrescj@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Counts the successful calls to GpuArcVideoDecodeAccelerator::Initialize() |
| per VideoCodecProfile. Warning: this histogram was expired from 2025-01-05 |
| to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GpuArcVideoDecodeAccelerator.InstanceCount.All" |
| units="instances" expires_after="2026-09-01"> |
| <owner>andrescj@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Counts how many GpuArcVideoDecodeAccelerator instances are alive at the time |
| a new GpuArcVideoDecodeAccelerator is created. Warning: this histogram was |
| expired from 2023-01-22 to 2023-06-21; data may be missing. Warning: this |
| histogram was expired from 2024-06-22 to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GpuArcVideoDecodeAccelerator.InstanceCount.Initialized" |
| units="instances" expires_after="2026-09-01"> |
| <owner>andrescj@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Counts how many GpuArcVideoDecodeAccelerator instances that have gone |
| through initialization (i.e., have an underlying |
| media::VideoDecodeAccelerator) are alive at the time a |
| GpuArcVideoDecodeAccelerator goes through initialization and successfully |
| creates its underlying media::VideoDecodeAccelerator. Warning: this |
| histogram was expired from 2023-01-22 to 2023-06-21; 2024-06-22 to |
| 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.GpuMemoryBufferVideoFramePool.UnsupportedFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-05-24"> |
| <owner>magchen@chromium.org</owner> |
| <owner>cros-gfx-video@google.com</owner> |
| <summary> |
| GpuMemoryBufferVideoFramePool is called with an unsupported VideoFrame pixel |
| format. Emitted on VideoFrame arrival. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HardwareAudioChannelCount" units="units" |
| expires_after="never"> |
| <!-- expires-never: Media platform support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary>Channel count of the hardware audio device.</summary> |
| </histogram> |
| |
| <histogram name="Media.HardwareAudioChannelLayout" enum="ChannelLayout" |
| expires_after="never"> |
| <!-- expires-never: Media platform support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary>Channel layout of the hardware audio device.</summary> |
| </histogram> |
| |
| <histogram name="Media.HardwareAudioSamplesPerSecond" enum="AudioSampleRate" |
| expires_after="never"> |
| <!-- expires-never: Media platform support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary>Samples per second of the hardware audio device.</summary> |
| </histogram> |
| |
| <histogram name="Media.HardwareKeyPressed" enum="MediaHardwareKeyAction" |
| expires_after="2026-03-22"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records media key presses that are handled by the |
| HardwareKeyMediaController. |
| |
| Warning: this histogram was expired from 2021-08-29 to 2023-10-24; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HasAcceleratedVideoDecode.{CodecType}" |
| enum="BooleanSupported" expires_after="2026-05-24"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Tracks accelerated video decoding support for a given codec. Recorded once |
| per GPU process after an attempt to use accelerated video decoding. |
| </summary> |
| <token key="CodecType"> |
| <variant name="AV1"/> |
| <variant name="H264"/> |
| <variant name="H265"/> |
| <variant name="VP9"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.HasEverPlayed" enum="BooleanHasPlayed" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether a given WebMediaPlayer instance, after preload, started playback; |
| recorded once at time of player destruction. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.Adaptation" enum="AdaptationReason" |
| expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs what caused HLS stream adaptation. Recorded each time adaptation takes |
| place. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.AdvancedFeatureTags" enum="AdvancedFeatureTagType" |
| expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs an enum representing the presence of specific HLS tags which are used |
| to trigger features of the demuxer, including gaps, discontinuities, and |
| encryption, among others. Recorded whenever MediaPlayer successfully plays |
| HLS media using one of the advanced features in the enum. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.CrossOriginContent" enum="Boolean" |
| expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs whether HLS playback uses cross-origin content. Recorded once per |
| player. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.EncryptionMode" enum="HLSEncryptionMode" |
| expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs the encryption mode used if a playlist has the #EXT-X-KEY or |
| #EXT-X-SESSION-KEY tags present. Recorded whenever MediaPlayer successfully |
| plays encrypted HLS media. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.InitializationError" enum="HlsDemuxerStatus" |
| expires_after="2026-05-03"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs any error which occurs during initialization of the hls demuxer. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.LiveContent" enum="Boolean" |
| expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs whether HLS playback is for Live content, as opposed to video-on-demand |
| (VOD) content. Recorded once per player. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.MultivariantPlaylist" enum="Boolean" |
| expires_after="2026-04-26"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs whether HLS playback uses a multivariant (as opposed to plain media) |
| playlist. Recorded once per player. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.ParserError" units="sparse" |
| expires_after="2026-05-03"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs any error which is caused by manifest parsing during either demuxer |
| initialization or mid-playback. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.PlaybackError" enum="HlsDemuxerStatus" |
| expires_after="2026-05-03"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs any error which occurs during playback but NOT during initialization of |
| the hls demuxer. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.HLS.UnparsableManifest" units="sparse" |
| expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Logs the root cause failure reason for a playlist which cannot be parsed by |
| the built-in parser, but was successfully played by AndroidMediaPlayer. |
| Recorded whenever MediaPlayer successfully plays HLS media from a manifest |
| that the builtin parser would fail to parse. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.InitializeRendererTimeout" enum="CallbackTimeoutStatus" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary>The timeout status of Renderer initialization.</summary> |
| </histogram> |
| |
| <histogram name="Media.InputErrorMac" enum="OSStatus_Audio" |
| expires_after="never"> |
| <!-- expires-never: essential indicator for audio input stability in Chrome --> |
| |
| <owner>olka@chromium.org</owner> |
| <owner>fhernqvist@google.com</owner> |
| <owner>henrika@hromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Error codes that we encounter while setting up an AUAudioInputStream on Mac. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.InputStreamDuration" units="ms" expires_after="never"> |
| <!-- expires-never: essential indicator for audio input stability in Chrome --> |
| |
| <owner>henrika@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Duration in milliseconds of low-latency audio input streams. Sampled when |
| the stream is closed by the AudioInputController. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.InputStreamDurationWithoutCallback" units="ms" |
| expires_after="2026-05-11"> |
| <owner>olka@chromium.org</owner> |
| <owner>henrika@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Duration in milliseconds of low-latency audio input streams which never got |
| any callbacks. Warning: this histogram was expired from 2020-10-11 to |
| 2021-06-04; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.LoadType" enum="MediaLoadType" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Load type of HTML5 media, such as URL, MediaSource and MediaStream. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.LowLatencyAudioCaptureStartupSuccess" |
| enum="AudioCaptureStartupResult" expires_after="2026-06-07"> |
| <owner>armax@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <summary> |
| Whether capture started successfully after a low-latency input stream |
| startup was requested. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MeanTimeBetweenRebuffers{MediaRebufferingCategories}" |
| units="ms" expires_after="2026-05-24"> |
| <owner>dalecurtis@chromium.org</owner> |
| <summary> |
| The total watch time (see Media.WatchTime) of a given playback divided by |
| the number of rebuffering events that occured during that playback. Only |
| reported when rebuffering happened. Therefore, alway refer to other UMAs |
| like `Media.RebuffersCount` when checking this UMA. |
| {MediaRebufferingCategories} |
| </summary> |
| <token key="MediaRebufferingCategories" variants="MediaRebufferingCategories"> |
| <variant name=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.MediaCodecError.NegativeCodecExceptionErrorCode" |
| units="CodecErrorCode" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Negative error code from a CodecException reported by MediaCodec. Reported |
| whenever MediaCodec returns a CodecException, and the CodecException is |
| unknown and a negative value. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaCodecError.{VideoCodec}.{Secure}" |
| enum="MediaCodecError" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Error reported by MediaCodec video streams using codec {VideoCodec} with |
| {Secure}. Reported at most once per playback if an error occurs. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| <token key="Secure"> |
| <variant name="HardwareSecure" summary="hardware secure decryption"/> |
| <variant name="SoftwareSecure" summary="software secure decryption"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaDevices.EnumerateDevices.FirstStateOnContextDestroyed" |
| enum="EnumerateDevicesFirstStateOnContextDestroyed" |
| expires_after="2026-08-28"> |
| <owner>guidou@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <summary> |
| Tracks the state of the first enumerateDevices call in relation to the first |
| successful getUserMedia call. Recorded on execution context destruction only |
| if there was at least one enumerateDevices call. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.EnumerateDevices.GetUserMediaInteraction" |
| enum="EnumerateDevicesGetUserMediaInteraction" expires_after="2026-08-28"> |
| <owner>guidou@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <summary> |
| Recorded when the first enumerateDevices call and/or the first successful |
| getUserMedia call are resolved. The members of the histogram are not |
| mutually exclusive. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.EnumerateDevices.Latency" units="ms" |
| expires_after="2026-04-12"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <summary> |
| The latency of calls to the navigator.mediaDevices.enumerateDevices() API |
| which resolve, including both successes and failures. Note very long calls |
| which record a EnumerateDevices.Result of kTimedOut but do eventually |
| resolve will have their latency recorded. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.EnumerateDevices.Result" |
| enum="EnumerateDevicesResult" expires_after="2026-04-12"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <summary> |
| The results of all calls to the navigator.mediaDevices.enumerateDevices() |
| API, including successful promise resolutions, error codes, or kTimedOut, if |
| the promise was still pending after 4 seconds. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetAllScreensMedia.Latency" units="ms" |
| expires_after="2023-05-01"> |
| <owner>simonha@google.com</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The latency of calls to the navigator.mediaDevices.GetAllScreensMedia() API |
| which resolve, including both successes and failures. Note very long calls |
| which record a GetAllScreensMedia.Result of kTimedOut but do eventually |
| resolve will have their latency recorded. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetAllScreensMedia.Result2" |
| enum="UserMediaRequestResult" expires_after="2023-05-01"> |
| <owner>simonha@google.com</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The results of all calls to the navigator.mediaDevices.GetAllScreensMedia() |
| API, including successful promise resolutions, error codes, or kTimedOut, if |
| the promise was still pending after 6 seconds. The suffix 2 was added at |
| milestone 138, after kNotAllowedByUserError was added. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaDevices.GetDisplayMedia.Audio.PermissionDeniedBySystem" |
| enum="Boolean" expires_after="2026-05-01"> |
| <owner>kron@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Tracks the number of attempts to start an audio track from getDisplayMedia |
| that results in PermissionDeniedBySystem. This is recorded in |
| UserMediaProcessor::RequestInfo::OnTrackStarted when the result of the |
| attempt to start the track is availble. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetDisplayMedia.Latency2" units="ms" |
| expires_after="2026-10-08"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <owner>rtc-meet-in-chrome@google.com</owner> |
| <summary> |
| The latency of calls to the navigator.mediaDevices.GetDisplayMedia() API |
| which resolve, including both successes and failures. Note very long calls |
| which record a GetDisplayMedia.Result of kTimedOut but do eventually resolve |
| will have their latency recorded. The suffix 2 was added in milestone 143, |
| after the kTimedOut interval was increased from 12s to 30s. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetDisplayMedia.Result2" |
| enum="UserMediaRequestResult" expires_after="2026-06-07"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The results of all calls to the navigator.mediaDevices.GetDisplayMedia() |
| API, including successful promise resolutions, error codes, or kTimedOut, if |
| the promise was still pending after 30 seconds. The suffix 2 was added at |
| milestone 138, after kNotAllowedByUserError was added. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetUserMedia.CameraCaptureCapability" |
| enum="CameraCaptureCapability" expires_after="2026-04-26"> |
| <owner>hbos@chromium.org</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| When getUserMedia() is called for video, the capture resolution capabilities |
| of the devices (webcams) are logged, including if HD/FullHD devices support |
| 360p, 480p, neither or both. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetUserMedia.EchoCancellationMode" |
| enum="EchoCancellationMode" expires_after="2026-08-29"> |
| <owner>henrika@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| When getUserMedia() is called for audio, the utilized echoCancellationMode |
| is logged. The mode controls how much of the user system playout is removed |
| from the microphone signal. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetUserMedia.Latency" units="ms" |
| expires_after="2026-04-12"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The latency of calls to the navigator.mediaDevices.GetUserMedia() API which |
| resolve, including both successes and failures. Note very long calls which |
| record a GetUserMedia.Result of kTimedOut but do eventually resolve will |
| have their latency recorded. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.GetUserMedia.Result2" |
| enum="UserMediaRequestResult" expires_after="2026-05-03"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The results of all calls to the navigator.mediaDevices.GetUserMedia() API, |
| including successful promise resolutions, error codes, or kTimedOut, if the |
| promise was still pending after 8 seconds. |
| |
| The suffix 2 was added at milestone 138, after kNotAllowedByUserError was |
| added. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevices.SaltDatabaseErrors" |
| enum="SqliteLoggedResultCode" expires_after="2026-07-06"> |
| <owner>guidou@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Errors reported by SQLite while initializing or using the media-device salt |
| database. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevicesManager.VideoDeviceEnumeration.Result" |
| enum="DeviceEnumerationResult" expires_after="2026-04-26"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <summary> |
| The success or failure code of MediaDevicesManager requests to enumerate |
| video devices (ie cameras) with the camera capture service. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaDevicesManager.VideoDeviceEnumeration.Start" |
| enum="Boolean" expires_after="2026-10-23"> |
| <owner>toprice@chromium.org</owner> |
| <owner>agpalak@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Count of MediaDevicesManager starting enumerating video devices (ie cameras) |
| with the camera capture service, including enumerations which never |
| finished. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundation.MediaEngineError.{MF_MEDIA_ENGINE_ERR}.Hresult" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Hresult corresponding to a {MF_MEDIA_ENGINE_ERR}. Recorded when the |
| MediaEngine hits an error from Event Notify. |
| </summary> |
| <token key="MF_MEDIA_ENGINE_ERR" variants="MF_MEDIA_ENGINE_ERR"/> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundation.MF_E_TOPO_CODEC_NOT_FOUND.{VideoCodec}" |
| enum="AudioCodec" expires_after="2026-12-09"> |
| <owner>vpasupathy@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| This histogram is recorded when MediaEngine hits an error corresponding to |
| the HRESULT MF_E_TOPO_CODEC_NOT_FOUND from Event Notify. This histogram |
| records the VideoCodec as part of the name, and reports the AudioCodec, so |
| we have both to look at the combination of codecs used when this HRESULT |
| occurs. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationAudioDecoder.CreateDecoderFailure.XheAac" |
| enum="Hresult" expires_after="M146"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| HRESULT error codes from MediaFoundationAudioDecoder::CreateDecoder() when |
| trying to initialize a decoder for XHE-AAC. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.CreateMediaEngineError" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaFoundationRenderer::CreateMediaEngine() fails. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.D3D11CreateDeviceFailed" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaFoundationRenderer fails to execute |
| D3D11CreateDevice. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.ErrorReason" |
| enum="MediaFoundationRendererErrorReason" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaFoundationRenderer or MediaFoundationRendererClient |
| hits an error. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.FailedToSetDCompMode" |
| enum="Hresult" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaFoundationRenderer hits an error when trying to set |
| direct composition mode. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundationRenderer.InvalidHwdrmState.HasReportedPlaying" |
| enum="Boolean" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether or not playback has started when DRM_E_TEE_INVALID_HWDRM_STATE |
| happens in MediaFoundationRenderer. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundationRenderer.InvalidHwdrmState.VideoFrameDecoded" |
| units="frames" expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of video frames decoded when DRM_E_TEE_INVALID_HWDRM_STATE |
| happens in MediaFoundationRenderer. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.PlaybackError" enum="Hresult" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaFoundationRenderer hits a playback error. Some errors |
| are part of the normal user flow (e.g. sleep/resume) and are not a bug. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundationRenderer.PlaybackError.ActiveGpuDisplayInfo" |
| enum="ActiveGpuDisplayInfo" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Active GPU's display information whether likely built-in or external when |
| the MediaFoundationRenderer hits a playback error. Reported whenever such an |
| event happens. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.PlaybackError.ActiveGpuInfo" |
| enum="ActiveGpuInfo" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Active and non-active GPU vendor information when the |
| MediaFoundationRenderer hits a playback error. Reported whenever such an |
| event happens. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.PlaybackError.ActiveGpuVendorId" |
| enum="GpuVendorId" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Active GPU vendor ID when the MediaFoundationRenderer hits a playback error. |
| Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.PlaybackError.DisplayCount" |
| enum="GpuOrDisplayCount" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of displays when the MediaFoundationRenderer hits a playback |
| error. Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaFoundationRenderer.PlaybackError.GpuCount" |
| enum="GpuOrDisplayCount" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of GPUs when the MediaFoundationRenderer hits a playback error. |
| Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundationRenderer.PlaybackError.NonActiveGpuVendorId" |
| enum="GpuVendorId" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Non-active GPU vendor ID when the MediaFoundationRenderer hits a playback |
| error. Reported whenever such an event happens. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundationRenderer.RenderedVideoFrameDetectionResult" |
| enum="MediaFoundationRendererRenderedVideoFrameDetectionResult" |
| expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaFoundationRenderer detects one or more rendered video |
| frame within the given time. Only reported once per playback. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaFoundationRenderer.RenderedVideoFrameDetectionResult.TimeTo.{ResultReason}" |
| units="ms" expires_after="2026-12-09"> |
| <owner>sangbaekpark@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time in milliseconds from when MediaFoundationRenderer reports the result |
| whether one or more rendered video frame within the given time for |
| {ResultReason}. Only reported once per playback. |
| </summary> |
| <token key="ResultReason" variants="RenderedVideoFrameDetectionResultReason"/> |
| </histogram> |
| |
| <histogram name="Media.MediaHistory.DatabaseExists" enum="Boolean" |
| expires_after="2026-05-17"> |
| <owner>evliu@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether or not the media history database exists. Called on the |
| initialization of the profile. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaLauncherActivityStarted" |
| enum="MediaLauncherActivityEnabledReason" expires_after="2026-06-01"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when the MediaLauncherActivity starts up. Records the reaosn that |
| MediaLauncherActivity is enabled. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaPlaybackWhileNotVisible.InterruptionType" |
| enum="MediaPlaybackInterruptionType" expires_after="2026-04-19"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>gabrielbrito@microsoft.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Tracks the reason for the HTMLMediaElement being interrupted when the frame |
| is being controlled by the MediaPlaybackWhileNotVisible permission policy |
| and the frame is not visible. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaRecorder.Codec" enum="MediaRecorderVideoCodecImpl" |
| expires_after="2026-04-26"> |
| <owner>clarissagarvey@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <summary> |
| The codec and hardware/software variant used by MediaRecorder, recorded once |
| when the VideoTrackRecorder initializes the encoder. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaRecorder.Codec.{Query}.{Result}" |
| enum="MediaRecorderVideoCodec" expires_after="2026-05-01"> |
| <owner>handellm@google.com</owner> |
| <owner>guidou@google.com</owner> |
| <summary> |
| Codec queried through MediaRecorder{Query} where the result is {Result}. |
| Logged when the call is made. |
| </summary> |
| <token key="Query"> |
| <variant name="EncodingInfo" summary="EncodingInfo"/> |
| <variant name="IsTypeSupported" summary=".isTypeSupported"/> |
| <variant name="MediaRecorderCtor" summary="ctor"/> |
| <variant name="Test" summary="Test"/> |
| </token> |
| <token key="Result"> |
| <variant name="Supported" summary="supported"/> |
| <variant name="Unsupported" summary="unsupported"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.MediaRecorder.HasCorrectAV1CodecString" |
| enum="BooleanCorrect" expires_after="2024-06-30"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>handellm@google.com</owner> |
| <summary> |
| Record the correctness of the AV1 codecs string configured in MediaRecorder |
| and queried in MediaCapabilities. It is recorded when Initialize() in |
| MediaRecorder API is called and the capability is queried in |
| MediaCapabilities API. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaRecorder.TrackTransformationChangeCount" |
| units="count" expires_after="2025-06-08"> |
| <owner>handellm@google.com</owner> |
| <owner>guidou@chromium.org</owner> |
| <summary> |
| The number of transformation changes received on a recorded video track. |
| Recorded when a MediaRecorder has stopped recording. 0 means there were no |
| frames delivered to the recorder. 1 means the first frame did or did not |
| have transformation information attached, and no subsequent changes in |
| transformation beyond the first frame. N means there were N-1 changes in |
| transformation after the initial received frame. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaStreamManager.DesktopVideoDeviceUpdate" |
| enum="MediaStreamRequestResult2" expires_after="2026-10-16"> |
| <owner>agpalak@chromium.org</owner> |
| <owner>tovep@chromium.org</owner> |
| <summary> |
| Records media stream request responses for desktop-video capture |
| media-device-update requests. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MediaStreamManager.DisplayVideoDeviceUpdate" |
| enum="MediaStreamRequestResult2" expires_after="2026-10-16"> |
| <owner>agpalak@chromium.org</owner> |
| <owner>tovep@chromium.org</owner> |
| <summary> |
| Records media stream request responses for display-video capture |
| media-device-update requests. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.ComputeOcclusion.ComputeOccludingArea.TotalDuration" |
| units="microseconds" expires_after="2026-06-07"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total duration in microseconds taken by the MediaVideoVisibilityTracker to |
| compute occluding area. The histogram is recorded every time an element |
| occluding a target HTMLVideoElement is found, during the ComputeOcclusion |
| operation. |
| |
| Note that clients without high-resolution clocks will report 0 for very |
| short times. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.ComputeOcclusion.TotalDuration" |
| units="ms" expires_after="2026-02-01"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total duration in milliseconds taken by the MediaVideoVisibilityTracker to |
| compute occlusion. The histogram is recorded every time the |
| MediaVideoVisibilityTracker needs to compute if a tracked HTMLVideoElement |
| meets its specified visibility threshold. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.GetClientIdsSet.ItemsInSetCount.TotalCount" |
| units="count" expires_after="2026-02-01"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total number of entries in the MediaVideoVisibilityTracker ClientIdsSet. |
| Recorded every time the tracker requests the set. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.GetClientIdsSet.NotContentType.Percentage" |
| units="%" expires_after="2026-02-01"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the percentage of the total ClientIdsSet entries that are ignored |
| due to their DisplayItem::Type not being of "Content" type. |
| |
| This metric only accounts for non "Content" type entries that are |
| present at the end of the DisplayItemList. The count stops at the first |
| DisplayItem::Type that is of "Content" type, when traversing the |
| DisplayItemList from tail to head. |
| |
| Recorded every time the tracker requests the set. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.GetClientIdsSet.NotContentTypeCount.TotalCount" |
| units="count" expires_after="2026-02-01"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total number of entries not added to the MediaVideoVisibilityTracker |
| ClientIdsSet, because their DisplayItem::Type is not of "Content" |
| type. |
| |
| This metric only accounts for elements that are present at the end of the |
| DisplayItemList. The count stops at the first DisplayItem::Type that is of |
| "Content" type, when traversing the DisplayItemList from tail to |
| head. |
| |
| Recorded every time the tracker requests the set. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.GetClientIdsSet.SetConstruction.TotalDuration" |
| units="microseconds" expires_after="2026-02-01"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total duration, in microseconds, taken by the MediaVideoVisibilityTracker to |
| construct a ClientIdsSet. Recorded every time the tracker requests the set. |
| |
| Note that clients without high-resolution clocks will report 0 for very |
| short times. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.OccludingRectsCount.{BucketSizeIncreases}Histogram.TotalCount" |
| units="rects" expires_after="2026-04-05"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total count of rects occluding a target HTMLVideoElement. The histogram is |
| recorded after the MediaVideoVisibilityTracker computes whether the |
| HTMLVideoElement meets the visibility threshold or not. |
| |
| Count is recorded using a histogram with {BucketSizeIncreases} bucket size |
| increases. |
| |
| Note that this does not represent all elements that could be considered |
| occluding, since MeetsVisibilityThreshold may return early depending on the |
| size of the occluded area and the visibility threshold. |
| </summary> |
| <token key="BucketSizeIncreases"> |
| <variant name="Exponential" |
| summary="Histogram with exponential bucket size increases, for |
| understanding the overall distribution"/> |
| <variant name="Linear" |
| summary="Histogram with linear bucket size increases, for fine |
| grained detail"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.MediaVideoVisibilityTracker.UpdateTime.TotalDuration" |
| units="ms" expires_after="2026-02-01"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total duration in milliseconds taken by the MediaVideoVisibilityTracker to |
| update HTMLVideoElement s visibility. The histogram is recorded when the |
| MediaVideoVisibilityTracker executes DidFinishLifecycleUpdate. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.{NodesCount}.{BucketSizeIncreases}Histogram.TotalCount" |
| units="nodes" expires_after="2026-06-07"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total {NodesCount}, hit tested by ComputeOcclusion. The histogram is |
| recorded after the MediaVideoVisibilityTracker computes whether the |
| HTMLVideoElement meets the visibility threshold or not. |
| |
| Count is recorded using a histogram with {BucketSizeIncreases} bucket size |
| increases. |
| </summary> |
| <token key="NodesCount"> |
| <variant name="HitTestedNodesContributingToOcclusionCount" |
| summary="Nodes that contribute to occlusion"/> |
| <variant name="HitTestedNodesCount" summary="All hit tested nodes"/> |
| <variant name="IgnoredNodesNotOpaqueCount" |
| summary="Nodes ignored due to not being opaque"/> |
| <variant name="IgnoredNodesUserAgentShadowRootCount" |
| summary="Nodes ignored due to being in the shadow root and of user |
| agent type"/> |
| </token> |
| <token key="BucketSizeIncreases"> |
| <variant name="Exponential" |
| summary="Histogram with exponential bucket size increases, for |
| understanding the overall distribution"/> |
| <variant name="Linear" |
| summary="Histogram with linear bucket size increases, for fine |
| grained detail"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.MediaVideoVisibilityTracker.{PercentageCategory}.Percentage" |
| units="%" expires_after="2026-04-05"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the percentage of the total hit tested nodes that are |
| {PercentageCategory}. The histogram is recorded after the |
| MediaVideoVisibilityTracker computes whether the HTMLVideoElement meets the |
| visibility threshold or not. |
| </summary> |
| <token key="PercentageCategory"> |
| <variant name="IgnoredNodesNotOpaque" |
| summary="Nodes that are ignored due to not being opaque"/> |
| <variant name="IgnoredNodesUserAgentShadowRoot" |
| summary="Nodes that are ignored due to being in the shadow root and |
| of user agent type"/> |
| <variant name="NodesContributingToOcclusion" |
| summary="Nodes that contribute to occlusion"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.MicrophoneMuted" enum="MicrophoneMuteResult" |
| expires_after="2026-05-11"> |
| <owner>henrika@chromium.org</owner> |
| <owner>webrtc-audio@google.com</owner> |
| <summary> |
| Heuristically detects if the user has muted the microphone or not. Measured |
| approximately four times per minute while an audio input stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Midi.SendReceiveUsage{BackendType}" |
| enum="MidiSendReceiveUsage" expires_after="2026-02-22"> |
| <owner>mjwilson@chromium.org</owner> |
| <owner>hongchan@chromium.org</owner> |
| <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> |
| <summary> |
| Reports whether any data was sent or received by {BackendType}. Recorded |
| once per MidiManager instantiation, upon destruction. MidiManager is |
| instantiated when the first Web MIDI client starts a session, and destroyed |
| when the last client ends the session. |
| |
| Warning: this histogram was expired from M86 to M91; data may be missing. |
| </summary> |
| <token key="BackendType"> |
| <variant name="" summary="any kind of MidiManagers"/> |
| <variant name=".Usb" summary="a MidiManagerUsb"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Midi.SysExMessageSizeUpTo1MB" units="bytes" |
| expires_after="2026-12-01"> |
| <owner>mjwilson@chromium.org</owner> |
| <owner>hongchan@chromium.org</owner> |
| <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> |
| <summary> |
| Reports sysex message size. |
| |
| Warning: this histogram was expired from M86 to M91; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Midi.Usage" enum="MidiUsage" expires_after="2026-12-01"> |
| <owner>mjwilson@chromium.org</owner> |
| <owner>hongchan@chromium.org</owner> |
| <owner>src/third_party/blink/renderer/modules/webaudio/OWNERS</owner> |
| <summary> |
| The MidiManager instance use count, but this is not intended to understand |
| the real API usage because this can be counted by feature scanning scripts |
| that are often used for footprinting. You may want to track SendReceiveUsage |
| to monitor only instances that actually send or receive MIDI messages. |
| |
| Warning: this histogram was expired from M86 to M91; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoAudioDecoder.Initialized" enum="DecoderStatus" |
| expires_after="2026-05-03"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the status of each call to MojoAudioDecoderService::Initialize(). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoAudioDecoder.LastDecodeStatus" enum="DecoderStatus" |
| expires_after="2026-05-03"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the status of the last call to MojoAudioDecoderService::Decode() |
| prior to destruction of the MojoAudioDecoderService. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoStableVideoDecoder.Decode" units="ms" |
| expires_after="2026-09-01"> |
| <owner>andrescj@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| This histogram is analogous to Media.MojoVideoDecoder.Decode but for the |
| MojoStableVideoDecoder. It's the delay between a DecoderBuffer (and encoded |
| chunk) input and a decoded frame being produced by the remote |
| StableVideoDecoder. Output once per successful decode. Warning: this |
| histogram was expired from 2025-05-24 to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoVideoDecoder.ActiveInstances" units="units" |
| expires_after="2026-03-15"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the number of active MojoVideoDecoderService instances that are |
| alive each time an instance becomes active. An instance is active if |
| Decode() has been called at least once. This provides an estimate of the |
| concurrent hardware resource requirements. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoVideoDecoder.Decode" units="ms" |
| expires_after="never"> |
| <!-- expires-never: used by ChromeOS test infrastructure --> |
| |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Delay between a DecodeBuffer (and encoded chunk) input and a decoded |
| VideoFrame being produced by the remote MojoVideoDecoder. Output once per |
| successful decode. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoVideoDecoder.InitialPlaybackErrorCodecCounter" |
| units="instances" expires_after="2021-10-25"> |
| <owner>eugene@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <summary> |
| Total number of instances of MojoVideoDecoder used by a page (i.e. render |
| frame) when an instance of MojoVideoDecoder encountered a decoding error or |
| a crash during the first 150 frames of a video stream. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoVideoDecoder.InitialPlaybackSuccessCodecCounter" |
| units="instances" expires_after="2021-10-25"> |
| <owner>eugene@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <summary> |
| Total number of instances of MojoVideoDecoder used by a page (i.e. render |
| frame) when an instance of MojoVideoDecoder successfuly decode the first 150 |
| frames of a video stream. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MojoVideoEncodeAccelerator.InputStorageType" |
| enum="VideoFrameStorageType" expires_after="2024-05-26"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <summary> |
| The storage type of media::VideoFrame passed to MojoVideoEncodeAccelerator |
| for encoding. The histogram is recorded every frame encode request. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MSE.AudioCodec" enum="MSECodec" expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>wolenetz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Audio codec used in Media Source Extensions playback. Set when MediaSource |
| addSourceBuffer() is successfully called during playback. Also set twice |
| during a successful SourceBuffer changeType() operation. See issue 535738 |
| for reworking MSE codec histograms to record on each successfully parsed |
| initialization segment (possibly filtered to record only when actual new |
| codec configurations are parsed). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MSE.DemuxerDestructionTime" units="ms" |
| expires_after="2020-10-11"> |
| <owner>wolenetz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Amount of time taken to destroy one ChunkDemuxer object, not including |
| initial background task scheduling delay. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MSE.ExecutionContext" enum="MediaSourceExecutionContext" |
| expires_after="2020-10-11"> |
| <owner>wolenetz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| For each MediaSource instance, records the type of thread that created the |
| instance. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MSE.VideoCodec" enum="MSECodec" expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>wolenetz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec used in Media Source Extensions playback. Set when MediaSource |
| addSourceBuffer() is successfully called during playback. Also set twice |
| during a successful SourceBuffer changeType() operation. See issue 535738 |
| for reworking MSE codec histograms to record on each successfully parsed |
| initialization segment (possibly filtered to record only when actual new |
| codec configurations are parsed). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MSE.VideoCodec.MP4" enum="MSECodec" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>wolenetz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec used in Media Source Extensions playback if the media container |
| is MP4. Set when MediaSource addSourceBuffer() is successfully called during |
| playback. Also set twice during a successful SourceBuffer changeType() |
| operation. See issue 535738 for reworking MSE codec histograms to record on |
| each successfully parsed initialization segment (possibly filtered to record |
| only when actual new codec configurations are parsed). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.MSE.VideoCodec.WebM" enum="MSECodec" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>wolenetz@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec used in Media Source Extensions playback if the media container |
| is WebM. Set when MediaSource addSourceBuffer() is successfully called |
| during playback. Also set twice during a successful SourceBuffer |
| changeType() operation. See issue 535738 for reworking MSE codec histograms |
| to record on each successfully parsed initialization segment (possibly |
| filtered to record only when actual new codec configurations are parsed). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Network.TotalBytesReceived.SRC" units="bytes" |
| expires_after="2026-04-19"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Reports the total bytes received over the network by a |
| ResourceMultiBufferDataProvider instance. One is created each time a |
| src=file playback needs to retrieve non-contiguous data over the network. |
| Value is recorded at destruction time, so may be lost in the event of tab |
| closure. Range is 1kb to 1gb. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Notification.Cast.Count" units="count" |
| expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of Cast media notifications that are currently being displayed. |
| This is recorded when a media notification starts being displayed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Notification.Cast.UserAction" enum="MediaSessionAction" |
| expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the type of the action (e.g. pause) whenever the user makes an |
| action on a Cast media notification. Starting and stopping casting is |
| recorded in Media.GlobalMediaControls.MediaCastMode.Start and |
| Media.GlobalMediaControls.MediaCastMode.Stop. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Notification.Count" units="count" |
| expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of media notifications that are currently being displayed |
| (including ones for Cast sessions). This is recorded when a media |
| notification starts being displayed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Notification.DisplayPage" |
| enum="MediaNotificationDisplayPage" expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The page where the media notification is displayed to users. This is |
| recorded when a media notification starts being displayed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Notification.Source" enum="MediaNotificationSource" |
| expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The source of the underlying media session (e.g. ARC, web, Cast) that |
| displayed the media notification. This is recorded when a notification is |
| available to be shown. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Notification.UserAction" enum="MediaSessionAction" |
| expires_after="2026-05-31"> |
| <owner>yrw@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The media session action that a user clicked on a media notification |
| (including ones for Cast sessions). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.OutputStreamDuration" units="ms" |
| expires_after="2026-06-07"> |
| <owner>guidou@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>webrtc-audio-uma@google.com</owner> |
| <summary> |
| Duration of an audio output stream. Measured in AudioOutputController from |
| when a stream is started until it is stopped. A stream is stopped when it is |
| paused, closed (i.e. destructed), or when a device change event causes it to |
| be restarted. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PepperVideoDecoder.HardwareAccelerationBehavior" |
| enum="PepperVideoDecoderHardwareAccelerationBehavior" expires_after="never"> |
| <!-- expires-never: used by ChromeOS test infrastructure --> |
| |
| <owner>pmolinalopez@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| The hardware/software decoding behavior used for a PPB_VideoDecoder API |
| instance. This UMA is recorded when the PepperVideoDecoderHost is destroyed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PictureInPicture.Android.Action" |
| enum="PictureInPictureButtonAction" expires_after="2026-09-30"> |
| <owner>philyan@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records which Picture-in-Picture button was clicked. This is recorded when |
| the user clicks on a button in the Android Picture-in-Picture window. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PictureInPicture.Disallowed" |
| enum="PictureInPictureDisallowedType" expires_after="2025-08-31"> |
| <owner>steimel@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <summary> |
| Recorded when a picture-in-picture window is closed due to a |
| ScopedDisallowPictureInPicture object. Records whether the closed |
| picture-in-picture window was just opened or already existed when the |
| ScopedDisallowPictureInPicture was created. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PictureInPicture.Tucked" |
| enum="PictureInPictureTuckedType" expires_after="2026-04-22"> |
| <owner>steimel@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <summary> |
| Recorded when a picture-in-picture window is tucked due to a |
| ScopedTuckPictureInPicture object. Records whether the tucked |
| picture-in-picture window was just opened or already existed when the |
| ScopedTuckPictureInPicture was created. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PictureInPicture.Window.TotalTime" units="ms" |
| expires_after="2026-05-10"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent on a Picture in Picture window. The timer starts counting |
| every time the Picture in Picture window manager receives a call to enter |
| Picture in Picture; the time elapsed is recorded when the Picture in Picture |
| window manager receives a call to exit Picture in Picture. This metric is |
| recorded regardless of the Picture in Picture window type (document vs |
| video), and of the reason for closing the window (UI interaction, returning |
| back to opener tab, etc.). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PictureInPicture.Window.TotalTimeV2" units="ms" |
| expires_after="2026-05-10"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Total time spent on a Picture in Picture window. The timer starts counting |
| every time the Picture in Picture window manager receives a call to enter |
| Picture in Picture; the time elapsed is recorded when the Picture in Picture |
| window manager receives a call to exit Picture in Picture. This metric is |
| recorded regardless of the Picture in Picture window type (document vs |
| video), and of the reason for closing the window (UI interaction, returning |
| back to opener tab, etc.). |
| |
| Similar to Media.PictureInPicture.Window.TotalTime, but with a maximum of 10 |
| hours and a bucket size of 100. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PipelineStatus.AudioVideo.{VideoCodec}.{Pipeline}" |
| enum="PipelineStatus" expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Status of the media pipeline at the end of its lifecycle for audio-video |
| streams with {VideoCodec} video codec using {Pipeline}. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| <token key="Pipeline"> |
| <variant name="DDS.HW" |
| summary="RendererImpl with hardware decoder and |
| DecryptingDemuxerStream"/> |
| <variant name="DDS.SW" |
| summary="RendererImpl with software decoder and |
| DecryptingDemuxerStream"/> |
| <variant name="DVD" summary="RendererImpl with DecryptingVideoDecoder"/> |
| <variant name="HardwareSecure.DDS.HW" |
| summary="RendererImpl with hardware decoder and |
| DecryptingDemuxerStream, using hardware secure decryption"/> |
| <variant name="HardwareSecure.DDS.SW" |
| summary="RendererImpl with software decoder and |
| DecryptingDemuxerStream, using hardware secure decryption"/> |
| <variant name="HardwareSecure.HW" |
| summary="RendererImpl with hardware decoder and hardware secure |
| decryption"/> |
| <variant name="HW" summary="RendererImpl with hardware decoder"/> |
| <variant name="MediaDrm.HardwareSecure" |
| summary="RendererImpl with requested hardware secure decryption and |
| MediaCodecVideoDecoder"/> |
| <variant name="MediaDrm.SoftwareSecure" |
| summary="RendererImpl with requested software secure decryption and |
| MediaCodecVideoDecoder"/> |
| <variant name="MediaFoundationRenderer"/> |
| <variant name="SoftwareSecure.DDS.HW" |
| summary="RendererImpl with hardware decoder and |
| DecryptingDemuxerStream, using software secure decryption"/> |
| <variant name="SoftwareSecure.DDS.SW" |
| summary="RendererImpl with software decoder and |
| DecryptingDemuxerStream, using software secure decryption"/> |
| <variant name="SW" summary="RendererImpl with software decoder"/> |
| <variant name="UnknownRenderer" summary="an unknown Renderer"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.PipelineStatus.Start" enum="PipelineStatus" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Status of the media pipeline starting process (including demuxer and |
| renderer initialization). If the media pipeline is destroyed during the |
| starting process nothing will be reported, but this should relatively rare. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PipelineStatus.{StreamType}" enum="PipelineStatus" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Status of the media pipeline at the end of its lifecycle for {StreamType} |
| streams. |
| </summary> |
| <token key="StreamType"> |
| <variant name="AudioOnly" summary="audio-only"/> |
| <variant name="Unsupported" summary="unsupported"/> |
| <variant name="VideoOnly" summary="video-only"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.PlatformVideoDecoding.Decode" units="ms" |
| expires_after="never"> |
| <!-- expires-never: used by ChromeOS test infrastructure --> |
| |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Time for the platform-specific (set of) video decode acceleration command(s) |
| to be executed. Output once per decode request submit. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.PlatformVideoDecoding.VideoCodecProfile" |
| enum="VideoCodecProfile" expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| VideoCodecProfile used to Initialize() the platform VideoDecoder |
| implementation; this is emitted once per video (or per track, when using |
| MSE) initialization and after verifying that the codec profile is thought to |
| be supported. Warning: this histogram was expired from 2025-11-09 to |
| 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RebuffersCount{MediaRebufferingCategories}" |
| units="rebuffers" expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Indicates the number of rebuffers a given watch time session had. |
| {MediaRebufferingCategories} |
| </summary> |
| <token key="MediaRebufferingCategories" variants="MediaRebufferingCategories"> |
| <variant name=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.RegionCapture.CropTo.Latency" units="ms" |
| expires_after="2026-03-25"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| Duration in milliseconds of the time it takes for a |
| BrowserCaptureMediaStreamTrack.cropTo() call to resolve (either successfully |
| or with an error). Note a call which never resolves won't be counted in this |
| metric. |
| |
| Warning: this histogram was expired from 2025-01-07 to 2025-03-25; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RegionCapture.CropTo.Result2" |
| enum="ApplySubCaptureTargetResult" expires_after="2026-03-25"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| Tracks the result of calls to BrowserCaptureMediaStreamTrack.cropTo(). |
| Recorded when resolving the promise produced by cropTo(). |
| |
| Warning: this histogram was expired from 2025-01-07 to 2025-03-25; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RegionCapture.ProduceCropTarget.Function.Result" |
| enum="ProduceTargetFunctionResult" expires_after="2026-03-25"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| Tracks the result of calls to CropTarget.fromElement(). Specifically, this |
| histogram tracks whether a new Promise was produced, and if not, why not. |
| Another histogram tracks the result of new Promises, i.e. whether they were |
| resolved or rejected. |
| |
| Warning: this histogram was expired from 2025-01-07 to 2025-03-25; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RegionCapture.ProduceCropTarget.Promise.Result" |
| enum="ProduceTargetPromiseResult" expires_after="2026-03-25"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| When CropTarget.fromElement() is called for the first time on a given |
| Element, a new Promise is produced. This histogram tracks the result of this |
| Promise - whether it was resolved or rejected. |
| |
| Warning: this histogram was expired from 2025-01-07 to 2025-03-25; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.AudioBitrate" units="kbps" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Measured audio content transfer bitrate while remoting content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.AudioChannelLayout" enum="ChannelLayout" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Audio channel layout used while remoting content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.AudioCodec" enum="AudioCodec" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Audio codec used while remoting content.</summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.AudioSamplesPerSecond" enum="AudioSampleRate" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Audio sampling rate while remoting audio content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.AudioSamplesPerSecondUnexpected" units="Hz" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Audio sampling rate while remoting audio content (atypical values, in Hz). |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.Compatibility" enum="RemotingCompatibility" |
| expires_after="2026-03-12"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Whether the given media is compatible with media remoting. Recorded whenever |
| the conditions are met to start remoting (e.g. the media element is the |
| dominant page content and is not paused). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.RemotePlaybackEnabledByPage" |
| enum="BooleanEnabled" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Tracks whether a web page allows content to be remoted. Recorded when the |
| media player finishes loading and when the site changes this attribute |
| afterwards. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.SessionDuration" units="ms" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Measures the duration of each remoting session.</summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.SessionStartFailedReason" |
| enum="RemotingStartFailReason" expires_after="2026-03-12"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Tracks the reason that a session failed to start.</summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.SessionStartTrigger" |
| enum="RemotingStartTrigger" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Tracks the trigger for starting a remoting session.</summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.SessionStopTrigger{RemotingSessionDuration}" |
| enum="RemotingStopTrigger" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Tracks the trigger for stopping a remoting session. |
| {RemotingSessionDuration} |
| </summary> |
| <token key="RemotingSessionDuration"> |
| <variant name=""/> |
| <variant name=".Duration0To100MilliSec" |
| summary="remoting sessions have duration in (0, 0.1] seconds"/> |
| <variant name=".Duration1To3Sec" |
| summary="remoting sessions have duration in (1, 3] seconds"/> |
| <variant name=".Duration3To5Sec" |
| summary="remoting sessions have duration in (3, 5] seconds"/> |
| <variant name=".Duration5To10Sec" |
| summary="remoting sessions have duration in (5, 10] seconds"/> |
| <variant name=".Duration10To15Sec" |
| summary="remoting sessions have duration in (10, 15] seconds"/> |
| <variant name=".Duration100MilliSecTo1Sec" |
| summary="remoting sessions have duration in (0.1, 1] seconds"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Remoting.ShortSessionDuration" units="ms" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Measures the duration of each remoting session shorter than 15 seconds. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.TimeUntilFirstPlayout" units="ms" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Measures how long, from the start of a remoting session, until content began |
| playing out on the remote device. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.TimeUntilRemoteInitialized" units="ms" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Measures how long, from the start of a remoting session, until a message was |
| received from the remote device indicating initialization succeeded. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.TrackConfiguration" |
| enum="RemotingTrackConfiguration" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Tracks whether audio or video or both are remoted. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.VideoAspectRatio" units="%" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Aspect ratio of video while remoting content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.VideoBitrate" units="kbps" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Measured video content transfer bitrate while remoting content. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.VideoCodec" enum="VideoCodec" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Video codec used while remoting content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.VideoCodecProfile" enum="VideoCodecProfile" |
| expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Video codec profile used while remoting content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.VideoNaturalWidth" units="pixels" |
| expires_after="2026-05-31"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Video width while remoting content. |
| |
| NOTE: was expired 2025-02-01 to 2025-03-12, some data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Remoting.VideoPixelRateSupport" |
| enum="RemotingVideoPixelRateSupport" expires_after="2026-03-12"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Pixels-per-second in a video and whether the receiver supports its playback. |
| Recorded whenever we are about to start media remoting a video. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.AverageQueueLengthX10" |
| units="frames" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| 10 times the average queue length when Render() is called in the RTC |
| low-latency video renderer. Repeatedly measured with a period of 100 s for |
| as long as the stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.DrainedFramesPermille" |
| units="permille" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Per mille of frames drained in the RTC low-latency video renderer. |
| Repeatedly measured with a period of 100 s for as long as the stream is |
| active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.DroppedFramesPermille" |
| units="permille" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Per mille of frames dropped in the RTC low-latency video renderer. |
| Repeatedly measured with a period of 100 s for as long as the stream is |
| active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.EnterDrainModeCount" |
| units="count" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Number of times drain mode is entered. Repeatedly measured with a period of |
| 100 s for as long as the stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.MaxQueueLength" |
| units="frames" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| The maximum queue length that is observed when Render() is called in the RTC |
| low-latency video renderer. Repeatedly measured with a period of 100 s for |
| as long as the stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.MaxSizeDropQueueCount" |
| units="count" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Number of times the maximum queue size is exceeded and the entire queue is |
| dropped. Repeatedly measured with a period of 100 s for as long as the |
| stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.NoNewFrameToRenderPermille" |
| units="permille" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Per mille of render times where the queue is empty and there is no new frame |
| to render. Repeatedly measured with a period of 100 s for as long as the |
| stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.ReduceSteadyStateCount" |
| units="count" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Number of times the reduce steady state queue feature is activated. |
| Repeatedly measured with a period of 100 s for as long as the stream is |
| active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.TotalFrames" units="frames" |
| expires_after="2026-05-11"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Total number of frames enqueued to the RTC low-latency video renderer. |
| Repeatedly measured with a period of 100 s for as long as the stream is |
| active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RtcLowLatencyVideoRenderer.TryToRenderFrameCount" |
| units="count" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Number of times we try to render a new frame. Repeatedly measured with a |
| period of 100 s for as long as the stream is active. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderError" enum="MediaStatusCode" |
| expires_after="2026-03-15"> |
| <owner>posciak@chromium.org</owner> |
| <owner>liberato@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Counts of video decode errors reported to RTCVideoDecoder, recorded when an |
| error is reportd to RTCVideoDecoder. Also used for DecoderStream. Expired in |
| M83 and re-added in M92. Warning: this histogram was expired between |
| 2023-04-16 to 2023-04-20; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderFallbackReason.{Codecs}" |
| enum="RTCVideoDecoderFallbackReason" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| The reason for fallback to software decoding for the codec {Codecs}. |
| Reported when a fallback to software decoding occurs. |
| </summary> |
| <token key="Codecs"> |
| <variant name="H264" summary=""/> |
| <variant name="Other" summary=""/> |
| <variant name="Vp8" summary=""/> |
| <variant name="Vp9" summary=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderFirstFrameLatencyMs" units="ms" |
| expires_after="2022-06-05"> |
| <owner>liberato@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Time from decoder creation until the first frame is decoded. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderInitDecodeSuccess" enum="BooleanSuccess" |
| expires_after="never"> |
| <!-- expires-never: WebRTC health metric. --> |
| |
| <owner>sprang@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Indicates whether we were successful in initializing hardware video decoder |
| for use in the RTC pipeline. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderInitializationLatencyMs" units="ms" |
| expires_after="2026-05-11"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Initialization latency of the hardware video decoder that is used in the RTC |
| pipeline. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderMaxInFlightDecodes" units="frames" |
| expires_after="2024-04-20"> |
| <owner>liberato@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Max number of frames sent for video decode via the DecoderStream adapter, |
| that have not also returned a decoded video frame. The metric is emitted |
| once per RTCVideoDecoderStreamAdapter instance, as the max observed value |
| over that instance's lifetime. Warning: this histogram was expired between |
| 2022-08-14 to 2023-04-20; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderProfile" enum="VideoCodecProfile" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>sprang@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary>Video codec profile used in RTC video decoder.</summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoDecoderReinitializationLatencyMs" units="ms" |
| expires_after="2026-04-27"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Reinitialization latency of the hardware video decoder that is used in the |
| RTC pipeline. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoEncoder.Initialize" units="ms" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| The duration of initializing a hardware encoder in WebRTC API. It is |
| recorded whenever RTCVideoEncoder::InitEncode() is called. Warning: this |
| histogram was expired from 2024-09-30 to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoEncoderInitEncodeSuccess" enum="BooleanSuccess" |
| expires_after="never"> |
| <!-- expires-never: WebRTC health metric. --> |
| |
| <owner>sprang@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Indicates whether we were successful in initializing hardware video encoder |
| for use in the RTC pipeline. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoEncoderProfile" enum="VideoCodecProfile" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>sprang@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary>Video codec profile used in RTC video encoder.</summary> |
| </histogram> |
| |
| <histogram name="Media.RTCVideoEncoderStatus.{Codecs}" enum="EncoderStatus" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>hiroh@chromium.org</owner> |
| <owner>sprang@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Records if the {Codecs} encoder was torn down because the stream ended, or |
| if it was due to an encoder error. Recorded once when shutting down an |
| accelerated (or out of process) video encoder. |
| </summary> |
| <token key="Codecs"> |
| <variant name="AV1" summary=""/> |
| <variant name="H264" summary=""/> |
| <variant name="Other" summary=""/> |
| <variant name="VP8" summary=""/> |
| <variant name="VP9" summary=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.ScreenCaptureKit.FullscreenModuleMode" |
| enum="ScreenCaptureKitFullscreenModuleMode" expires_after="2026-01-18"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Records the mode that is used in the ScreenCaptureKit Fullscreen module if |
| the selected window to capture belongs to a supported application. The mode |
| is reported once per captured window when the fullscreen module is created. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ScreenCaptureKit.SCContentSharingPicker2" |
| enum="ScreenCaptureKitSCContentSharingPicker" expires_after="2026-01-04"> |
| <owner>tovep@chromium.org</owner> |
| <owner>kron@chromium.org</owner> |
| <owner>eladalon@chromium.org</owner> |
| <summary> |
| Records calls to SCContentSharingPicker and responses to the |
| SCContentSharingPickerObserver. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Session.ActiveTime" units="ms" |
| expires_after="2023-01-22"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time during which a media session has been active, in other words, the time |
| between an activation and deactivation, without counting time while it was |
| suspended. If a session is activated after being deactivated, there will be |
| two entries. For example, if a user plays a song but is interrupted by a |
| phone call, it will only account for the song playing time. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Session.EnterPictureInPictureV2" |
| enum="MediaSessionEnterPictureInPictureType" expires_after="2026-05-24"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Recorded when EnterPictureInPicture or EnterAutoPictureInPicture is called |
| on a MediaSessionImpl. Records why picture-in-picture was triggered (whether |
| it was for the default handler or a website-provided one, and whether the |
| trigger was manual or automatic). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Session.PictureInPicture.TotalTimeForSession" units="ms" |
| expires_after="2026-04-12"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time during which Picture in Picture windows have been open during a |
| MediaSession. The time spent is accumulated every time a Picture in Picture |
| window is opened using MediaSession and subsequently closed; The total time |
| is recorded when the MediaSession is destroyed. This metric is recorded |
| regardless of the Picture in Picture window type (document vs video), and of |
| the reason for closing the window (UI interaction, returning back to opener |
| tab, etc.). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Session.PictureInPicture.TotalTimeForSessionV2" |
| units="ms" expires_after="2026-04-12"> |
| <owner>bkeen@google.com</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time during which Picture in Picture windows have been open during a |
| MediaSession. The time spent is accumulated every time a Picture in Picture |
| window is opened using MediaSession and subsequently closed; The total time |
| is recorded when the MediaSession is destroyed. This metric is recorded |
| regardless of the Picture in Picture window type (document vs video), and of |
| the reason for closing the window (UI interaction, returning back to opener |
| tab, etc.). |
| |
| Similar to Media.Session.PictureInPicture.TotalTimeForSession, but with a |
| maximum of 10 hours and a bucket size of 100. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Session.Play" enum="MediaSessionActionSource" |
| expires_after="2024-05-05"> |
| <owner>steimel@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of times the user started playback of a media session using other |
| means than the play button on the page. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.SRC.VideoCodec.MP4" enum="VideoCodec" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec used in plain src= (not MSE) HTML5 media if the media container |
| is MP4. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.SRC.VideoCodec.WebM" enum="VideoCodec" |
| expires_after="never"> |
| <!-- expires-never: Codec and container support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec used in plain src= (not MSE) HTML5 media if the media container |
| is WebM. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.ThumbnailCapturerMac.ShareableContentErrorPercentage" |
| units="%" expires_after="2026-03-09"> |
| <owner>kron@google.com</owner> |
| <owner>eladalon@google.com</owner> |
| <summary> |
| This histogram tracks the percentage of callbacks where there was no |
| shareable content returned from the OS. This is recorded in the destructor |
| of ThumbnailCapturerMac. The metric is rounded upwards so that a single |
| error shows up as at least 1%. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.TimeToFirstFrame.{PlaybackType}" units="ms" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time in milliseconds from when WebMediaPlayerImpl starts loading until the |
| first video frame has been shown. |
| </summary> |
| <token key="PlaybackType"> |
| <variant name="All" summary="all"/> |
| <variant name="EME"/> |
| <variant name="HLS"/> |
| <variant name="MediaFoundationRenderer"/> |
| <variant name="MSE"/> |
| <variant name="SRC"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.TimeToMetadata.{PlaybackType}" units="ms" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time in milliseconds from when WebMediaPlayerImpl starts loading until |
| metadata is known. |
| </summary> |
| <token key="PlaybackType"> |
| <variant name="All" summary="all"/> |
| <variant name="EME"/> |
| <variant name="HLS"/> |
| <variant name="MSE"/> |
| <variant name="SRC"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.TimeToPlayReady.{PlaybackType}" units="ms" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Time in milliseconds from when WebMediaPlayer starts loading until it has |
| buffered enough to start playback. |
| </summary> |
| <token key="PlaybackType"> |
| <variant name="All" summary="all"/> |
| <variant name="EME"/> |
| <variant name="HLS"/> |
| <variant name="MediaFoundationRenderer"/> |
| <variant name="MSE"/> |
| <variant name="SRC"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.Ui.GetDisplayMedia.AudioCapturePermissionChecker.Interactions" |
| enum="AudioCapturePermissionCheckerInteractions" expires_after="2026-11-11"> |
| <owner>kron@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Records the flow and user interactions related to checking system audio |
| capture permission on macOS during getDisplayMedia. This includes whether |
| the check is enabled, when it is initiated, the result of the check |
| (granted/denied), and the user's subsequent actions if permission is denied |
| (e.g., opening settings, cancelling, or sharing with/without audio). |
| |
| Recorded at different stages: Enabled/Disabled: When the media picker dialog |
| is opened. CheckInitiated: When the permission check is started. |
| PermissionGranted/Denied: When the permission check completes. |
| SystemSettingsOpenedAfterDenial: The first time the open system settings |
| button is clicked. CancelSharingAfterDenial: When the user cancels the |
| dialog after a permission denial. Share...AfterDenial: When the user accepts |
| a selected source after a permission denial. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.BasicFlow.AudioToggleState.{Type}" |
| enum="GetDisplayMediaAudioToggleStatus" expires_after="2026-04-19"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>olka@chromium.org</owner> |
| <owner>tovep@chromium.org</owner> |
| <summary> |
| Recorded after a Web application calls getDisplayMedia(), after the user |
| chooses to share a display surface of type {Type}. (Not recorded if the user |
| rejects the prompt.) Tracks the state of the audio toggle at the time when |
| the user approved the capture. If the audio toggle is not present, this |
| histogram distinguishes the reason for its absence. Note that |
| `WindowsAppAudio` is a subset of `Windows` where the option to share |
| application audio is provided instead of system audio. |
| </summary> |
| <token key="Type"> |
| <variant name="Screens"/> |
| <variant name="Tabs"/> |
| <variant name="Windows"/> |
| <variant name="WindowsAppAudio"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.Ui.GetDisplayMedia.BasicFlow.HighlightedTabDiscardStatus" |
| enum="HighlightedTabDiscardStatus" expires_after="2025-08-24"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| When getDisplayMedia() is called, the user is shown a list of tabs, windows |
| and screens they can choose to capture. If the user highlights a discarded |
| tab, no preview is shown - which is a problem. This histogram tracks how |
| often the user sees at least one missing preview due to highlighting a |
| discarded tab. (Contrast this with SelectedTabDiscardStatus.) The histogram |
| is recorded when the media-picker dialog is closed - either through the user |
| accepting or rejecting the dialog, or if the document that called |
| getDisplayMedia() is unloaded (e.g. if the tab is closed). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.BasicFlow.SelectedTabDiscardStatus" |
| enum="SelectedTabDiscardStatus" expires_after="2025-08-24"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <summary> |
| When getDisplayMedia() is called, the user is shown a list of tabs, windows |
| and screens they can choose to capture. If the user highlights a discarded |
| tab, no preview is shown - which is a problem. This histogram tracks how |
| often the user ends up choosing to share a discarded tab. (Contrast this |
| with HighlightedTabDiscardStatus.) The histogram is recorded when the |
| media-picker dialog is closed - either through the user accepting or |
| rejecting the dialog, or if the document that called getDisplayMedia() is |
| unloaded (e.g. if the tab is closed). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.BasicFlow.SourceCount.{Type}" |
| units="count" expires_after="2026-05-24"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>tovep@chromium.org</owner> |
| <summary> |
| Record how many sources of type {Type} were available for the user to choose |
| from. Recorded when the dialog is closed (user selected a source, cancelled, |
| or closed the tab that owns the dialog). |
| </summary> |
| <token key="Type"> |
| <variant name="Screens"/> |
| <variant name="Tabs"/> |
| <variant name="Windows"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.BasicFlow.UserInteraction" |
| enum="MediaUiGetDisplayMediaBasicFlowUserInteraction" |
| expires_after="2026-04-26"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <summary> |
| Records the result of the user's interaction with the media picker dialog |
| which is displayed following a call to getDisplayMedia that results in the |
| basic flow (preferCurrentTab either unspecified or is false). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.DisplayCapturePolicyResult" |
| enum="DisplayCapturePolicyResult" expires_after="2024-03-17"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <summary> |
| Records whether the display-capture permission policy allows/disallows this |
| call to getDisplayMedia. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.HasScreenRecordingPermission" |
| enum="Boolean" expires_after="2026-09-25"> |
| <owner>tovep@chromium.org</owner> |
| <owner>eladalon@chromium.org</owner> |
| <owner>kron@chromium.org</owner> |
| <summary> |
| Records whether the user has screen recording permission when the |
| DesktopMedia picker dialog is opened. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.PreferCurrentTabFlow.UserInteraction" |
| enum="MediaUiGetDisplayMediaPreferCurrentTabFlowUserInteraction" |
| expires_after="2024-09-22"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>fbeaufort@chromium.org</owner> |
| <summary> |
| Records the result of the user's interaction with the media picker dialog |
| which is displayed following a call to getDisplayMedia where |
| preferCurrentTab was specified. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Ui.GetDisplayMedia.ScreenSharingPermissionInteractionMac" |
| enum="MediaUiGetDisplayMediaPermissionInteraction" |
| expires_after="2026-05-13"> |
| <owner>tovep@chromium.org</owner> |
| <owner>eladalon@chromium.org</owner> |
| <owner>kron@chromium.org</owner> |
| <summary> |
| Records how far the user has proceeded in the journey to open the |
| screen-recording settings when trying to share a screen without having the |
| permission to do so. This histogram is recorded each time the dialog is |
| closed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.TabSharingInfoBarInteraction" |
| enum="MediaUiGetDisplayMediaTabSharingInfoBarInteraction" |
| expires_after="2026-05-07"> |
| <owner>tovep@chromium.org</owner> |
| <owner>eladalon@chromium.org</owner> |
| <summary> |
| Records which controls are clicked in the TabSharingInfoBar. The histogram |
| is recorded for each click on such a control. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.Ui.GetDisplayMedia.WindowSharingPermissionInteractionMac" |
| enum="MediaUiGetDisplayMediaPermissionInteraction" |
| expires_after="2026-05-13"> |
| <owner>tovep@chromium.org</owner> |
| <owner>eladalon@chromium.org</owner> |
| <owner>kron@chromium.org</owner> |
| <summary> |
| Records how far the user has proceeded in the journey to open the |
| screen-recording settings when trying to share a window without having the |
| permission to do so. This histogram is recorded each time the dialog is |
| closed. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.{Flow}.DialogDuration" units="ms" |
| expires_after="2026-04-26"> |
| <owner>tovep@chromium.org</owner> |
| <owner>eladalon@chromium.org</owner> |
| <summary> |
| The time-duration the DesktopMediaPickerDialog is opened when |
| getDisplayMedia is called with the preferCurrentTab constraint either set to |
| true (PreferCurrentTabFlow) or unspecified/false (BasicFlow). The duration |
| is recorded each time the dialog is closed. |
| </summary> |
| <token key="Flow"> |
| <variant name="BasicFlow"/> |
| <variant name="PreferCurrentTabFlow"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.Ui.GetDisplayMedia.{Type}.UserInteractionWithControls" |
| enum="GetDisplayMediaUserInteractionWithControls" |
| expires_after="2026-08-20"> |
| <owner>eladalon@chromium.org</owner> |
| <owner>tovep@chromium.org</owner> |
| <summary> |
| When the user shares a tab, window or screen, the browser shows the user |
| some UX elements which can control the session - stop sharing, hide |
| controls, share something else, change active tab, etc. Which UX elements |
| are available depends on what is shared as well as other factors. The |
| histograms defined here track which controls the user interacted with, if |
| any. Recording takes place when the interaction happens; if no interaction |
| occurs, this is recorded when the controls are hidden from the user |
| (typically when the capture session ends through other means). It should be |
| noted that, while the name indicates getDisplayMedia(), this histogram is |
| actually recorded for any screen-sharing session, including casting and |
| extension APIs. |
| </summary> |
| <token key="Type"> |
| <variant name="Screens"/> |
| <variant name="Tabs"/> |
| <variant name="Windows"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.UnderflowDuration2.{PlaybackType}" units="ms" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The amount of time taken to leave the underflow state (i.e. resume playback) |
| for playbacks. This doesn't report initial zero samples, which was |
| previously used to compensate for playbacks that don't rebuffer. |
| </summary> |
| <token key="PlaybackType"> |
| <variant name="All" summary="all"/> |
| <variant name="EME"/> |
| <variant name="HLS"/> |
| <variant name="MediaFoundationRenderer"/> |
| <variant name="MSE"/> |
| <variant name="SRC"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.URLScheme2" enum="URLSchemeForHistogram" |
| expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| URL scheme used with HTML5 media; only recorded for src=URL playbacks and |
| not for Media Source Extensions playbacks. Each URL provides one sample. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.V4l2VideoDecoder.Error" enum="V4l2VideoDecoderFunctions" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Records errors during normal V4L2VideoDecoder operations. These can happen |
| during initialization, decode or other internal state changes. Multiple |
| errors can be recorded during the object lifetime. Warning: this histogram |
| was expired from 2024-05-19 to 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VaapiLinux.SupportedVideoDecoder" |
| enum="VideoDecoderType" expires_after="2022-02-28"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the usage of VaapiVideoDecoder VaapiVideoDecodeAccelerator based on |
| vulkan support and Vaapi driver version on linux. This is recorded on GPU |
| process startup when hardware accelerated video decoding support is checked. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VaapiVideoDecoder.DecodeError" enum="BooleanError" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| The codec-specific delegate in VaapiVideoDecoder has returned an error from |
| Decode(). This could be a parse error, or a VA error itself. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VaapiVideoDecoder.VaapiWrapperCreationSuccess" |
| enum="BooleanSuccess" expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Whether the creation of VaapiWrapper succeeded or not inside |
| VaapiVideoDecoder. Warning: this histogram was expired from 2023-02-12 to |
| 2025-09-01; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VaapiWrapper.VADisplayStateInitializeSuccess" |
| enum="BooleanSuccess" expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Whether the call to VaapiWrapper's VADisplayState::Initialize() succeeded or |
| not. Warning: this histogram was expired between 2023-02-12 to 2023-04-20; |
| data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VAJDA.ResponseToClient" |
| enum="MjpegDecodeAcceleratorErrorCode" expires_after="2022-01-07"> |
| <owner>andrescj@chromium.org</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| The response given to the client by VaapiJpegDecodeAccelerator for a decode |
| request. This is recorded when the decode succeeds or fails. The recorded |
| value corresponds to a MjpegDecodeAccelerator::Error. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VAVDA.VaapiWrapperCreationSuccess" enum="BooleanSuccess" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@google.com</owner> |
| <summary> |
| Whether the creation of VaapiWrapper succeeded or not inside VaVDA.Warning: |
| this histogram was expired from 2023-02-12 to 2025-09-01; data may be |
| missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Autoplay" enum="AutoplaySource" |
| expires_after="2026-05-31"> |
| <owner>evliu@google.com</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the autoplay source of videos. This includes |
| Media.Video.Autoplay.Muted. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Autoplay.Muted.PlayMethod.BecomesVisible" |
| enum="Boolean" expires_after="2026-03-29"> |
| <owner>evliu@google.com</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records muted video started playing with play() become visible at some |
| point. The UMA for false is not complete since it is recorded in a |
| destructor which is garbage-collected. Please subtract |
| Media.Video.Autoplay.Muted "play() method" count with the true |
| count of this histogram to obtain the real false count. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Autoplay.Muted.PlayMethod.OffscreenDuration" |
| units="ms" expires_after="2026-05-31"> |
| <owner>evliu@google.com</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the offscreen playing duration of a muted video autoplaying from |
| play() method. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Autoplay.Muted.UnmuteAction" enum="BooleanSuccess" |
| expires_after="2026-03-29"> |
| <owner>evliu@google.com</owner> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Status of the unmute action on a video that autoplayed because it was muted. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Capture.Mac.CameraSystemPermission.Startup" |
| enum="SystemMediaCapturePermission" expires_after="2024-02-04"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The Mac system permission state for camera. Logged once at browser startup. |
| For more information on the values, see |
| https://developer.apple.com/documentation/avfoundation/avauthorizationstatus. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Capture.Mac.CameraSystemPermission.UserMedia" |
| enum="SystemMediaCapturePermission" expires_after="2026-04-12"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| The Mac system permission state for camera at the time of a user media |
| request. Logged when the system permission is checked. If the permission is |
| "not determined" this is logged, permission is requested, and the |
| resulting permission (from the user response) is also logged. For more |
| information on the values, see |
| https://developer.apple.com/documentation/avfoundation/avauthorizationstatus. |
| Warning: this histogram was expired from 2020-03-01 to 2022-03-09; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Capture.Mac.ScreenCaptureSystemPermission" |
| enum="BooleanAllowed" expires_after="2025-07-27"> |
| <owner>avi@chromium.org</owner> |
| <owner>mark@chromium.org</owner> |
| <summary> |
| The Mac system permission state for screen capture. Logged once at browser |
| startup and when attempting to screen capture. Requires macOS 10.15+. |
| Samples will not be collected on earlier macOS versions. Warning: this |
| histogram was expired from 2024-02-11 to 2024-09-16; data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.Video.Roughness{VideoFrameRateRange}" units="ms" |
| expires_after="2026-05-10"> |
| <owner>eugene@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video playback roughness for a 100s interval. Suffixed by the framerate. |
| {VideoFrameRateRange} |
| </summary> |
| <token key="VideoFrameRateRange"> |
| <variant name=""/> |
| <variant name=".24fps" summary="24 fps"/> |
| <variant name=".25fps" summary="25 fps"/> |
| <variant name=".30fps" summary="30 fps"/> |
| <variant name=".50fps" summary="50 fps"/> |
| <variant name=".60fps" summary="60 fps"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.AspectRatio" units="%" |
| expires_after="2026-03-25"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <summary> |
| Video Capture Device captured aspect ratio, as a rounded integer multiplied |
| by 100. The collection is made in the VideoCaptureController upon reception |
| of the first frame. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.CreateDeviceSuccessLatency" units="ms" |
| expires_after="2026-02-15"> |
| <owner>herre@google.com</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Time during VideoSourceImpl startup taken to create a video_capture::Device |
| object. Only recorded if the creation was successful. Is a subset of |
| Media.VideoCapture.StartSourceSuccessLatency corresponding to Device |
| creation, rather than capture startup in the device. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.DelayUntilFirstFrame" units="ms" |
| expires_after="2026-06-07"> |
| <owner>armax@chromium.org</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Time it takes from the moment that a VideoCaptureController is requested to |
| start to the moment the first video frame arrives at |
| VideoCaptureController::OnFrameReadyInBuffer(). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.Effect2.{VideoEffect}" |
| enum="VideoEffectStatus" expires_after="2025-06-04"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records {VideoEffect} support and whether it is enabled for each video |
| capture device opened. Recorded in DeviceMediaToMojoAdapter::StartInternal |
| in the video capture service. |
| </summary> |
| <token key="VideoEffect"> |
| <variant name="BackgroundBlur" summary="Background Blur"/> |
| <variant name="EyeGazeCorrection" summary="Eye Gaze Correction"/> |
| <variant name="FaceFraming" summary="Face Framing"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.Opened.ByModelId" units="usb_id" |
| expires_after="2025-12-15"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| This metric records an unsigned interger value that corresponds to the USB |
| ID (vendor + device ID) of the webcam that is currently in use by the user. |
| The USB ID is originally a 32-bit hexadecimal number (formatted as |
| XXXX:XXXX) that then is converted to an unsigned integer for metrics |
| purposes. In case of a unknown/invalid USB ID, 0 is logged. This is done |
| when the CreateDevice method is called on the corresponding |
| VideoCaptureDeviceFactory class based on the operating system. For example, |
| on MacOS, this happens when VideoCaptureDeviceFactoryApple::CreateDevice is |
| called. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.Opened.PixelFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-04-26"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| This metric records the pixel format of the active camera video feed at |
| start, and everytime the pixel format changes. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.Opened.Resolution" |
| units="resolution" expires_after="2026-04-26"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| This metric records the resolution of the active camera video feed at start, |
| and everytime the resolution changes. The metric combines the width and |
| height into a single uint32_t value, with the width stored in the first 16 |
| bits and the height stored in the last 16 bits. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.SupportedPixelFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-04-26"> |
| <owner>eshr@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Counts each pixel format an enumerated video capture device supports. This |
| is recorded during the first device enumeration per Capture process launch. |
| (This is usually once per launch of Chrome unless the Capture process |
| crashes.) |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.SupportedResolution" |
| enum="VideoResolutionDesignation" expires_after="2026-03-25"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>eshr@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Counts each resolution supported by an enumerated video capture device. |
| These are categorized by designation (eg. QVGA, HD, 4KUHD, etc) instead of |
| pixel count. This is recorded during the first device enumeration per |
| Capture process launch. (This is usually once per launch of Chrome unless |
| the Capture process crashes.) |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Device.TotalAvailable" units="count" |
| expires_after="2025-12-15"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| This metric counts the number of webcams that are accessible to the user at |
| the start of a video session. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Error" enum="VideoCaptureError" |
| expires_after="2026-04-26"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>armax@chromium.org</owner> |
| <summary> |
| Breaks down the events counted in Media.VideoCaptureManager.Event bucket |
| "Stopping video capture due to error" by the origin of the error. |
| This allows narrowing down what is causing errors. An event for this |
| histogram is emitted once for each time a client disconnects from a video |
| capture session because the session has reported an error. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.FrameRate" units="fps" |
| expires_after="2026-05-24"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>armax@chromium.org</owner> |
| <owner>handellm@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <summary> |
| Video Capture Device frame rate requested by VideoCaptureManager on |
| AllocateAndStart(). The collection is made in the VideoCaptureController |
| upon reception of the first frame. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.GetDeviceInfosResult" |
| enum="GetDeviceInfosResult" expires_after="M118"> |
| <owner>orphis@chromium.org</owner> |
| <owner>toprice@chromium.org</owner> |
| <summary> |
| Used to track the resolution of |
| ServiceVideoCaptureProvider::GetDeviceInfosAsync() and if a retry has been |
| used to get to the current result. See http://crbug.com/1379392. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Height" units="pixels" |
| expires_after="2026-03-25"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <owner>handellm@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <summary> |
| Video Capture Device captured frame height in pixels. The collection is made |
| in the VideoCaptureController upon reception of the first frame. |
| |
| Warning: this histogram was expired from 2023-12-31 to 2025-03-25; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Mac.Device.CapturedIOSurface" |
| enum="Boolean" expires_after="2023-03-19"> |
| <owner>eshr@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <summary> |
| A count of how often the capture device delivers an IOSurface to the capture |
| pipeline. This is recorded once per opening of the camera, when the first |
| video frame is captured. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.VideoCapture.Mac.Device.CapturedWithRequestedPixelFormat" |
| enum="Boolean" expires_after="2023-03-19"> |
| <owner>eshr@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <summary> |
| A boolean count of how often the requested pixel format is the one that was |
| actually captured. This is recorded once per opening of the camera, when the |
| first video frame is captured. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Mac.Device.CapturedWithRequestedResolution" |
| enum="ResolutionComparison" expires_after="2023-04-23"> |
| <owner>eshr@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <summary> |
| An enumeration count of whether or not the requested resolution equals the |
| captured resolution, detailing which dimensions differ in the enum. This is |
| recorded once per opening of the camera, when the first video frame is |
| captured. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Mac.Device.ImplementationClassification" |
| enum="ImplementationClassification" expires_after="2026-06-01"> |
| <owner>avi@chromium.org</owner> |
| <owner>mark@chromium.org</owner> |
| <summary> |
| A classification of the type of AVCaptureDevice being used for capture. This |
| UMA is recorded once per opening of the device. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Mac.Device.ReactionEffectsGesturesState" |
| enum="ReactionEffectsGesturesState" expires_after="2026-09-21"> |
| <owner>guidou@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| An enumeration count of whether reaction effects are enabled and can be |
| triggered by gestures. This is recorded once per opening of the camera. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Mac.Device.RequestedPixelFormat" |
| enum="VideoPixelFormatUnion" expires_after="2023-03-05"> |
| <owner>eshr@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <summary> |
| Counts the pixel formats requested by the VideoCaptureDevice on Mac. This is |
| recorded when the first video frame is captured. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Mac.ValidColorSpaceAfterTransform" |
| enum="Boolean" expires_after="2026-12-07"> |
| <owner>kron@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| A boolean count of how often a valid color space can be determined from the |
| transformed buffer in VideoCaptureDeviceAVFoundation. This is recorded for |
| the first frame in didOutputSampleBuffer that has been passed through the |
| transformer. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.ScaleOverride" units="units" |
| expires_after="2026-03-25"> |
| <owner>jophba@chromium.org</owner> |
| <owner>klausw@chromium.org</owner> |
| <summary> |
| The scalar multiplier used for adjusting the content size during tab capture |
| to align with the requested capture size, multiplied by 100. Recorded when |
| capture of a web contents is started, the content size of the capture |
| changes, and when capture stops. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.ScaleOverrideChangeCount" units="units" |
| expires_after="2026-03-25"> |
| <owner>jophba@chromium.org</owner> |
| <owner>klausw@chromium.org</owner> |
| <summary> |
| The number of times the scale override changed in a single capture session. |
| Recorded when capture of a web contents is stopped. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Start" enum="Boolean" |
| expires_after="2026-04-26"> |
| <owner>toprice@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <summary> |
| Counts the start attempts for video capture, to be compared with the |
| StartOutcome enum histogram. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.StartErrorCode" enum="VideoCaptureError" |
| expires_after="2026-05-03"> |
| <owner>toprice@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Counts detailed outcomes of first starting video capture, as a breakdown of |
| Media.VideoCapture.StartOutcome based on the error codes which caused |
| failures, or kNone if we started successfully. Can also be viewed as the |
| subset of reports to Media.VideoCapture.Error which occur before |
| VideoCaptureImpl first transitions to STARTED. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.StartOutcome" |
| enum="VideoCaptureStartOutcome" expires_after="2026-06-07"> |
| <owner>toprice@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <summary> |
| Counts the times Starting video capture results in success or failure (due |
| to eg timeouts etc). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.StartSourceSuccessLatency" units="ms" |
| expires_after="2026-05-03"> |
| <owner>herre@google.com</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Total time for a VideoSourceImpl to start a device to serve the first push |
| subscription mojo connection. Only recorded if starting is successful. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.StreamShared" enum="Boolean" |
| expires_after="2025-06-22"> |
| <owner>wtlee@chromium.org</owner> |
| <owner>chromeos-camera-app-eng@google.com</owner> |
| <summary> |
| Records when attempting to access a camera and the value represents whether |
| the camera is shared due to multiple camera access. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.StreamSharedSameOrigin" enum="Boolean" |
| expires_after="2025-10-26"> |
| <owner>wtlee@chromium.org</owner> |
| <owner>chromeos-camera-app-eng@google.com</owner> |
| <summary> |
| Records when attempting to share a camera and the value represents whether |
| the origin requesting to share the camera stream is the same origin |
| initiating the video capture device. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Track.FrameDrop.{StreamType}" |
| enum="VideoCaptureFrameDropReason" expires_after="2026-03-25"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <owner>guidou@chromium.org</owner> |
| <owner>armax@chromium.org</owner> |
| <owner>jophba@chromium.org</owner> |
| <summary> |
| An event for this histogram is emitted once for each time a video frame is |
| dropped for a {StreamType} video source, but gets suppressed after |
| `MediaStreamVideoTrack::kMaxConsecutiveFrameDropForSameReasonCount` |
| consecutive drops. Logging resumes again if another frame is delivered or if |
| the frame drop reason changes. The frame drop is recorder on a per-track |
| basis (i.e. cloned tracks also log) and includes out-of-process frame drops |
| (e.g. a DeviceCapture webcam source dropping frames in the capture process). |
| |
| Warning: this histogram was expired from 2024-03-03 to 2025-03-25; data may |
| be missing. |
| </summary> |
| <token key="StreamType"> |
| <variant name="DeviceCapture"/> |
| <variant name="DisplayCapture"/> |
| <variant name="DisplayCaptureCurrentTab"/> |
| <variant name="GumDesktopCapture"/> |
| <variant name="GumTabCapture"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Width" units="pixels" |
| expires_after="2026-03-25"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <owner>handellm@google.com</owner> |
| <owner>jophba@chromium.org</owner> |
| <summary> |
| Video Capture Device captured frame width in pixels. The collection is made |
| in the VideoCaptureController upon reception of the first frame. |
| |
| Warning: this histogram was expired from 2024-05-05 to 2024-05-21; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.D3DDeviceRemovedReason" enum="Hresult" |
| expires_after="2026-05-10"> |
| <owner>ilnik@chromium.org</owner> |
| <owner>video-cmi-mpp@chromium.org</owner> |
| <summary> |
| Error codes received by VideoCaptureDeviceMFWin when checking for D3D11 |
| device removal reason. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.Device.CaptureBeginTime.Interval" |
| units="ms" expires_after="2026-04-19"> |
| <owner>ilnik@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Counts the difference between consecutive capture begin times received from |
| MFSamples. Recorded on each received sample. Offset by +150ms to allow |
| recording of negative values. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.Device.CaptureBeginTime.MFTimeOffset" |
| units="ms" expires_after="2026-06-22"> |
| <owner>ilnik@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Counts the difference between local chrome clock and MFTIME clock. Recorded |
| on each received sample. Offset by +150ms to allow recording of negative |
| values. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.Device.CapturePixelFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-05-19"> |
| <owner>ilnik@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Counts the pixel formats produced by the VideoCaptureDevice on Windows. This |
| is recorded when the camera is opened. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.Device.InternalPixelFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-06-04"> |
| <owner>ilnik@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Counts the pixel formats used internaly by Windows VideoCaptureEngine. This |
| is recorded when the camera is opened. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.Device.IsSharedTexture" enum="Boolean" |
| expires_after="2026-04-28"> |
| <owner>ilnik@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Determine what proportion of frames might actually benefit from zero-copy on |
| Windows. This is recorded when the camera is opened and we get the texture |
| from IMFCaptureEngine. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.Device.RequestedPixelFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-05-18"> |
| <owner>ilnik@google.com</owner> |
| <owner>video-cmi-mpp@google.com</owner> |
| <summary> |
| Counts the pixel formats requested by the consumer on Windows. This is |
| recorded when the camera is opened. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.DeviceFactory.CaptureApi" |
| enum="VideoCaptureApi" expires_after="2026-12-14"> |
| <owner>ilnik@google.com</owner> |
| <owner>handellm@google.com</owner> |
| <owner>video-performance-team@google.com</owner> |
| <summary> |
| The Capture API that is used on Windows. This is recorded when the camera is |
| opened. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCapture.Win.ErrorEvent" enum="Hresult" |
| expires_after="2026-05-31"> |
| <owner>toprice@chromium.org</owner> |
| <owner>hta@chromium.org</owner> |
| <owner>video-cmi-apis@google.com</owner> |
| <summary> |
| Error codes received by VideoCaptureDeviceMFWin on Windows which caused a |
| kWinMediaFoundationGetMediaEventStatusFailed error, ending video capture. |
| Warning: this histogram was expired from 2025-03-30 to 2025-06-03; data may |
| be missing. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.VideoCapture.Windows.NumberOfRetriesNeededForMFGetDeviceStreamCategory" |
| units="retries" expires_after="2023-03-26"> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-dev@chromium.org</owner> |
| <summary> |
| Counts how many retries are needed for calls to MediaFoundation function |
| GetDeviceStreamCategory before getting a result different from |
| MF_E_INVALIDREQUEST or giving up. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="Media.VideoCapture.Windows.NumberOfRetriesNeededForMFGetDeviceStreamCount" |
| units="retries" expires_after="2022-02-01"> |
| <owner>guidou@chromium.org</owner> |
| <owner>webrtc-dev@chromium.org</owner> |
| <summary> |
| Counts how many retries are needed for calls to MediaFoundation function |
| GetDeviceStreamCount before getting a result different from |
| MF_E_INVALIDREQUEST or giving up. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCaptureManager.DesktopCaptureImplementationAndType" |
| enum="DesktopCaptureImplementationAndType" expires_after="2026-09-01"> |
| <owner>handellm@google.com</owner> |
| <owner>ccameron@chromium.org</owner> |
| <summary> |
| Indicates which desktop capture implementation and DesktopID::Type was used |
| for a desktop capture session. Recorded on instantiation of the desktop |
| capturer. Warning: this histogram was expired from 2025-07-27 to 2025-09-05; |
| data may be missing. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoCodec" enum="VideoCodec" expires_after="never"> |
| <!-- expires-never: Codec support planning metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <summary>Video codec used in HTML5 media.</summary> |
| </histogram> |
| |
| <histogram name="Media.VideoDecoderFallback.{VideoCodec}" |
| enum="BooleanDidFallBack" expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Whether Chrome had to fall back to a secondary video decoder with |
| {VideoCodec} video codec after the primary decoder failed reinitialization. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.VideoDecodeStatsDB.OpSuccess.{DbOperation}" |
| enum="BooleanSuccess" expires_after="never"> |
| <!-- expires-never: MediaCapabilities DB health metric. --> |
| |
| <owner>chcunningham@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Indicates whether we were successful performing the operation to |
| {DbOperation}. Recorded once the operation completes. |
| </summary> |
| <token key="DbOperation" variants="DbOperation"/> |
| </histogram> |
| |
| <histogram name="Media.VideoDecodeStatsDB.OpTiming.{DbOperation}" |
| units="microseconds" expires_after="never"> |
| <!-- expires-never: MediaCapabilities DB health metric. --> |
| |
| <owner>chcunningham@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Indicates duration of time performing the operation to {DbOperation}. |
| Recorded once the operation completes or times out. Reported for all users |
| regardless of clock resolution. |
| </summary> |
| <token key="DbOperation" variants="DbOperation"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.D3D12VEA.EncodeStatus.{VideoCodec}" |
| enum="EncoderStatus" expires_after="2026-05-31"> |
| <owner>eugene@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records if the {VideoCodec} encoder was torn down because the stream ended, |
| or if it was due to an encoder error. Recorded once when shutting down an |
| accelerated (or out of process) video encoder. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.D3D12VEA.InitSuccessRate.{VideoCodec}" |
| enum="VEAInitSuccessRate" expires_after="2026-05-31"> |
| <owner>eugene@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the usage and success rate of D3D12 video encode accelerator for |
| {VideoCodec} codec. kInit is recorded every time VEA Initialize() is called. |
| kSuccess is recorded only when VEA initialization completes successfully. |
| Success percentage = (kSuccess count / kInit count) * 100. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.NDKVEA.EncodeStatus.{VideoCodec}" |
| enum="EncoderStatus" expires_after="2026-05-31"> |
| <owner>eugene@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records if the {VideoCodec} encoder was torn down because the stream ended, |
| or if it was due to an encoder error. Recorded once when shutting down an |
| accelerated (or out of process) video encoder on Android. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.NDKVEA.InitStatus.{VideoCodec}" |
| enum="EncoderStatus" expires_after="2026-05-31"> |
| <owner>eugene@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Records the initialization status of the NdkVideoEncodeAccelerator for |
| {VideoCodec}. Recorded every time Initialize() is called. |
| </summary> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Impl}.EncodingLatency.{VideoCodec}" |
| units="ms" expires_after="2026-05-31"> |
| <owner>eugene@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Average encoding latency in milliseconds per frame for the {VideoCodec} |
| codec when using the {Impl}. Recorded on every key frame or when the |
| encoding session is destroyed so remaining samples are reported. |
| </summary> |
| <token key="Impl"> |
| <variant name="D3D12VEA" summary=""/> |
| <variant name="MFVEA" summary=""/> |
| <variant name="NDKVEA" summary=""/> |
| </token> |
| <token key="VideoCodec" variants="VideoCodec"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Area" units="pixels" |
| expires_after="2026-04-26"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The hundredth of a resolution area (i.e. width x height /100) configured in |
| a video encoder. Recorded when a video encoder is destroyed or reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Frames" units="frames" |
| expires_after="2026-04-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The number of successfully encoded frames. Recorded when a video encoder is |
| destroyed or reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Height" units="pixels" |
| expires_after="2026-04-26"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The height configured in a video encoder. Recorded when a video encoder is |
| destroyed or reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Profile" |
| enum="VideoCodecProfile" expires_after="2026-05-03"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Video codec profile used in a video encoder. Recorded when a video encoder |
| is destroyed or reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Status" enum="EncoderStatus" |
| expires_after="2026-05-03"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The last encoder status in a video encoder. If an error occurs, then non kOk |
| value is recorded. Recorded when a video encoder is destroyed or |
| reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.SVC" |
| enum="SVCScalabilityMode" expires_after="2026-04-26"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| SVC Scalability mode configured in a video encoder. Recorded when a video |
| encoder is destroyed or reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoEncoder.{Usage}.{Impl}.Width" units="pixels" |
| expires_after="2026-04-26"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The width configured in a video encoder. Recorded when a video encoder is |
| destroyed or reconfigured. |
| </summary> |
| <token key="Usage" variants="VideoEncoderUsage"/> |
| <token key="Impl" variants="VideoEncoderImpl"/> |
| </histogram> |
| |
| <histogram name="Media.VideoFrameSubmitter.{Source}.PresentationDelay" |
| units="ms" expires_after="never"> |
| <!-- expires-never: used by ChromeOS and RTC test infrastructure --> |
| |
| <owner>kron@chromium.org</owner> |
| <owner>video-performance-team@google.com</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Delay between a VideoFrame being decoded and it being consumed by the OS |
| presentation API (on ChromeOS, this includes the display controller too). |
| Recorded when VideoFrameSubmitter::OnBeginFrame() is called based on the |
| frame timing details that is passed as parameter. |
| </summary> |
| <token key="Source" variants="VideoSource"/> |
| </histogram> |
| |
| <histogram name="Media.VideoFrameSubmitter.{Source}.PreSubmitBuffering" |
| units="ms" expires_after="never"> |
| <!-- expires-never: used by ChromeOS and RTC test infrastructure --> |
| |
| <owner>kron@chromium.org</owner> |
| <owner>video-performance-team@google.com</owner> |
| <owner>chromeos-gfx@chromium.org</owner> |
| <summary> |
| Delay between a VideoFrame being decoded and it being handed over to the |
| CompositorFrameSink, essentially capturing the buffering in the Renderer. |
| This value is strictly included in |
| Media.VideoFrameSubmitter.{Source}.PresentationDelay. Recorded when the |
| composition frame is created. |
| </summary> |
| <token key="Source" variants="VideoSource"/> |
| </histogram> |
| |
| <histogram name="Media.VideoHeight.Initial.{PlaybackType}" units="pixels" |
| expires_after="2026-12-09"> |
| <owner>xhwang@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| The height of the first video frame in an HTML5 video for {PlaybackType} |
| playbacks. Reported when the first video frame is available. |
| </summary> |
| <token key="PlaybackType"> |
| <variant name="All" summary="all"/> |
| <variant name="EME"/> |
| <variant name="HLS"/> |
| <variant name="MediaFoundationRenderer"/> |
| <variant name="MSE"/> |
| <variant name="SRC"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.VideoRenderer.CadenceChanges" units="changes" |
| expires_after="never"> |
| <!-- expires-never: Media pipeline health metric. --> |
| |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| Indicates how many cadence changes have occurred during playback, a zero |
| value is emitted at the beginning of playback. Subsequent values are emitted |
| during video rendering for each cadence change (up to a maximum of 10). |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.VideoResourceUpdater.FrameFormat" |
| enum="VideoPixelFormatUnion" expires_after="2026-06-07"> |
| <owner>dalecurtis@chromium.org</owner> |
| <owner>media-dev@chromium.org</owner> |
| <summary> |
| The format of each VideoFrame passed to VideoResourceUpdater. Recorded prior |
| to resources being obtained for passing to Viz. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.WatchTime{MediaWatchTimeCategories}" units="ms" |
| expires_after="2026-05-24"> |
| <owner>dalecurtis@chromium.org</owner> |
| <summary> |
| Watch time is defined as the amount of elapsed media time for audio+video |
| media aggregated per player instance. A minimum of 7 seconds of unmuted, |
| foreground media must be watched to start watch time monitoring. Watch time |
| is checked on a regular basis and reported to UMA upon one of the stop |
| events mentioned below or at player destruction if none occur prior. |
| |
| Any one of paused, hidden, or muted is sufficient to stop watch time metric |
| reports. Each of these has a hysteresis where if the state change is undone |
| within some time, the watch time will be counted as uninterrupted. |
| |
| Power events (on/off battery power) have a similar hysteresis, but unlike |
| the aforementioned properties, will not stop metric collection. |
| |
| Each seek event will result in a new watch time metric being started and the |
| old metric finalized as accurately as possible. {MediaWatchTimeCategories} |
| </summary> |
| <token key="MediaWatchTimeCategories"> |
| <variant name=""/> |
| <variant name=".Audio.AC" |
| summary="Watch time for all media with only an audio track on AC |
| power."/> |
| <variant name=".Audio.All" |
| summary="Watch time for all media with only an audio track."/> |
| <variant name=".Audio.AutoPipMediaPlayback" |
| summary="Watch time for all media with only an audio track on a |
| window opened due to auto picture in picture for media |
| playback."/> |
| <variant name=".Audio.Background.AC" |
| summary="Background watch time for all media with only an audio track |
| on AC power."/> |
| <variant name=".Audio.Background.All" |
| summary="Background watch time for all media with only an audio |
| track."/> |
| <variant name=".Audio.Background.Battery" |
| summary="Background watch time for all media with only an audio track |
| on battery power."/> |
| <variant name=".Audio.Background.EmbeddedExperience" |
| summary="Background watch time for downloaded media on Android with |
| only an audio track."/> |
| <variant name=".Audio.Background.EME" |
| summary="Background watch time for EME media with only an audio |
| track."/> |
| <variant name=".Audio.Background.HLS" |
| summary="Background watch time for HLS media with only an audio |
| track."/> |
| <variant name=".Audio.Background.MSE" |
| summary="Background watch time for MSE media with only an audio |
| track."/> |
| <variant name=".Audio.Background.SRC" |
| summary="Background watch time for SRC media with only an audio |
| track."/> |
| <variant name=".Audio.Battery" |
| summary="Watch time for all media with only an audio track on battery |
| power."/> |
| <variant name=".Audio.Discarded.EME" |
| summary="Watch time less than 7 seconds for EME media with only an |
| audio track."/> |
| <variant name=".Audio.Discarded.HLS" |
| summary="Watch time less than 7 seconds for HLS media with only an |
| audio track."/> |
| <variant name=".Audio.Discarded.MSE" |
| summary="Watch time less than 7 seconds for MSE media with only an |
| audio track."/> |
| <variant name=".Audio.Discarded.SRC" |
| summary="Watch time less than 7 seconds for SRC media with only an |
| audio track."/> |
| <variant name=".Audio.EmbeddedExperience" |
| summary="Watch time for downloaded media on Android with only an |
| audio track."/> |
| <variant name=".Audio.EME" |
| summary="Watch time for EME media with only an audio track."/> |
| <variant name=".Audio.HLS" |
| summary="Watch time for HLS media with only an audio track."/> |
| <variant name=".Audio.MSE" |
| summary="Watch time for MSE media with only an audio track."/> |
| <variant name=".Audio.NativeControlsOff" |
| summary="Watch time for all media with only an audio track not using |
| native controls."/> |
| <variant name=".Audio.NativeControlsOn" |
| summary="Watch time for all media with only an audio track using |
| native controls."/> |
| <variant name=".Audio.SRC" |
| summary="Watch time for SRC media with only an audio track."/> |
| <variant name=".AudioVideo.AC" |
| summary="Watch time for all media with both an audio and video track |
| on AC power."/> |
| <variant name=".AudioVideo.All" |
| summary="Watch time for all media with both an audio and video track."/> |
| <variant name=".AudioVideo.AutoPipMediaPlayback" |
| summary="Watch time for all media with both an audio and video track |
| on a window opened due to auto picture in picture for media |
| playback."/> |
| <variant name=".AudioVideo.AuxiliaryVisibleContent" |
| summary="Watch time for all media with both an audio and video track |
| displayed as a smaller element on screen."/> |
| <variant name=".AudioVideo.Background.AC" |
| summary="Background watch time for all media with both an audio and |
| video track on AC power."/> |
| <variant name=".AudioVideo.Background.All" |
| summary="Background watch time for all media with both an audio and |
| video track."/> |
| <variant name=".AudioVideo.Background.Battery" |
| summary="Background watch time for all media with both an audio and |
| video track on battery power."/> |
| <variant name=".AudioVideo.Background.EmbeddedExperience" |
| summary="Background watch time for downloaded media on Android with |
| both an audio and video track."/> |
| <variant name=".AudioVideo.Background.EME" |
| summary="Background watch time for EME media with both an audio and |
| video track."/> |
| <variant name=".AudioVideo.Background.HLS" |
| summary="Background watch time for HLS media with both an audio and |
| video track."/> |
| <variant name=".AudioVideo.Background.MSE" |
| summary="Background watch time for MSE media with both an audio and |
| video track."/> |
| <variant name=".AudioVideo.Background.SRC" |
| summary="Background watch time for SRC media with both an audio and |
| video track."/> |
| <variant name=".AudioVideo.Battery" |
| summary="Watch time for all media with both an audio and video track |
| on battery power."/> |
| <variant name=".AudioVideo.Discarded.EME" |
| summary="Watch time less than 7 seconds for EME media with only with |
| both an audio and video track."/> |
| <variant name=".AudioVideo.Discarded.HLS" |
| summary="Watch time less than 7 seconds for HLS media with with both |
| an audio and video track."/> |
| <variant name=".AudioVideo.Discarded.MSE" |
| summary="Watch time less than 7 seconds for MSE media with only with |
| both an audio and video track."/> |
| <variant name=".AudioVideo.Discarded.SRC" |
| summary="Watch time less than 7 seconds for SRC media with with both |
| an audio and video track."/> |
| <variant name=".AudioVideo.DisplayFullscreen" |
| summary="Watch time for all media with both an audio and video track |
| displayed in fullscreen."/> |
| <variant name=".AudioVideo.DisplayInline" |
| summary="Watch time for all media with both an audio and video track |
| displayed inline."/> |
| <variant name=".AudioVideo.DisplayPictureInPicture" |
| summary="Watch time for all media with both an audio and video track |
| displayed in picture-in-picture."/> |
| <variant name=".AudioVideo.DominantVisibleContent" |
| summary="Watch time for all media with both an audio and video track |
| displayed as the dominant visible content on screen."/> |
| <variant name=".AudioVideo.EmbeddedExperience" |
| summary="Watch time for downloaded media on Android with both an |
| audio and video track."/> |
| <variant name=".AudioVideo.EME" |
| summary="Watch time for EME media with both an audio and video track."/> |
| <variant name=".AudioVideo.HDR.All" |
| summary="HDR watch time for all media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.HDR.EME" |
| summary="HDR watch time for EME media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.HLS" |
| summary="Watch time for HLS media with both an audio and video track."/> |
| <variant name=".AudioVideo.MediaFoundation.All" |
| summary="MediaFoundations renderer watch time for all media with both |
| an audio and video track."/> |
| <variant name=".AudioVideo.MediaFoundation.Eme" |
| summary="MediaFoundations renderer watch time for EME media with both |
| an audio and video track."/> |
| <variant name=".AudioVideo.MediaFoundation.HDR.All" |
| summary="MediaFoundations renderer HDR watch time for all media with |
| both an audio and video track."/> |
| <variant name=".AudioVideo.MediaFoundation.HDR.EME" |
| summary="MediaFoundations renderer HDR watch time for EME media with |
| both an audio and video track."/> |
| <variant name=".AudioVideo.MSE" |
| summary="Watch time for MSE media with both an audio and video track."/> |
| <variant name=".AudioVideo.Muted.All" |
| summary="Muted watch time for all media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.Muted.AuxiliaryVisibleContent" |
| summary="Muted watch time for all media with both an audio and video |
| track displayed as a smaller element on screen."/> |
| <variant name=".AudioVideo.Muted.DominantVisibleContent" |
| summary="Muted watch time for all media with both an audio and video |
| track displayed as the dominant visible content on screen."/> |
| <variant name=".AudioVideo.Muted.EME" |
| summary="Muted watch time for EME media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.Muted.HLS" |
| summary="Muted watch time for HLS media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.Muted.MSE" |
| summary="Muted watch time for MSE media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.Muted.SRC" |
| summary="Muted watch time for SRC media with both an audio and video |
| track."/> |
| <variant name=".AudioVideo.NativeControlsOff" |
| summary="Watch time for all media with both an audio and video track |
| not using native controls."/> |
| <variant name=".AudioVideo.NativeControlsOn" |
| summary="Watch time for all media with both an audio and video track |
| using native controls."/> |
| <variant name=".AudioVideo.SRC" |
| summary="Watch time for SRC media with both an audio and video track."/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.WebMediaPlayerCompositor.ReasonToClearRenderBuffer" |
| enum="ReasonToClearRenderBuffer" expires_after="2026-10-15"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Returns the reason why the render buffer was cleared in |
| WebMediaPlayerMsCompositor. Recorded in the call to EnqueueFrame() if the |
| render buffer is cleared. If multiple conditions apply, only the first |
| matching enum is reported. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.WebMediaPlayerImpl.HLS{Variant}.MimeType" |
| enum="MimeTypeOfHlsManifest" expires_after="2025-12-31"> |
| <owner>tmathmeyer@chromium.org</owner> |
| <owner>lukasza@chromium.org</owner> |
| <owner>media-dev-uma@chromium.org</owner> |
| <summary> |
| When an HLS manifest is found during loading (on Android only), {Variant} |
| then this histogram records the MIME type of the response. |
| |
| This metric should help assess the web compatibility risk of strict MIME |
| type enforcement, as discussed in |
| https://github.com/annevk/orb/issues/29#issuecomment-967432934 |
| </summary> |
| <token key="Variant"> |
| <variant name="" summary=""/> |
| <variant name=".CorsCrossOrigin" |
| summary="and the response is cross-origin/opaque,"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.WebrtcVideoPerfHistory.GetPerfInfoCodecProfile" |
| enum="VideoCodecProfile" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| The video codec profile that was used when calling GetPerfInfo. Recorded for |
| each call to GetPerfInfo if certain sanity checks pass. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.WebrtcVideoPerfHistory.SavePerfRecordCodecProfile" |
| enum="VideoCodecProfile" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| The video codec profile that was provided to SavePerfRecord. Recorded for |
| each call to SavePerfRecord if certain sanity checks pass. |
| </summary> |
| </histogram> |
| |
| <histogram name="Media.WebrtcVideoPerfHistory.SmoothPrediction.{Operation}" |
| units="custom" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Tracks how the smoothness prediction value was determined (smooth by |
| default, smooth from data, not smooth from data, implicitly smooth, smooth |
| override, or implicitly not smooth) multiplexed with the configuration |
| (codec, pixels, hardware_accelerated). See the code for details. This gives |
| a sparse histogram that is best interpreted using a script for |
| demultiplexing. The value is reported each time either encodingInfo() or |
| decodingInfo() are called and requests a smoothness prediction from |
| WebrtcVideoPerfHistory. |
| </summary> |
| <token key="Operation"> |
| <variant name="Decode"/> |
| <variant name="Encode"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="Media.WebrtcVideoPerfHistory.SmoothVolatility.{Operation}.{Framerate}" |
| enum="SmoothVolatility" expires_after="2026-03-09"> |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Tracks the volatilty of the smoothness predictions after updates to the |
| database, that is, if the smoothness prediction changes or stays at the same |
| value. Recorded after each update to the WebRTC MediaCapabilities database |
| if there was an existing record for the corresponding configuration. |
| </summary> |
| <token key="Operation"> |
| <variant name="Decode"/> |
| <variant name="Encode"/> |
| </token> |
| <token key="Framerate"> |
| <variant name="30fps"/> |
| <variant name="60fps"/> |
| </token> |
| </histogram> |
| |
| <histogram name="Media.WebrtcVideoStatsDB.OpSuccess.{DbOperation}" |
| enum="BooleanSuccess" expires_after="never"> |
| <!-- expires-never: WebRTC MediaCapabilities DB health metric. --> |
| |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Indicates whether we were successful performing the operation to |
| {DbOperation}. Recorded once the operation completes. |
| </summary> |
| <token key="DbOperation" variants="DbOperation"/> |
| </histogram> |
| |
| <histogram name="Media.WebrtcVideoStatsDB.OpTiming.{DbOperation}" |
| units="microseconds" expires_after="never"> |
| <!-- expires-never: WebRTC MediaCapabilities DB health metric. --> |
| |
| <owner>kron@chromium.org</owner> |
| <owner>webrtc-video@google.com</owner> |
| <summary> |
| Indicates duration of time performing the operation to {DbOperation}. |
| Recorded once the operation completes or times out. Reported for all users |
| regardless of clock resolution. |
| </summary> |
| <token key="DbOperation" variants="DbOperation"/> |
| </histogram> |
| |
| <histogram name="Media.{VaapiClientName}.VAAPIError" enum="VaapiFunctions" |
| expires_after="2026-09-01"> |
| <owner>hiroh@chromium.org</owner> |
| <owner>chromeos-gfx-video@chromium.org</owner> |
| <summary> |
| Error codes reported by libva (via VaapiWrapper) while being used from the |
| specified client name. {VaapiClientName} Warning: this histogram was expired |
| from 2025-06-01 to 2025-09-01; data may be missing. |
| </summary> |
| <token key="VaapiClientName"> |
| <variant name="VaapiImageDecodeAcceleratorWorker" summary=""/> |
| <variant name="VaapiImageProcessorBackend" summary=""/> |
| <variant name="VaapiJpegEncodeAccelerator" summary=""/> |
| <variant name="VaapiJpegEncodeAccelerator.Vpp" summary=""/> |
| <variant name="VaapiMjpegDecodeAccelerator" summary=""/> |
| <variant name="VaapiMjpegDecodeAccelerator.Vpp" summary=""/> |
| <variant name="VaapiVideoDecodeAccelerator" summary=""/> |
| <variant name="VaapiVideoDecodeAccelerator.Vpp" summary=""/> |
| <variant name="VaapiVideoDecoder" summary=""/> |
| <variant name="VaapiVideoEncodeAccelerator" summary=""/> |
| <variant name="VaapiVideoEncodeAccelerator.Vpp" summary=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.DeviceSelection.PageInfo.Camera.NumDevices" |
| units="devices" expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the number of camera devices available in the PageInfo combobox. |
| Note: There is a change for the zero device case starting from M128 where we |
| no longer record the zero case if the list of devices is not initialized |
| yet. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.DeviceSelection.PageInfo.Mic.NumDevices" |
| units="devices" expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the number of microphones (audio input) devices available in the |
| PageInfo combobox. Note: There is a change for the zero device case starting |
| from M128 where we no longer record the zero case if the list of devices is |
| not initialized yet. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="MediaPreviews.UI.DeviceSelection.Permissions.Camera.NumDevices" |
| units="devices" expires_after="2026-06-07"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the number of camera devices available in the Permissions combobox. |
| Note: There is a change for the zero device case starting from M128 where we |
| no longer record the zero case if the list of devices is not initialized |
| yet. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.DeviceSelection.Permissions.Mic.NumDevices" |
| units="devices" expires_after="2026-06-07"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the number of microphones (audio input) devices available in the |
| Permissions combobox. Note: There is a change for the zero device case |
| starting from M128 where we no longer record the zero case if the list of |
| devices is not initialized yet. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.DeviceSelection.{UiLocation}.{Type}.Action" |
| enum="MediaPreviewDeviceSelectionUserAction" expires_after="2026-06-07"> |
| <owner>ahmedmoussa@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the kind of user interaction with combobox shown in {UiLocation} |
| media preview. This is recorded during media preview destructor. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo"/> |
| <variant name="Permissions"/> |
| </token> |
| <token key="Type"> |
| <variant name="Camera"/> |
| <variant name="Mic"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.PageInfo.Camera.NumInUseDevices" |
| units="devices" expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the number of previews shown for camera devices in use on PageInfo. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.PageInfo.Camera.PixelHeight" units="pixels" |
| expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the height in pixels of the camera frames rendered in the PageInfo |
| preview (not the actual height of the preview itself). |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.PageInfo.Mic.NumInUseDevices" units="devices" |
| expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the number of previews shown for microphones (audio input) devices |
| in use on PageInfo. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.Permissions.Camera.PixelHeight" |
| units="pixels" expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the height in pixels of the camera frames rendered in the |
| Permissions preview (not the actual height of the preview itself). |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.Preview.{UiLocation}.Video.ActualFPS" |
| units="fps" expires_after="2026-04-05"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the actual FPS of the {UiLocation} camera preview for the time it's |
| on screen. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo" summary="PageInfo video preview Actual FPS"/> |
| <variant name="Permissions" summary="Permissions video preview Actual FPS"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.Preview.{UiLocation}.Video.Delay" units="ms" |
| expires_after="2026-06-07"> |
| <owner>ahmedmoussa@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the duration in which the camera took till getting the first frame. |
| This would help measuring the delay of camera stream. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo"/> |
| <variant name="Permissions"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.Preview.{UiLocation}.Video.ExpectedFPS" |
| units="fps" expires_after="2026-06-07"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the actual FPS of the {UiLocation} camera preview for the time it's |
| on screen. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo" summary="PageInfo video preview Expected FPS"/> |
| <variant name="Permissions" |
| summary="Permissions video preview Expected FPS"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.Preview.{UiLocation}.Video.RenderedPercent" |
| units="%" expires_after="2026-06-07"> |
| <owner>bryantchandler@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the percentage of frames that we got from the camera (ActualFPS) |
| that were actually rendered. Recorded when the {UiLocation} preview is |
| closed. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo" summary="PageInfo video Rendered Percent"/> |
| <variant name="Permissions" summary="Permissions video Rendered Percent"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="MediaPreviews.UI.Preview.{UiLocation}.Video.TimeToActionWithoutPreview" |
| units="ms" expires_after="2026-06-07"> |
| <owner>ahmedmoussa@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the duration till media preview dialog closes if there were no |
| frames received. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo"/> |
| <variant name="Permissions"/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="MediaPreviews.UI.Preview.{UiLocation}.Video.TotalVisibleDuration" |
| units="ms" expires_after="2026-06-07"> |
| <owner>ahmedmoussa@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the duration in which media preview dialog is actually receiving |
| camera feed. If the user switched between multiple cameras, a sum of the |
| camera feeds durations is recorded. If the dialog closes in under 50 ms, |
| this is treated the same way as if we didn't receive any frames. This would |
| help verifying whether the preview was actually seen by the user or not. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo"/> |
| <variant name="Permissions"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.Preview.{UiLocation}.VideoCaptureError" |
| units="VideoCaptureError" expires_after="2026-06-07"> |
| <owner>ahmedmoussa@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records video capture errors received from the {UiLocation} camera preview. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo"/> |
| <variant name="Permissions"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaPreviews.UI.{UiLocation}.{Type}.Duration" units="s" |
| expires_after="2026-06-07"> |
| <owner>ahmedmoussa@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records the length of time the preview is on-screen. As a simplification, we |
| will just record the length of time where {UiLocation} is open. Recorded in |
| the destructor of {UiLocation}. |
| </summary> |
| <token key="UiLocation"> |
| <variant name="PageInfo"/> |
| <variant name="Permissions"/> |
| </token> |
| <token key="Type"> |
| <variant name="Camera"/> |
| <variant name="CameraAndMic"/> |
| <variant name="Mic"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.App.Availability{MediaRouterSuccess}" |
| units="ms" expires_after="2026-05-03"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Round trip time for a Cast app availability request. Can be suffixed with |
| Success or Failure. {MediaRouterSuccess} |
| </summary> |
| <token key="MediaRouterSuccess"> |
| <variant name=".Failure" summary="Failure"/> |
| <variant name=".Success" summary="Success"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Channel.ConnectResult" enum="BooleanSuccess" |
| expires_after="2026-06-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Whether opening Cast channel succeeds or not. Recorded when all opening |
| channel attempts (including retry attempts) finish. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Channel.Error" |
| enum="MediaRouterCastChannelError" expires_after="2026-06-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Errors encountered on a Cast channel. Recorded when a Cast channel fails to |
| open, or when an opened channel fails to respond to keepalive ping request |
| and times out. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Discovery.ConnectedDevicesCount" |
| units="devices" expires_after="2026-06-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The number of connected Cast devices. Recorded when browser finishes |
| discovering Cast devices. Recording happens roughly once per hour. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Discovery.KnownDevicesCount" units="devices" |
| expires_after="2026-05-24"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The number of known Cast devices. Recorded when browser finishes discovering |
| Cast devices. Recording happens roughly once per hour. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Discovery.SinkSource" |
| enum="MediaRouterCastSinkSource" expires_after="2026-02-22"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>The source of discovery for a newly-created Cast sink.</summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.LaunchSessionResponse.AppType" |
| enum="MediaRouterResponseReceiverAppType" expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The type of app that the receiver device choose to launch. Recorded when |
| receiving a receiver status response to the launch request. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Mdns.Channel.Open_Failure" units="ms" |
| expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Duration in milliseconds taken to fail to open a cast channel. Recorded when |
| one opening channel attempt fails. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Cast.Mdns.Channel.Open_Success" units="ms" |
| expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Duration in milliseconds taken to successfully open a cast channel. Recorded |
| when one opening channel attempt succeeds. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Session.Launch" units="ms" |
| expires_after="2026-05-24"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Total time to launch a Cast Streaming mirror session.</summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Session.Length" units="ms" |
| expires_after="2026-04-19"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Total length of a Cast Streaming mirror session of any type, including the |
| time spent in media remoting. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Session.Length.AccessCode" |
| units="ms" expires_after="2025-05-01"> |
| <owner>bzielinski@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Total length of a Cast Streaming mirror session of any type, when the cast |
| sink was discovered via access code. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Session.Length.OffscreenTab" |
| units="ms" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Total length of a Cast Streaming Offscreen Tab mirror session. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Session.Length.Screen" units="ms" |
| expires_after="2026-02-09"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Total length of a Cast Streaming Screen mirror session.</summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Session.Length.Tab" units="ms" |
| expires_after="2026-02-09"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Total length of a Cast Streaming mirror session of type Tab and NOT of types |
| offscreen tab or local file. This includes the time spent in media remoting. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Start.Failure.AccessCodeManualEntry" |
| enum="MirroringServiceErrorType" expires_after="2025-05-01"> |
| <owner>bzielinski@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Whenever a Cast Streaming session to a device discovered by access code |
| manual entry fails to start, record the error associated with the event. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="MediaRouter.CastStreaming.Start.Failure.AccessCodeRememberedDevice" |
| enum="MirroringServiceErrorType" expires_after="2025-05-01"> |
| <owner>bzielinski@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Whenever a Cast Streaming session to a device discovered by access code and |
| remembered via caching fails to start, record the error associated with the |
| event. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Start.Success" enum="MirrorType" |
| expires_after="2026-05-24"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Whenever a Cast Streaming session is successfully started, record if it was |
| for a Tab or Desktop mirroring session. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.CastStreaming.Start.Success.AccessCodeManualEntry" |
| enum="MirrorType" expires_after="2025-05-01"> |
| <owner>bzielinski@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Whenever a Cast Streaming session is successfully started, when the device |
| was discovered by access code maual entry, record if it was for a Tab or |
| Desktop mirroring session. |
| </summary> |
| </histogram> |
| |
| <histogram |
| name="MediaRouter.CastStreaming.Start.Success.AccessCodeRememberedDevice" |
| enum="MirrorType" expires_after="2025-05-01"> |
| <owner>bzielinski@google.com</owner> |
| <owner>cros-edu-eng@google.com</owner> |
| <summary> |
| Whenever a Cast Streaming session is successfully started, when the device |
| was discovered by access code remembered device caching, record if it was |
| for a Tab or Desktop mirroring session. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Dial.AvailableDevicesCount" units="devices" |
| expires_after="2026-07-10"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The number of available DIAL devices. Recorded when browser finishes |
| discovering DIAL devices. Recording happens roughly once per hour. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Dial.CreateRoute" |
| enum="MediaRouterDialCreateRouteResult" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The result of a DIAL CreateRoute request. Recorded when the user requests to |
| create a media route to a DIAL device. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Dial.DeviceDescriptionParsingResult" |
| enum="MediaRouterDeviceDescriptionParsingResult" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Result from parsing DIAL device description XML text. Recorded when utility |
| process returns a DIAL device description object to the DIAL Media Route |
| Provider. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Dial.FetchAppInfo" |
| enum="MediaRouterDialFetchAppInfoResult" expires_after="2026-03-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The result of a DIAL app info request. Recorded when an app info request is |
| issued to a DIAL device. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Dial.KnownDevicesCount" units="devices" |
| expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The number of known DIAL devices. Recorded when browser finishes discovering |
| DIAL devices. Recording happens roughly once per hour. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Discovery.LocalNetworkAccessPermissionGranted" |
| enum="Boolean" expires_after="2026-05-03"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Whether the local network access permission is granted when the local |
| discovery starts. Recorded once per browser session. Recorded on macOS 15 or |
| later. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Icon.Click.Location" |
| enum="MediaRouterDialogActivationLocation" expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary>Location the user clicked to open the Media Router dialog.</summary> |
| </histogram> |
| |
| <histogram |
| name="MediaRouter.MirroringService.DisabledHardwareCodecAndRenegotiated" |
| enum="VideoCodec" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records when a hardware encoder gets disabled during a mirroring session, |
| which prompts a renegotiation without that hardware encoder configuration |
| being offered. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.MirroringService.GpuFactoryContextLost" |
| enum="VideoCodec" expires_after="2026-03-12"> |
| <owner>jophba@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records when the GPU context for the MirroringGpuFactoriesFactory instance |
| is lost. This should prompt a renegotiation without that hardware encoder |
| configuration being offered. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.MirroringService.SessionError" |
| enum="MirroringServiceErrorType" expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Records errors encountered by the Mirroring Service. If an error occurs |
| while media remoting, the service attempts to revert to mirroring. Otherwise |
| mirroring is terminated. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.PresentationRequest.AvailabilityUrlType" |
| enum="PresentationUrlType" expires_after="2026-02-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The type of Presentation URL used in a PresentationRequest by a web page. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.PresentationRequest.UrlBySink2" |
| enum="PresentationUrlBySink" expires_after="2025-08-31"> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Logged when the Media Router starts a presentation according to the type of |
| presentation URL and the type of media sink. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Provider.CreateRoute.Result{MediaRouteProvider}" |
| enum="MediaRouteProviderResult" expires_after="2026-06-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Result of a request to a MediaRouteProvider to create a route. |
| CreateRoute.Result (without a suffix) is recorded for the extension or an |
| unknown MRP. {MediaRouteProvider} |
| </summary> |
| <token key="MediaRouteProvider" variants="MediaRouteProvider"> |
| <variant name=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaRouter.Provider.JoinRoute.Result{MediaRouteProvider}" |
| enum="MediaRouteProviderResult" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Result of a request to a MediaRouteProvider to join a route. |
| JoinRoute.Result (without a suffix) is recorded for the extension or an |
| unknown MRP. {MediaRouteProvider} |
| </summary> |
| <token key="MediaRouteProvider" variants="MediaRouteProvider"> |
| <variant name=""/> |
| </token> |
| </histogram> |
| |
| <histogram |
| name="MediaRouter.Provider.TerminateRoute.Result{MediaRouteProvider}" |
| enum="MediaRouteProviderResult" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>mfoltz@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Result of a request to a MediaRouteProvider to terminate a route. |
| TerminateRoute.Result (without a suffix) is recorded for the extension or an |
| unknown MRP. {MediaRouteProvider} |
| </summary> |
| <token key="MediaRouteProvider" variants="MediaRouteProvider"> |
| <variant name=""/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaRouter.RemotePlayback.SessionLoadTime" units="ms" |
| expires_after="2025-05-11"> |
| <owner>muyaoxu@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Measures how long, from the start of a streaming session, until it switches |
| to Remoting for Remote Playback sessions. The start time is measured when |
| the streaming session has started and the end time is measured when the |
| remoting starts. The metric is recorded when both the start time and end |
| time are measured and duration time is calculated. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.RemotePlayback.SessionStartsBeforeTimeout" |
| enum="Boolean" expires_after="2025-04-13"> |
| <owner>muyaoxu@chromium.org</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Whether Remoting starts before it timeouts for Remote Playback sessions. |
| Recorded when the timeout callback is fired and when Remoting starts. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Sink.SelectedType" enum="MediaSinkType" |
| expires_after="2026-02-22"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The type of the Media Sink that media is being cast to. Recorded each time |
| the user selects a Media Sink to start casting. Recorded for all the UI |
| entry points. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Sink.SelectedType.{Ui}" enum="MediaSinkType" |
| expires_after="2026-02-22"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The type of the Media Sink that media is being cast to. Recorded each time |
| the user selects a Media Sink to start casting from {Ui}. |
| </summary> |
| <token key="Ui"> |
| <variant name="CastHarmony"/> |
| <variant name="GlobalMediaControls"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaRouter.Source.CastingSource" |
| enum="MediaRouterSourceTypes" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The source of a Media Router session. This is recorded to keep track of what |
| kind of media is being streamed. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.Android.DialogAction" |
| enum="MediaRouterAndroidDialogAction" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| A Mediarouter dialog can be two types: (1) A route controller dialog where |
| users can stop casting. (2) A device picker where users can select a device |
| and cast to it. This histogram records when users interact with the dialog |
| (start or stop casting). |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.Android.DialogType" |
| enum="MediaRouterAndroidDialogType" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| A MediaRouter dialog is opened when users click on the Cast buttons supplied |
| by the Cast SDK or the default HTML media player. This histogram records the |
| type of the dialog when the dialog is created. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.Device.Count" units="units" |
| expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Counts the number of devices known and populated to the Media Router dialog |
| (or the Global Media Controls' device picker) three seconds after the dialog |
| loads. Always expected to be non-negative. This includes data recorded from |
| Clank, which uses Android's MediaRouter framework. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.Dialog.ActivationLocationAndCastMode" |
| enum="MediaRouterDialogActivationLocationAndCastMode" |
| expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| This records how the Cast dialog was opened and what Cast mode was used |
| whenever a Cast session starts. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.Dialog.IconStateAtOpen" |
| enum="MediaRouterIconState" expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Whether the Cast toolbar icon is in its ephemeral state (shown only when the |
| feature is active), or is pinned to the toolbar by user pref / admin policy. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.PermissionRejectedViewAction" |
| enum="MediaRouterUiPermissionRejectedViewEvents" expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Recorded when the permission rejected error is shown in the Cast/Gmc dialog |
| and when users click on the system settings link in the error message. |
| </summary> |
| </histogram> |
| |
| <histogram name="MediaRouter.Ui.{DialogType}Dialog.LoadedWithData" units="ms" |
| expires_after="2026-07-10"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| Duration in milliseconds taken from the user click to open the {DialogType} |
| dialog to show available devices. Recorded only when there are discovered |
| devices shown in the dialog. |
| </summary> |
| <token key="DialogType"> |
| <variant name="Cast" summary="Cast"/> |
| <variant name="GMC" summary="Global Media Controls"/> |
| </token> |
| </histogram> |
| |
| <histogram name="MediaRouter.WiredDisplay.AvailableDevicesCount" units="units" |
| expires_after="2026-05-01"> |
| <owner>muyaoxu@google.com</owner> |
| <owner>openscreen-eng@google.com</owner> |
| <summary> |
| The number of Media Sinks available for Casting a Presentation API URL to |
| local screens. Recorded at most once an hour, when the Wired Display Media |
| Route Provider reports an update on the sink count. |
| </summary> |
| </histogram> |
| |
| </histograms> |
| |
| </histogram-configuration> |