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

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

<!--
This file is used to generate a comprehensive list of GPU histograms
along with a detailed description for each histogram.

For best practices on writing histogram descriptions, see
https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md

Please follow the instructions in the OWNERS file in this directory to find a
reviewer. If no OWNERS file exists, please consider signing up at
go/reviewing-metrics (Googlers only), as all subdirectories are expected to
have an OWNERS file. As a last resort you can send the CL to
[email protected].
-->

<histogram-configuration>

<histograms>

<variants name="CacheType">
  <variant name="GrShaderCache"/>
  <variant name="PassthroughProgramCache"/>
</variants>

<variants name="GPUProtectedVideoType">
  <variant name="Clear" summary="Clear"/>
  <variant name="HardwareProtected" summary="HardwareProtected"/>
  <variant name="SoftwareProtected" summary="SoftwareProtected"/>
</variants>

<variants name="GraphiteDawnOrWebGPU">
  <variant name="GraphiteDawn"/>
  <variant name="WebGPU"/>
</variants>

<variants name="NumDisplays">
  <variant name="FourOrMoreDisplays"/>
  <variant name="OneDisplay"/>
  <variant name="ThreeDisplays"/>
  <variant name="TwoDisplays"/>
</variants>

<variants name="WebGPUAdapterType">
  <variant name="Discrete" summary="discrete"/>
  <variant name="Integrated" summary="integrated"/>
</variants>

<variants name="WebGPUCacheable">
  <variant name="D3D11.CompileShader"/>
  <variant name="D3D12.CompileShader"/>
  <variant name="D3D12.CreateComputePipelineState"/>
  <variant name="D3D12.CreateGraphicsPipelineState"/>
  <variant name="Metal.CompileShaderToMSL"/>
  <variant name="Metal.newComputePipelineStateWithDescriptor"/>
  <variant name="Metal.newLibraryWithSource"/>
  <variant name="Metal.newRenderPipelineStateWithDescriptor"/>
  <variant name="OpenGL.CompileShaderToGLSL"/>
  <variant name="Vulkan.CompileShaderToSPIRV"/>
  <variant name="Vulkan.CreateComputePipelines"/>
  <variant name="Vulkan.CreateGraphicsPipelines"/>
</variants>

<variants name="WebGPUFeatureName">
  <variant name="ShaderF16"/>
</variants>

<variants name="WebGPUModule">
  <variant name="ComputePipeline"/>
  <variant name="RenderPipeline"/>
  <variant name="ShaderModule"/>
</variants>

<histogram name="ConfigureDisplays.External.Modeset.AttemptSucceeded"
    enum="BooleanSuccess" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Modeset attempt result of an external display. Every time an external
    display is connected/disconnected, or when the display mode of the external
    screen is changed by the user, Chrome attempts to modeset the display. This
    metric tracks the result of those attempts. Resolution and RefreshRate
    metrics will be recorded for each attempt.
  </summary>
</histogram>

<histogram name="ConfigureDisplays.External.Modeset.FinalStatus"
    enum="BooleanSuccess" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Modeset attempt result of an external display. This is recorded after Chrome
    attempted all the available modes and finally modeset the display. All the
    previously attempted modes and refreshes, including the successful one will
    be recorded.
  </summary>
</histogram>

<histogram name="ConfigureDisplays.Internal.Modeset.AttemptSucceeded"
    enum="BooleanSuccess" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Modeset attempt result of an internal display. Chrome might try additional
    modes after a failed attempt. Every time an external display is
    connected/disconnected, or when the display mode of the external screen is
    changed by the user, Chrome attempts to modeset the display. This metric
    tracks the result of those attempts. Resolution and RefreshRate metrics will
    be recorded for each attempt.
  </summary>
</histogram>

<histogram name="ConfigureDisplays.Internal.Modeset.FinalStatus"
    enum="BooleanSuccess" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Modeset attempt result of an internal display. This is recorded after Chrome
    attempted all the available modes and finally modeset the display. All the
    previously attempted modes and refreshes, including the successful one will
    be recorded.
  </summary>
</histogram>

<histogram name="ConfigureDisplays.Modeset.FinalTaskStatus"
    enum="ConfigureDisplaysTaskStatus" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The final result of a configuration attempt across all displays. This is
    recorded every time Chrome configures all connected displays, or fails to do
    so after exhausting all available modes in one (or more) of the displays.

    Partial success occurs when a configuration is successful, but not with the
    requested resolution/refresh rate for one (or more) of the connected
    displays (e.g. a display fails to modeset at 4k@60Hz, but succeeds at
    1440p@60Hz).
  </summary>
</histogram>

<histogram name="ConfigureDisplays.Modeset.MstExternalDisplaysCount"
    units="count" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Total number of external displays connected via MST and being configured.
    This is recorded every time an external display is connected/disconnected,
    or when the display mode of a screen is about to change.
  </summary>
</histogram>

<histogram name="ConfigureDisplays.Modeset.MstExternalDisplaysPercentage"
    units="%" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Percentage of external displays connected via MST and being configured. This
    is recorded every time an external display is connected/disconnected, or
    when the display mode of a screen is about to change.
  </summary>
</histogram>

<histogram
    name="ConfigureDisplays.Modeset.Test.DynamicCRTCs.{NumDisplays}.PermutationsAttempted"
    units="fallbacks attempted" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Number of fallback CRTC-Connector permutations attempted after initial test
    modeset failure with {NumDisplays} connected. All permutations after success
    are not counted.
  </summary>
  <token key="NumDisplays" variants="NumDisplays"/>
</histogram>

<histogram name="ConfigureDisplays.Modeset.Test.{NumDisplays}.Outcome"
    enum="TestOnlyModesetOutcome" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The outcome of test-only modeset configuration request. If a test modeset
    initially fails, but succeeds on fallback, then it will be counted as
    FallbackSuccess.
  </summary>
  <token key="NumDisplays" variants="NumDisplays"/>
</histogram>

<histogram name="ConfigureDisplays.Modeset.TotalExternalDisplaysCount"
    units="count" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Total number of external displays being configured. This is recorded every
    time an external display is connected/disconnected, or when the display mode
    of a screen is about to change.
  </summary>
</histogram>

<histogram name="ConfigureDisplays.{Connection}.Modeset.Success.RefreshRate"
    units="Hz" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks an {Connection} display's resulting refresh rate after a successful
    display configuration.
  </summary>
  <token key="Connection">
    <variant name="External" summary="external"/>
    <variant name="Internal" summary="internal"/>
  </token>
</histogram>

<histogram name="ConfigureDisplays.{Connection}.Modeset.{Report}.Resolution"
    enum="DisplayResolution" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>{Connection} {Report}</summary>
  <token key="Connection">
    <variant name="External" summary="Tracks an external display's"/>
    <variant name="Internal" summary="Tracks an internal display's"/>
  </token>
  <token key="Report">
    <variant name="OriginalRequest"
        summary="original resolution request during display configuration."/>
    <variant name="Success"
        summary="resulting resolution after a successful display
                 configuration."/>
  </token>
</histogram>

<histogram name="Display.External.BlockZeroSerialNumberType"
    enum="BlockZeroSerialNumberType" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The type of serial number retrieved from block zero of a display's EDID
    during EDID parsing.
  </summary>
</histogram>

<histogram name="Display.External.NumOfSerialNumbersProvided" units="count"
    expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of serial numbers provided in an EDID (i.e. via block zero and/or
    the serial number descriptor block). Values should be in the range of 0-2.
  </summary>
</histogram>

<histogram name="Display.External.ParseEdidOptionals" enum="ParseEdidOptionals"
    expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The availability (or lack thereof) of tracked optional fields during EDID
    parsing of external.
  </summary>
</histogram>

<histogram name="Display.MultipleDisplays.GenerateId.CollisionDetection"
    enum="BooleanDisplayIdCollision" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not multiple connected displays produced identical display IDs
    due to incomplete EDIDs. This may occur when identical displays (same make
    and model) lack serial numbers in both the EDID's block zero or S/N
    descriptor block. Recorded every time Chrome OS detects a change in display
    configuration and attempts to get an updated list of available displays.
  </summary>
</histogram>

<histogram name="Display.ParseEdidFailure" enum="ParseEdidFailure"
    expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Type of failure that occurs during EDID parsing. Typically the failure is
    caused by a mismatch between the EDID size and the expected offset of the
    data component.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.Buffer11CPUMemoryMB" units="MB"
    expires_after="2020-05-10">
  <owner>[email protected]</owner>
  <summary>
    The sum of the size of the CPU-side memory allocations of Buffer11's copies
    (vs. GPU memory allocations). These allocations are used when modifying the
    buffer data on the CPU or when transfering to GPU memory via DMA.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11CreateDeviceError" enum="Hresult"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    An extended Windows error code returned from D3D11CreateDevice on error when
    ANGLE's D3D backend is in use. Can be almost any valid HRESULT or DXGI error
    code, which are listed at
    https://msdn.microsoft.com/en-us/library/windows/desktop/bb509553.aspx.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11FeatureLevel" enum="D3DFeatureLevel"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maxmium supported (or currently requested) Direct3D feature level in
    D3D11 ANGLE. We support as low as 9.3, and as high as 11.1, though Chrome
    should only use 10.0+ for D3D11. Gives an indication of how new a user's
    video card is, what features it supports, and it's general speed tier.
    Recorded on D3D device initialization, loss, or reset when ANGLE's D3D
    backend is in use.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D11InitializeResult" enum="D3D11InitializeResult"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result from initializing a D3D11 device in ANGLE. Can be success, or one
    of several error codes which indicate different reasons for failing.
    Recorded on D3D11 device initialization when ANGLE's D3D backend is in use.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3D9InitializeResult" enum="D3D9InitializeResult"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result from initializing a D3D9 device in ANGLE. Can be success, or one
    of several error codes which indicate different reasons for failing.
    Recorded on D3D9 device initialization when ANGLE's D3D backend is in use.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.D3DShaderBlobSizeKB" units="KB"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The size of compiled D3D shader bytecode.</summary>
</histogram>

<histogram name="GPU.ANGLE.D3DShaderCompilationTimeUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes for fxc to compile HLSL to D3D bytecode. Recorded for all
    clients regardless of support for high resolution timers.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.MetalShader.CacheHitCount" units="count"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    An integer that is logged shortly after the gpu process starts up. The value
    is the number of shaders that were needed and were available in the shader
    cache.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.MetalShader.CacheMissCount" units="count"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    An integer that is logged shortly after the gpu process starts up. The value
    is the number of shaders that were needed and were not in the shader cache.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.MetalShaderCompilationTimeUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it takes for the Metal driver to compile a shader with the
    newLibraryFromSource function. Recorded for all clients regardless of
    support for high resolution timers.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.MetalShaderInBlobCache" enum="Boolean"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    A boolean that is logged for each shader program. A value of true means the
    metallib for the shader existed in blob-cache. A value of false means the
    metallib for the shader did not exist in blob-cache.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.SupportsDXGI1_2" enum="BooleanSupported"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Windows computers running Windows 8+, or running Windows 7 with a platform
    update, support the newer version of DXGI. This update also indicates the
    computer is capable of running Direct3D 11.1 if the hardware supports it.
    Recorded on D3D11 device initialization when ANGLE's D3D backend is in use.
  </summary>
</histogram>

<histogram name="GPU.ANGLE.SyncFromNativeContextMicroseconds"
    units="microseconds" expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the amount of time that it took for WebView to save HWUI's GL state
    when using ANGLE (when not using ANGLE, the corresponding interval is
    recorded as Android.WebView.Gfx.SaveHWUIStateNonANGLEMicroseconds; the
    method of recording is not quite identical, but the two metrics should be
    comparable at a high level). Recorded once per saving of HWUI state when
    drawing with GL. Recorded for all clients as ANGLE does not support checking
    for high-resolution clocks (in practice, all Android devices have
    high-resolution clocks). Note: Expired on June 1 2024 and revived on June 10
    2024.
  </summary>
</histogram>

<histogram name="GPU.AppHelpIsLoaded" enum="Boolean" expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether AppHelp.dll is loaded at GPU initialization. Only recorded
    on Windows platform at GPU process launch time.

    It is not yet known what exactly is triggering the load of AppHelp.dll, and
    so we can't be sure that AppHelp.dll won't be loaded after this is
    collected, even if this metric is false.

    A bug tracking metric collection related to the application compatibility
    layer can be found at crbug.com/1357617.

    Part of a performance investigation that Catan is doing into GPU startup
    time.
  </summary>
</histogram>

<histogram name="GPU.BlocklistFeatureTestResults.{GPUBlocklistPerFeature}"
    enum="GPUBlocklistFeatureTestResults" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts number of browser invocations for which a GPU feature is
    allowed/blocklisted/disabled.
  </summary>
  <token key="GPUBlocklistPerFeature">
    <variant name="Accelerated2dCanvas" summary="Accelerated2dCanvas"/>
    <variant name="GpuCompositing" summary="GpuCompositing"/>
    <variant name="GpuRasterization" summary="GpuRasterization"/>
    <variant name="Webgl" summary="Webgl"/>
    <variant name="Webgl2" summary="Webgl2"/>
    <variant name="Webgpu" summary="Webgpu"/>
  </token>
</histogram>

<histogram name="GPU.BlocklistTestResultsPerEntry"
    enum="GPUBlocklistTestResultPerEntry" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts number of browser invocations for which the GPU process is blocked
    due to a blocklist entry match.

    Warning: this histogram was expired from 2022-07-03 to 2023-12-20; data may
    be missing.
  </summary>
</histogram>

<histogram name="GPU.CanvasOopRaster.OopRasterAndGpuAcceleration"
    enum="CanvasOopRasterAndGpuAcceleration" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records, during GPU process initialization, the combination of the following
    two features being enabled/disabled: 1) Accelerated 2D Canvas 2) OOP
    Rasterization of Canvas.
  </summary>
</histogram>

<histogram name="GPU.CompositingMode" enum="CompositingMode"
    expires_after="never">
  <owner>[email protected]</owner>
  <summary>
    Records what compositing mode (software, GL, etc.) Chrome is using every
    five minutes. This is the default compositing mode that most windows will
    use. There are some window types (eg. menus on some platforms) that always
    use software compositing and ignore the default.
  </summary>
</histogram>

<histogram name="GPU.ContextLost.{ContextType}" enum="ContextLostReason"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The reason a GPU command buffer context of a given type was lost.
  </summary>
  <token key="ContextType">
    <variant name="BrowserCompositor"
        summary="A browser process UI + display compositor command buffer
                 context"/>
    <variant name="BrowserMainThread"
        summary="A browser process shared main thread command buffer context"/>
    <variant name="BrowserWorker"
        summary="A browser process worker command buffer context"/>
    <variant name="DisplayCompositor"
        summary="A display compositor command buffer context"/>
    <variant name="Media" summary="The media worker command buffer context"/>
    <variant name="RenderCompositor"
        summary="A RenderCompositor GPU command buffer context"/>
    <variant name="RenderMainThread"
        summary="A RenderMainThread GPU command buffer context"/>
    <variant name="RenderWorker"
        summary="A RenderWorker GPU command buffer context"/>
    <variant name="Unknown"
        summary="A GPU command buffer context of unknown type"/>
    <variant name="VideoAccelerator"
        summary="A VideoAccelerator GPU command buffer context"/>
    <variant name="VideoCapture"
        summary="A VideoCapture GPU command buffer context"/>
    <variant name="WebGL" summary="A WebGL GPU command buffer context"/>
    <variant name="WebGPU" summary="A WebGPU control command buffer context"/>
    <variant name="XRCompositing"
        summary="Command buffer used for XR compositing"/>
  </token>
</histogram>

<histogram name="GPU.D3D11FeatureLevel" enum="D3D11FeatureLevel"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the highest D3D_FEATURE_LEVEL available, collected in the info
    collection GPU process, once per UMA ping. This is Windows platform only.
  </summary>
</histogram>

<histogram name="GPU.D3D12FeatureLevel" enum="D3D12FeatureLevel"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum D3D12 feature level supported in the gpu drivers. It is recorded
    in the browser process 120 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.D3D12HighestShaderModel2" enum="D3DShaderModel"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The maximum supported D3D shader model version on a D3D12 device. It is
    recorded in the browser process 120 seconds after the browser launch. Note
    that the &quot;2&quot; suffix was added when a fix was made in how this stat
    is collected: the previous unsuffixed version would store
    &quot;unknown/unsupported&quot; on systems that supported shader model 5.1
    to 6.5, but were unaware of 6.6. The suffixed version correctly stores the
    highest supported shader model.
  </summary>
</histogram>

<histogram name="GPU.D3DShaderModel" enum="ShaderModel"
    expires_after="2024-05-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    ANGLE's currently active D3D shader model version. Logged once every startup
    of the GPU process, on Windows only. Note that Shader Models 2 and 3 map to
    D3D9 with ANGLE, and 4+ map to D3D11 ANGLE.
  </summary>
</histogram>

<histogram name="GPU.Dawn.InfoCollectionTimeMS" units="ms"
    expires_after="2024-06-25">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time to collect Dawn information during GPU info collection.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.CompositionMode2.VideoOrCanvas"
    enum="DxgiFramePresentationMode" expires_after="2025-02-04">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    How the Desktop Window Manager presented Chrome's DirectComposition layers
    of video or canvas elements to the screen. Only recorded on Windows. NOTE:
    This metric was expired and not collecting data between 2021-12-31 and
    crrev.com/c/4041850 (M110).
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.DCLayer.YUVOverlayCount"
    units="overlays" expires_after="2025-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of YUV overlays we are going to present in each frame if the
    number is not 0. Recorded when the overlay processor is called for drawing a
    frame.
  </summary>
</histogram>

<histogram base="true"
    name="GPU.DirectComposition.DCLayerResult.Video.{GPUProtectedVideoType}"
    enum="DCLayerResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded for each quad (on overlay processing) with protected video type the
    reason it was or wasn't put in an overlay.
  </summary>
  <token key="GPUProtectedVideoType" variants="GPUProtectedVideoType"/>
</histogram>

<histogram
    name="GPU.DirectComposition.DCLayerResult.{OverlayProcessingQuadType}"
    enum="DCLayerResult" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded for each quad (on overlay processing) the reason it was or wasn't
    put in an overlay. Reported for {OverlayProcessingQuadType} data may be
    missing.
  </summary>
  <token key="OverlayProcessingQuadType">
    <variant name="StreamVideo"
        summary="StreamVideo quad type. Warning: this histogram was expired
                 from 2021-12-12 to 2023-12-21;"/>
    <variant name="Texture"
        summary="Texture quad type. Warning: this histogram was expired from
                 2022-05-01 to 2022-06-24 and again from 2023-08-20 and
                 2023-12-21;"/>
  </token>
</histogram>

<histogram name="GPU.DirectComposition.DcompDeviceCreateSurface" enum="Hresult"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    HRESULT return value of IDCompositionDevice2::CreateSurface.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.HardwareOverlaysSupported"
    enum="BooleanOverlaySupported" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    True if the GPU driver supports hardware overlays. Recorded during Chrome
    GPU initialization and each time the overlay caps change.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.IsUnderlay" enum="BooleanUnderlay"
    expires_after="2025-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded for each video quad during the video playback whether it is an
    underlay or an overlay.
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.OverlayFormatUsed3" enum="DXGI_FORMAT"
    expires_after="2024-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Which overlay format was chosen for YUV overlays. Recorded once per GPU
    process launch only if hardware overlays are supported. (Might be lack of
    metrics coverage between 2022-05-01 and 2022-06-24 due to metric
    expiration.)
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.OverlaysSupported"
    enum="BooleanOverlaySupported" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    True if Chrome will try to use DirectComposition overlays. (Might be lack of
    metrics coverage between 2021-10-04 and 2022-06-24 due to metric
    expiration.)
  </summary>
</histogram>

<histogram base="true"
    name="GPU.DirectComposition.SwapChainCreationResult3.SoftwareProtected.{SoftwareProtectedType}"
    enum="Hresult" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether creating swap chain for protected video succeeded. Recorded once per
    swap chain creation.
  </summary>
  <token key="SoftwareProtectedType">
    <variant name="HasOverlaySupport" summary="HasOverlaySupport"/>
    <variant name="NoOverlaySupport" summary="NoOverlaySupport"/>
  </token>
</histogram>

<histogram base="true"
    name="GPU.DirectComposition.SwapChainCreationResult3.{GPUProtectedVideoType}"
    enum="Hresult" expires_after="2025-01-12">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether creating swap chain for protected video succeeded. Recorded once per
    swap chain creation.
  </summary>
  <token key="GPUProtectedVideoType" variants="GPUProtectedVideoType"/>
</histogram>

<histogram name="GPU.DirectComposition.SwapChainFormat3" enum="DXGI_FORMAT"
    expires_after="2024-01-14">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    What format was used for each overlay swap chain on each swap buffers.
    (Might be lack of metrics coverage between 2020-12-31 and 2022-06-24 due to
    metric expiration.)
  </summary>
</histogram>

<histogram name="GPU.DirectComposition.VideoPresentationMode"
    enum="DirectCompositionVideoPresentationMode" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    What code path was used to present a video frame. Recorded on each present.
    (Might be lack of metrics coverage between 2022-03-06 and 2022-06-24 due to
    metric expiration.)
  </summary>
</histogram>

<histogram name="GPU.DriverBugTestResultsPerEntry"
    enum="GpuDriverBugWorkaroundEntry" expires_after="never">
<!-- expires-never: For monitoring new driver bugs. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For every entry in the gpu driver bug list that is hit on a machine, this
    records the id. Entry 0 is the total number of times that data is recorded.
    It should be recorded whenever new GPU information is received: on startup,
    whenever a GPU process launches, and whenever the active GPU changes.
  </summary>
</histogram>

<histogram name="GPU.EGLDisplayType" enum="EGLDisplayType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>The display type used to ask for an EGLDisplay.</summary>
</histogram>

<histogram name="GPU.EnsureWorkVisibleDuration" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration of EnsureWorkVisible GPU call. Since it's blocking UI
    thread we want to measure it, and this histogram must be active as long as
    this call is still blocking.

    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.

    One some clients this metric will be logged only one time out of one
    thousand to reduce the overhead of taking the metric.
  </summary>
</histogram>

<histogram name="GPU.EnsureWorkVisibleDurationLowRes" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the duration of EnsureWorkVisible GPU call. Since it's blocking UI
    thread we want to measure it, and this histogram must be active as long as
    this call is still blocking.

    This is a sister histogram to GPU.EnsureWorkVisibleDuration. The former is
    our target goal. However it's custom buckets do not have enough granularity
    to measure improvement steps. This metric will instead cap at 5s, and allow
    the buckets to give us better visibility into the 15ms-250ms interval
    ranges. We will use this one until we improve the blocking call.

    One some clients this metric will be logged only one time out of one
    thousand to reduce the overhead of taking the metric.
  </summary>
</histogram>

<histogram name="GPU.EstablishGpuChannelSyncRetry" enum="BooleanSuccess"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the result of retrying EstableGpuChannelSync in Chrome OS. Logged
    every time when a EstableGpuChannel fails on Chrome OS.
  </summary>
</histogram>

<histogram name="GPU.EstablishGpuChannelSyncTime" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time it takes to synchronously establish the GPU channel.
    Logged every time a sync call to EstableGpuChannelSync is made and a channel
    is not already available.
  </summary>
</histogram>

<histogram name="GPU.EstablishGpuChannelSyncTime.FirstRun" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time it takes to synchronously establish the GPU channel.
    Logged on the first run of a sync call to EstableGpuChannelSync is made.
  </summary>
</histogram>

<histogram name="GPU.FallbackEventCause" enum="GPUFallbackEventCauseType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded once for every GPU launch mode fallback event. Records the cause of
    the fallback event.
  </summary>
</histogram>

<histogram name="Gpu.FenceHandle.CloneCountsPerSubmit" units="clones"
    expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts the number of GpuFenceHandle clone calls between (post) submits.
  </summary>
</histogram>

<histogram name="GPU.GLImplementation" enum="GLImplementation"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the OpenGL implementation mode. Recorded during GPU process
    initilization.
  </summary>
</histogram>

<histogram name="GPU.GpuCount" units="gpus" expires_after="2023-12-24">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of GPUs a device has, excluding software renderers. Recorded when
    GPU process launches and sends GPUInfo to browser process.
  </summary>
</histogram>

<histogram name="GPU.GPUInitializationTime.V4" units="ms"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time between the GPU process start and the collection of GPU info during
    the process's startup phase. The time range is between 5ms and 90s. Emitted
    after the collection of GPU info. Reported for all clients.

    This metric is similar to GPU.GPUInitializationTime.V3, but there are two
    main differences. First, the range for GPU.GPUInitializationTime.V4 is
    capped at 90s while the range of the other metric is capped at 5s. Second,
    this metric is emitted earlier in the execution because this metric is
    recorded at the same time as trace events which require the timestamp
    marking the start and end of the GPU initialization to be in scope, whereas
    V3 only requires the time spent.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessExitCode" enum="GPUProcessExitCode"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Counts for the exit codes returned by the GPU process when it terminated.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessLaunchTime" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <summary>
    Startup time of the GPU process as measured by the GPU process host.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessTerminationOrigin" enum="GpuTerminationOrigin"
    expires_after="never">
<!-- expires-never: For monitoring unexpected shifts in GPU process exit statuses. -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The reason a GPU process is terminated. It works only when
    TERMINATION_STATUS_PROCESS_WAS_KILLED TerminationStatus is set. The goal of
    this histogram is to get spikes of the above mentioned case when
    Ozone/Wayland terminates the GPU process due to invalid data it received if
    any. NOTE: this metric was expired from 2019-08-14 to 2022-11-30 and was
    brought back by crrev.com/c/4040947.
  </summary>
</histogram>

<histogram name="GPU.GPUProcessTerminationStatus2" enum="GpuTerminationStatus"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <summary>
    Counts for each time the GPU Process Host detects the process dies.
  </summary>
</histogram>

<histogram name="Gpu.Graphite.GraphiteImageProviderAccessHitInCache"
    enum="Boolean" expires_after="2025-04-06">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each request of an image from GraphiteImageProvider, records whether the
    image was found in the cache or needed to be created.
  </summary>
</histogram>

<histogram name="Gpu.GrCompileShaderUs" units="microseconds"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time to compile and resolve a Skia OpenGL shader in microseconds.

    Only reported on systems which have high resolution timers.
  </summary>
</histogram>

<histogram name="Gpu.GrLinkProgramUs" units="microseconds"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time to link and resolve a Skia OpenGL program in microseconds.

    Only reported on systems which have high resolution timers.
  </summary>
</histogram>

<histogram name="Gpu.GrShaderCacheEnabled" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    If the GrShaderCache is in use. Recorded at GPU channel manager creation.
  </summary>
</histogram>

<histogram name="Gpu.GrShaderCacheLoadHitInCache" enum="Boolean"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each load from the GrShaderCache, records whether the shader was found
    in the cache.
  </summary>
</histogram>

<histogram name="GPU.HardwareAccelerationModeEnabled" enum="BooleanEnabled"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if GPU hardware acceleration is explicitly disabled by the user.
    Recorded when the browser process launches.

    Warning: this histogram was expired from 2022-01-30 to 2022-04-29; data may
    be missing.
  </summary>
</histogram>

<histogram name="GPU.HasDiscreteGpu" enum="HasDiscreteGpu"
    expires_after="2023-08-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether the system has a discrete GPU, collected in the info
    collection GPU process, once per UMA ping. This is Windows platform only.

    Warning: this histogram was expired from 2020-04-24 to 2022-04-29; data may
    be missing.
  </summary>
</histogram>

<histogram name="GPU.InitializeOneOffMediumTime" units="ms"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that the GPU process spends in initializing the GL surface, and
    collecting graphics information. Records times up to three minutes.
  </summary>
</histogram>

<histogram name="GPU.IntelGpuGeneration" enum="IntelGpuGeneration"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the highest Intel GPU generation of the system using the GPU info
    collected at GPU process startup time, once per UMA ping.
  </summary>
</histogram>

<histogram name="GPU.IntelGpuSeriesType" enum="IntelGpuSeriesType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records user device's GPU series type. Only recorded on Windows platform at
    GPU process launch time. Only meaningful with Intel GPUs.
  </summary>
</histogram>

<histogram name="GPU.IOSurface.CATransactionTimeUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that it took to update the CALayer tree and commit the transaction.
    This is often affected by IOSurface paging. This metric is only collected on
    Mac, which only has high-resolution clocks.
  </summary>
</histogram>

<histogram name="Gpu.Mac.BackpressureUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that the GPU's main CPU thread spends waiting for previous frames'
    GPU work to complete. Recorded at every frame. This metric is only collected
    on Mac, which only has high-resolution clocks.
  </summary>
</histogram>

<histogram name="GPU.MaximumGLESVersion" enum="MaximumGLESVersion"
    expires_after="2025-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the maximum GLES version supported on Android. Recorded once per GPU
    process launch and recorded only for non-ANGLE due to complexities in
    obtaining this information for ANGLE.
  </summary>
</histogram>

<histogram name="Gpu.Metal.ReadWriteTextureSupport"
    enum="MetalReadWriteTextureSupportTier" expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Read-write textures are not always supported on Metal. This histograms is
    meant to gather information so that the WebGPU W3C group can decide whether
    to require support for this feature. The reported tier is the best tier that
    was found on the system. Meaning that if only one of the GPUs support
    read-write textures, a non-zero tier will be reported. The histogram is
    recorded at GPU process startup time.
  </summary>
</histogram>

<histogram name="Gpu.MetalShaderCache.LoadTime" units="microseconds"
    expires_after="2023-12-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time (in microseconds) the gpu process takes to load the metal
    shader lib cache. Logged after loading completes on a background thread.
  </summary>
</histogram>

<histogram name="Gpu.MetalShaderCache.NumEntriesInCache" units="count"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of shader programs in the metal shader lib cache. Logged after
    loading of the metal shader lib cache completes.
  </summary>
</histogram>

<histogram name="Gpu.MetalShaderCache.WaitTime" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The amount of time (in microseconds) the gpu process main thread is blocked
    waiting for the metal shader lib cache to load.
  </summary>
</histogram>

<histogram name="GPU.MultiGpu.AMD" enum="AMDDeviceId"
    expires_after="2023-01-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    AMD device IDs from multi-gpu devices. Recorded when GPU process launches
    and sends GPUInfo to browser process.
  </summary>
</histogram>

<histogram name="GPU.MultiGpu.Nvidia" enum="NvidiaDeviceId"
    expires_after="2023-04-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Nvidia device IDs from multi-gpu devices. Recorded when GPU process launches
    and sends GPUInfo to browser process.
  </summary>
</histogram>

<histogram name="GPU.Nvidia{Extension}.{State}.SetStreamExt" enum="Hresult"
    expires_after="2024-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records HRESULT when setting the video processor stream extension for Nvidia
    {Extension} to {State}. This metric is recorded every frame when processing
    video streams in DirectComposition.
  </summary>
  <token key="Extension">
    <variant name="VpSuperResolution" summary="RTX SuperResolution"/>
    <variant name="VpTrueHDR" summary="RTX TrueHDR"/>
  </token>
  <token key="State">
    <variant name="Off" summary="off"/>
    <variant name="On" summary="on"/>
  </token>
</histogram>

<histogram name="GPU.OopRaster.GlyphCacheMiss"
    enum="OopRasterGlyphCacheMissType" expires_after="2023-04-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    During OutOfProcess(Oop) raster, the renderer generates and sends the
    requisite glyph data for rasterizing a tile with the serialized paint
    commands. If the data for any glyph is missing, the GPU process attempts to
    use a fallback glyph from the cache. This records each time we encounter a
    cache miss on the GPU and whether we could use a fallback.
  </summary>
</histogram>

<histogram name="GPU.Output.HDR" enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records if any connected monitor is HDR capable. Recorded when the gpu
    process starts. Only recorded on Windows as of M-61. If monitor enumeration
    fails, this metric will not be provided.
  </summary>
</histogram>

<histogram name="Gpu.OutputSurface.ScheduleOverlaysUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that the GPU's main CPU thread spends producing pending CALayer
    tree on Mac. Recorded when Skia output surface schedules overlays at every
    frame. This metric is only collected on Mac, which only has high-resolution
    clocks.
  </summary>
</histogram>

<histogram name="GPU.PaintOpReader.DeserializationError"
    enum="PaintOpDeserializationError" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the reason why the deserialization of a PaintOp failed. Recorded in
    PaintOpReader::Read* methods when the decoding a paint op fails. These
    failures are typically caused by an invalid or unexpected state or invalid
    serialized data.
  </summary>
</histogram>

<histogram name="GPU.PassthroughDoLinkProgramTime" units="ms"
    expires_after="2023-11-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time we spend in GLES2DecoderPassthroughImpl::DoLinkProgram. Related to
    how much time we spend compiling shaders during startup. Expired in June
    2022, and revived in M106. Data may be incomplete for the period during
    which the histogram was expired.
  </summary>
</histogram>

<histogram name="GPU.ProcessLifetimeEvents.HardwareAccelerated"
    enum="GPUProcessLifetimeEvent" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <summary>
    Recorded once for every GPU process launch and crash when GPU process is
    started for hardware accelerated GPU compositing and/or WebGL. Crash buckets
    are based on crash count for disabling features. With OOP-D enabled the
    display compositor also runs in the GPU process.
  </summary>
</histogram>

<histogram name="GPU.ProcessLifetimeEvents.SwiftShader"
    enum="GPUProcessLifetimeEvent" expires_after="2024-12-08">
  <owner>[email protected]</owner>
  <summary>
    Recorded once for every GPU process launch and crash when GPU process is
    started for SwiftShader WebGL. Crash buckets are based on crash count for
    disabling features. With OOP-D enabled the display compositor with software
    compositing will also run as part of the GPU process.
  </summary>
</histogram>

<histogram name="GPU.ProgramCache.CacheHit" enum="BooleanSuccess"
    expires_after="2023-09-17">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    If a successfully linked program was found in the GPU program cache during a
    program link call. Expired in June 2022, and revived in M106. Data may be
    incomplete for the period during which the histogram was expired.
  </summary>
</histogram>

<histogram name="GPU.RasterDecoder.TimeToFlush" units="microseconds"
    expires_after="2024-04-28">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time it takes for RasterDecoderImpl::FlushSurfaces() to complete. Recorded
    for the first 100 flushes.
  </summary>
</histogram>

<histogram name="Gpu.Rasterization.Raster.MSAASampleCountLog2" units="count"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    log2() of MSAA sample count of a raster task. Value is in [log2(1),log2(64)]
    or [0,6] range. If log2() of the MSAA sample count is 0 (MSAA sample count
    is 1), it means MSAA is disabled.
  </summary>
</histogram>

<histogram name="GPU.Sandboxed" enum="Boolean" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    A boolean that indicates whether sandboxing is successfully applied. A value
    of true means the GPU is sandboxed. A value of false means the GPU is not
    sandboxed. Recorded once per GPU process start-up in gpu_init.cc.
  </summary>
</histogram>

<histogram name="GPU.ShaderLoadPrefixOK" enum="BooleanMatched"
    expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the shader prefix loaded from disk matched the expected
    prefix for the data and system configuration. False indicates either disk
    corruption or a system configuration change, and should be rare.
  </summary>
</histogram>

<histogram name="GPU.SharedImage.BackingType" enum="SharedImageBackingType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the type of each SharedImageBacking that's initialized/registered.
  </summary>
</histogram>

<histogram name="GPU.SharedImage.ContentConsumed" enum="BooleanMatched"
    expires_after="2024-12-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether or not the content of a SharedImage is consumed. False indicates the
    content of a SharedImage is never used due to destroying the SharedImage or
    writing new content to it before using it.
  </summary>
</histogram>

<histogram name="GPU.SkiaBackendType" enum="SkiaBackendType"
    expires_after="2025-02-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records what backend Skia is initialized with for compositing/rasterization
    in the GPU process. This is only recorded the first time Skia is initialized
    per GPU process launch, in case it's initialized on more than one thread or
    reinitialized on context loss.
  </summary>
</histogram>

<histogram name="GPU.SoftwareRendering" enum="BooleanSoftwareRendering"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Collects whether Chrome uses software renderer or hardware GPU 20 seconds
    after Chrome starts, and records this value once per UMA ping. This value is
    not re-collected at each recording time because GPU process could crash for
    various reasons and fall back to software rendering. This value is intended
    to reflect device capabilities rather than the current state.
  </summary>
</histogram>

<histogram name="GPU.SupportsDX12" enum="BooleanSupported"
    expires_after="2024-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This metric shows whether the GPU supports D3D12. It is recorded in the
    browser process 120 seconds after the browser launch.
  </summary>
</histogram>

<histogram name="GPU.TransferCache.EntryFound" enum="BooleanYesNo"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a transfer cache entry is found when trying to retrieve it. Recorded
    on every transfer cache look up.
  </summary>
</histogram>

<histogram name="GPU.TransferCache.MaxHistoricalTimeSinceLastUse" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a transfer cache is found, record max historical time between reuses.
    Recorded on every successful transfer cache look up.
  </summary>
</histogram>

<histogram name="GPU.TransferCache.ReusedTimes" units="Reuses"
    expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a transfer cache entry is deleted, record how many times it was used.
    Recorded when an entry is deleted.
  </summary>
</histogram>

<histogram name="GPU.TransferCache.TimeSinceLastUse" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a transfer cache is found, record the time since last use. Recorded on
    every successful transfer cache look up.
  </summary>
</histogram>

<histogram name="GPU.TransferCache.TimeSinceLastUseOnDelete" units="ms"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When a transfer cache entry is deleted, record the last time the entry was
    used. Recorded when an entry is deleted.
  </summary>
</histogram>

<histogram name="GPU.VideoProcessorBlt.{Extension}.{State}" enum="Hresult"
    expires_after="2024-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records HRESULT for VideoProcessorBlt. This metric is recorded when
    processing a video stream in DirectComposition with {Extension} {State}.
  </summary>
  <token key="Extension">
    <variant name="VpAutoHDR" summary="Video Processor Auto HDR"/>
    <variant name="VpSuperResolution"
        summary="Video Processor Super Resolution"/>
  </token>
  <token key="State">
    <variant name="Off" summary="off"/>
    <variant name="On" summary="on"/>
    <variant name="RetryOffAfterError" summary="retry off after blt error"/>
  </token>
</histogram>

<histogram name="GPU.Vulkan.ExtMemoryBudgetSupported" enum="BooleanSupported"
    expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether the extension VK_EXT_memory_budget is supported or not. Recorded
    once during every gpu process initialization.
  </summary>
</histogram>

<histogram name="GPU.Vulkan.PipelineCache.vkCreateGraphicsPipelines"
    units="microseconds" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Duration of vkCreateGraphicsPipelines call. Recorded every time Skia creates
    graphics pipeline. Only reported for platforms supporting high resolution
    clocks.
  </summary>
</histogram>

<histogram name="GPU.WatchdogThread.Event{ThreadType}"
    enum="GpuWatchdogThreadEvent" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded for each time the GPU watchdog thread starts, crashes and ends.
  </summary>
  <token key="ThreadType">
    <variant name=""/>
    <variant name=".compositor"/>
    <variant name=".main"/>
  </token>
</histogram>

<histogram name="GPU.WatchdogThread.Timeout{WatchdogStage}{ThreadType}"
    enum="GpuWatchdogTimeoutEvent" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded timeout events when the GPU watchdog enters OnWatchdogTimeout.
  </summary>
  <token key="WatchdogStage">
    <variant name=""/>
    <variant name=".Foregrounded"/>
    <variant name=".Init"/>
    <variant name=".Normal"/>
    <variant name=".PowerResume"/>
  </token>
  <token key="ThreadType">
    <variant name=""/>
    <variant name=".compositor"/>
    <variant name=".main"/>
  </token>
</histogram>

<histogram name="GPU.WebGLDisplayType" enum="EGLDisplayType"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Types of EGL displays used to back WebGL contexts. Recorded at context
    creation time in the GPU process.
  </summary>
</histogram>

<histogram name="GPU.WebGLDisplayTypeLarge" enum="EGLDisplayType"
    expires_after="2023-08-27">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Types of EGL displays used to back large (area &gt;= 128*128) WebGL
    contexts. Recorded at context creation time in the GPU process.
  </summary>
</histogram>

<histogram name="Gpu.{CacheType}LoadHitInCache" enum="Boolean"
    expires_after="2024-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    For each load of an entry from {CacheType}, records whether the entry was
    found in the cache. Expired on June 1 2024 and revived on June 11 2024.
  </summary>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.Create{Module}Success"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks whether a call to Create{Module} was successful, excluding when the
    result is found in frontend cache.
  </summary>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
  <token key="Module" variants="WebGPUModule"/>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.Create{Module}US"
    units="microseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the amount of time in microseconds it takes for a call to
    Create{Module} to complete, excluding when the result is found in frontend
    cache. Recorded only for clients that support high-resolution clocks.
  </summary>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
  <token key="Module" variants="WebGPUModule"/>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.HasGpuAdapter" enum="Boolean"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether WebGPU or Graphite Dawn has any GPU adapters available. This
    is recorded during GPU process startup.
  </summary>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
</histogram>

<histogram
    name="GPU.{GraphiteDawnOrWebGPU}.MaxStorageBufferBindingSize.{AdapterType}"
    units="MB" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the maximum storage buffer binding size if {AdapterType} GPU is
    available. This is recorded during GPU process startup.
  </summary>
  <token key="AdapterType" variants="WebGPUAdapterType"/>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
</histogram>

<histogram
    name="GPU.{GraphiteDawnOrWebGPU}.MaxTextureDimension2D.{AdapterType}"
    units="dimensions" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the maximum 2D texture dimensions if {AdapterType} GPU is available.
    This is recorded during GPU process startup.
  </summary>
  <token key="AdapterType" variants="WebGPUAdapterType"/>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.Support" enum="WebGPUSupport"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    WebGPU or Graphite Dawn support level. Recorded on GPU info collection a
    couple minutes after browser startup. Compatibility mode support means that
    WebGPU or Graphite Dawn is supported on a non-core backend like OpenGLES.
    Core backends can always support compatibility mode so
    compat-on-core-adapter is not reported in this metric. Supported means at
    least one adapter of that type was available. Blocklisted means all adapters
    of that type were blocklisted. None means that no adapters of that type were
    available. Software adapters are considered as None in this metric.
  </summary>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.Support.{FeatureName}"
    enum="Boolean" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records whether {FeatureName} is supported if an Integrated or Discrete GPU
    is available. This is recorded during GPU process startup.
  </summary>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
  <token key="FeatureName" variants="WebGPUFeatureName"/>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.CacheHit"
    units="microseconds" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the amount of time in microseconds it takes for a cached call to
    {Cacheable} to complete without error when we have a cache hit. This
    includes the load time from the cache and time to deserialize the result.
    Recorded only for clients that support high-resolution clocks.
  </summary>
  <token key="Cacheable" variants="WebGPUCacheable"/>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
</histogram>

<histogram name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.CacheMiss"
    units="microseconds" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the amount of time in microseconds it takes for a cached call to
    {Cacheable} to complete without error when we have a cache miss. This
    includes the time necessary to create the results of {Cacheable} from
    scratch, but does not include the time taken to write the results back into
    the cache. Recorded only for clients that support high-resolution clocks.
  </summary>
  <token key="Cacheable" variants="WebGPUCacheable"/>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
</histogram>

<histogram
    name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.{CacheHitMiss}.90SecondsPostStartup"
    units="microseconds" expires_after="2024-12-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the amount of time in microseconds it takes for a cached call to
    {Cacheable}.{CacheHitMiss} to complete without error when we have a cache
    hit or miss within 90 seconds of browser start up. Based off the
    {Cacheable}.CacheHit and {Cacheable}.CacheMiss metrics above. Recorded only
    for clients that support high-resolution clocks.
  </summary>
  <token key="Cacheable" variants="WebGPUCacheable"/>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
  <token key="CacheHitMiss">
    <variant name="CacheHit"/>
    <variant name="CacheMiss"/>
  </token>
</histogram>

<histogram
    name="GPU.{GraphiteDawnOrWebGPU}.{Cacheable}.{CacheHitMiss}.Counts.90SecondsPostStartup"
    units="count" expires_after="2024-12-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the number of times calls to {Cacheable}.{CacheHitMiss} are emitted
    within 90 seconds of browser start up. Recorded only for clients that
    support high-resolution clocks.
  </summary>
  <token key="Cacheable" variants="WebGPUCacheable"/>
  <token key="GraphiteDawnOrWebGPU" variants="GraphiteDawnOrWebGPU"/>
  <token key="CacheHitMiss">
    <variant name="CacheHit"/>
    <variant name="CacheMiss"/>
  </token>
</histogram>

<histogram name="GPU.{SchedulerType}.{Stage}" units="microseconds"
    expires_after="2024-08-07">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the wall time for GPU {SchedulerType} task at various stages.
    {Stage}. Only recorded for clients with high resolution clocks. Note that
    the histograms for GPU.Scheduler.* was expired on 2022-08-07 and is
    re-enabled on 2023-11-17.
  </summary>
  <token key="SchedulerType">
    <variant name="Scheduler"/>
    <variant name="SchedulerDfs"/>
  </token>
  <token key="Stage">
    <variant name="TaskDependencyTime"
        summary="Records the wall time taken spent by each GPU scheduler task
                 waiting on it's dependencies to resolve. The time delta
                 starts when the waiting fence is added and finishes when the
                 last fence is removed"/>
    <variant name="TaskSchedulingDelayTime"
        summary="Records the wall time taken spent by each GPU scheduler task
                 waiting on to be scheduled once all its dependencies have
                 been resolved. The time delta starts when the last waiting
                 fence is passed and stops when the tasks starts running. If
                 the schedulers is working properly, for a high priority
                 task, this metric should be minimal"/>
    <variant name="ThreadSuspendedTime"
        summary="Records the wall time taken between calls to schedule the
                 task run and the actual run of the task. Ideally this should
                 always be as close to 0 as possible"/>
  </token>
</histogram>

<histogram name="Viz.BeginFrameSource.Accuracy.AverageDelta2"
    units="microseconds" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The average time delta between the expected BeginFrame time and the actual
    time of BeginFrame on Mac. Each recorded number is an average result of 3600
    frames. It's recorded every 3600 frames when OnBeginFrame or OnTimerTick is
    called. The max delta is capped to 33 ms.

    This metric is only for Mac clients with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Viz.BeginFrameSource.VrrFrameCount" units="frames"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per session of the variable refresh rate (VRR) feature
    being enabled. This counts the number of BeginFrames which are issued using
    VRR.
  </summary>
</histogram>

<histogram name="Viz.DelegatedCompositing.Status" enum="DelegatedStatus"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    An enum status result for attempted delegated compositing (success or
    failure reason) recorded every drawn frame. Currently only recorded for
    LaCros delegated compositing.
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.OverlayNumProposedCandidates"
    units="units" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    A count of the number of proposed overlay candidates available for overlay
    selection. Recorded every time a frame is rendered by the display
    compositor.
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.OverlayQuadMaterial"
    enum="OverlayQuadMaterial" expires_after="2023-06-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Quad material for current promoted overlay, per frame. Recorded every time a
    frame is rendered by the display compositor.
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.OverlayStrategy"
    enum="OverlayStrategies" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Overlay strategies used to promote Hardware Overlays, once or more per
    frame. Recorded every time a frame is rendered by the display compositor, or
    once per overlay promoted if multiple were promoted.
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.OverlaySwitchInterval" units="ms"
    expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time, in milliseconds, since the change in overlay selection. Recorded
    every time a frame is rendered by the display compositor.
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.RootDamageRect.Overlay"
    enum="BooleanOverlayDamageRect" expires_after="2025-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Any root damage excluding overlay damage in the current frame?
  </summary>
</histogram>

<histogram name="Viz.DisplayCompositor.RootDamageRect.Underlay"
    enum="UnderlayDamageRect" expires_after="2025-07-21">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The root damage type excluding underlay damage in the current frame.
  </summary>
</histogram>

<histogram name="Viz.ExternalBeginFrameSourceMac.DisplayLink"
    enum="DisplayLinkCreateResult" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The result of creating CVDisplaylink in ExternalBeginFrameSourceMac. If
    successful, BeginFrameSource is driven by HW VSync instead of timer. This
    histogram does not include the data from DelayBasedBeginFrameSourceMac. It's
    recorded each time a DisplayLink is created during
    RootCompositorFrameSinkImpl/ExternalBeginFrameSourceMac creation or during
    the monitor change in the existing ExternalBeginFrameSourceMac.
  </summary>
</histogram>

<histogram name="Viz.FileDescriptorTracking.TimeToCompute" units="microseconds"
    expires_after="2025-06-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent computing the number of active File Descriptors. This is logged
    once every 5 minutes as the cost of this computation is estimated to be at
    least 1ms. Currently only recorded for LaCros delegated compositing.

    Warning: This metric does not include reports from clients with
    low-resolution clocks.
  </summary>
</histogram>

<histogram name="Viz.FileDescriptorTracking.{FdStat}" units="units"
    expires_after="2025-06-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    {FdStat} File Descriptors for the GPU process. This is logged once every 5
    minutes as the cost of this computation is estimated to be at least 1ms.
    Currently only recorded for LaCros delegated compositing.
  </summary>
  <token key="FdStat">
    <variant name="NumActive" summary="Current number of active"/>
    <variant name="NumSoftMax" summary="Maximum number of"/>
    <variant name="PercentageUsed" summary="Percentage of in use"/>
  </token>
</histogram>

<histogram name="Viz.FrameSink.GpuBusyDuration" units="microseconds"
    expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that a begin frame is throttled due to max pending swaps. Recorded
    when draw and swap executes (only when a frame is throttled). Refer to
    BeginFrameSource::SetIsGpuBusy for details.

    Warning: This metric does not include reports from clients with
    low-resolution clocks.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.CaptureDuration" units="ms"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl sent a request for
    frame capture until the result becomes available to the capturer.

    Format-agnostic version of
    `Viz.FrameSinkVideoCapturer.[NV12/I420].CaptureDuration` histograms.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.CaptureSucceeded"
    enum="BooleanSuccess" expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a capture initiated by FrameSinkVideoCapturerImpl succeeded.

    Format-agnostic version of
    `Viz.FrameSinkVideoCapturer.[NV12/I420].CaptureSucceeded` histograms.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.FrameResurrected" enum="Boolean"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    True if the capturer has used a resurrected video frame, thus avoiding
    having to reserve it from a frame pool, false otherwise.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.I420.CaptureDuration" units="ms"
    expires_after="2024-09-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl sent a request for an
    I420 readback until the result comes back and ReadI420Planes successfully
    finishes.

    Warning: this histogram was expired from 2021-03-07 to 2022-03-10; data may
    be missing.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.I420.CaptureSucceeded"
    enum="BooleanSuccess" expires_after="2025-05-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether an I420 readback initiated by FrameSinkVideoCapturerImpl succeeded.

    Warning: this histogram was expired from 2020-12-31 to 2022-03-10; data may
    be missing.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.I420.TotalDuration" units="ms"
    expires_after="2024-09-29">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl decided that a new
    I420 frame needs to be produced to the moment when it was ready to deliver
    it. This encompasses the `Viz.FrameSinkVideoCapturer.I420.CaptureDuration`
    time, but also includes time taken to render video capture overlays.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.NV12.CaptureDuration" units="ms"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl sent a request for an
    NV12 copy until the result comes back.

    Note: The histogram logging was adjusted in M102 to align with how
    `Viz.FrameSinkVideoCapturer.[RGBA/I420].CaptureDuration` histograms behave.
    After the change, this histogram also started including the time taken to
    set the color space on a video frame.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.NV12.CaptureSucceeded"
    enum="BooleanSuccess" expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether an NV12 capture initiated by FrameSinkVideoCapturerImpl succeeded.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.NV12.TotalDuration" units="ms"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl decided that a new
    NV12 frame needs to be produced to the moment when it was ready to deliver
    it. This encompasses the `Viz.FrameSinkVideoCapturer.NV12.CaptureDuration`
    time.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.ReserveFrameDuration" units="ms"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took for a frame pool to reserve a video frame that would then
    have its contents populated by the capturer. Will be logged only when
    `Viz.FrameSinkVideoCapturer.FrameResurrected` is false.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.RGBA.CaptureDuration" units="ms"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl sent a request for an
    RGBA readback until the result comes back and ReadRGBAPlane successfully
    finishes.
  </summary>
</histogram>

<histogram name="Viz.FrameSinkVideoCapturer.TotalDuration" units="ms"
    expires_after="2023-07-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time it took from when FrameSinkVideoCapturerImpl decided that a new
    frame needs to be produced to the moment when it was ready to deliver it.
    This encompasses the `Viz.FrameSinkVideoCapturer.CaptureDuration` time, but
    also includes time taken to render video capture overlays.

    Format-agnostic version of
    `Viz.FrameSinkVideoCapturer.[NV12/I420].TotalDuration` histograms.
  </summary>
</histogram>

</histograms>

</histogram-configuration>