<!--
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 Blink 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>

<!-- LINT.IfChange(BlinkRequestDestination) -->

<variants name="BlinkRequestDestination">
  <variant name="audio"/>
  <variant name="audioworklet"/>
  <variant name="compression-dictionary"/>
  <variant name="document"/>
  <variant name="embed"/>
  <variant name="empty"/>
  <variant name="fencedframe"/>
  <variant name="font"/>
  <variant name="frame"/>
  <variant name="iframe"/>
  <variant name="image"/>
  <variant name="manifest"/>
  <variant name="object"/>
  <variant name="paintworklet"/>
  <variant name="report"/>
  <variant name="script"/>
  <variant name="serviceworker"/>
  <variant name="sharedstorageworklet"
      summary="(obsolete) Shared storage worklet"/>
  <variant name="sharedworker"/>
  <variant name="style"/>
  <variant name="track"/>
  <variant name="video"/>
  <variant name="webbundle"/>
  <variant name="worker"/>
  <variant name="xslt"/>
</variants>

<!-- LINT.ThenChange(//tools/metrics/histograms/metadata/page/histograms.xml:RequestDestination) -->

<variants name="BlinkUpdateTimeSuffixes">
  <variant name=".AggregatedPreFCP"
      summary="All the time spent Pre First Contentful Paint in this
               component"/>
  <variant name=".PostFCP"
      summary="Update occurred after First Contentful Paint."/>
  <variant name=".PreFCP"
      summary="Update occurred before First Contentful Paint."/>
</variants>

<variants name="CapabilityType">
  <variant name="Geolocation" summary="HTML element for accessing geolocation"/>
  <variant name="Install" summary="HTML element for installing web apps"/>
  <variant name="Permission"
      summary="Default HTML element for accessing permissions"/>
  <variant name="UserMedia"
      summary="HTML element for accessing camera and microphone"/>
</variants>

<variants name="PerAnimationFrameInteractionType">
  <variant name="All"
      summary="all animation frames overlapping with any interaction type"/>
  <variant name="Both"
      summary="animation frames overlapping with BOTH keyboard and pointer
               interactions"/>
  <variant name="Keyboard"
      summary="animation frames overlapping a keyboard interaction"/>
  <variant name="TapOrClick"
      summary="animation frames overlapping a pointer interaction (taps or
               clicks)"/>
</variants>

<variants name="PreloadTrigger">
  <variant name="" summary="All preloads"/>
  <variant name=".LinkPreload"
      summary="Preloads created by link preload, normally developer initiated
               preloads"/>
  <variant name=".NoLinkPreload"
      summary="Preloads created by non link preload, normally browser
               initiated preloads"/>
</variants>

<variants name="ResourceType">
  <variant name="Audio" summary="Audio"/>
  <variant name="CSSStyleSheet" summary="CSS Style Sheet"/>
  <variant name="Dictionary" summary="Dictionary"/>
  <variant name="Font" summary="Font"/>
  <variant name="Image" summary="Image"/>
  <variant name="LinkPrefetch" summary="Link Prefetch"/>
  <variant name="Manifest" summary="Manifest"/>
  <variant name="Mock" summary="Mock"/>
  <variant name="Raw" summary="Raw"/>
  <variant name="Script" summary="Script"/>
  <variant name="SpeculationRules" summary="Speculation Rules"/>
  <variant name="SVGDocument" summary="SVG Document"/>
  <variant name="TextTrack" summary="Text Track"/>
  <variant name="Video" summary="Video"/>
  <variant name="XSLStyleSheet" summary="XSL Style Sheet"/>
</variants>

<variants name="ScreenOrientation">
  <variant name=".Landscape" summary="Landscape"/>
  <variant name=".Portrait" summary="Portrait"/>
</variants>

<histogram name="Blink.Accessibility.Bundle" enum="AccessibilityModeBundleEnum"
    expires_after="2025-05-01">
  <owner>kevers@chromium.org</owner>
  <owner>chrome-a11y-core@chromium.org</owner>
  <summary>
    Tracks when combinations of mode flags are set. Records when the
    accessibility mode flag changes and aligns with one of the common (named)
    flag bundles. Bundles that do not match a named set fall into the unnamed
    bucket.
  </summary>
</histogram>

<histogram name="Blink.Accessibility.ModeFlag" enum="AccessibilityModeFlagEnum"
    expires_after="2027-02-14">
  <owner>kevers@chromium.org</owner>
  <owner>chrome-a11y-core@chromium.org</owner>
  <summary>
    Tracks whether individual accessibility mode flags are set. Recorded when
    each mode flag is flipped from false to true. Only tracks usage within web
    content.
  </summary>
</histogram>

<histogram name="Blink.Accessibility.NumTreeUpdatesQueuedBeforeLayout"
    units="updates" expires_after="2023-03-05">
  <owner>lucasradaelli@google.com</owner>
  <owner>chrome-a11y-core@chromium.org</owner>
  <summary>
    Records how many tree updates were queued at the time updates are being
    processed after layout. If we are trying to process too many updates at
    once, we should investigate how we might be able to merge similar updates
    without losing important information.
  </summary>
</histogram>

<histogram name="Blink.Accessibility.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-02-07">
  <owner>ikilpatrick@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating accessibility in the Blink document lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.AnchorElementInteractionTracker.ClickDistanceFromPreviousPointerDown{orientation}"
    units="%" expires_after="2025-03-09">
  <owner>adithyas@chromium.org</owner>
  <owner>chrome-instant-ecosystem@google.com</owner>
  <summary>
    Records the vertical distance of a clicked anchor from the second last
    pointerdown (the last pointerdown would be the one that initiated the
    click). The value is normalized and recorded as a percentage of screen size,
    and is scaled to accomodate negative distances. A value below 50 indicates
    that the click happened above the previous pointerdown by ~(100 - 2X)%. A
    value above 50 indicates that the click happened below the previous
    pointerdown by ~(2X - 100)%.

    This is only recorded when the screen is in the &quot;{orientation}&quot;
    orientation, and is recorded after an anchor element click. It is only
    recorded if a pointerdown was seen prior to the click.
  </summary>
  <token key="orientation" variants="ScreenOrientation"/>
</histogram>

<histogram
    name="Blink.AnchorElementInteractionTracker.ClickLocationY{orientation}"
    units="%" expires_after="2025-05-11">
  <owner>adithyas@chromium.org</owner>
  <owner>chrome-instant-ecosystem@google.com</owner>
  <summary>
    Records the vertical distance from the top of the screen (y-coordinate) of a
    clicked anchor. The value is normalized and recorded as a percentage of the
    screen size.

    This is only recorded when the screen is in the &quot;{orientation}&quot;
    orientation, and is recorded after every anchor element click.
  </summary>
  <token key="orientation" variants="ScreenOrientation"/>
</histogram>

<histogram
    name="Blink.AnchorElementMetricsIntersectionObserver.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle where the observation is for gathering information about anchor
    elements within the visible viewport. Recorded when an intersection
    observation attributed to anchor element metrics is updated.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.Animate.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-11-29">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent processing main frame animations during a main frame update.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note that the histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes
    before 105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful
    when aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.Animation.AnimationType" enum="BlinkAnimationType"
    expires_after="2027-01-10">
  <owner>kevers@chromium.org</owner>
  <owner>dmangal@microsoft.com</owner>
  <owner>animations-dev@chromium.org</owner>
  <summary>
    Records the type of animation (all types, SVG, composited, non-composited)
    when an animation starts. This helps track usage patterns of different
    animation types across the web. This is recorded when an animation attempts
    to start, regardless of whether it successfully runs on the compositor.
    Note: This does not include SVG SMIL animations.
  </summary>
</histogram>

<histogram name="Blink.Animation.CompositedAnimationFailureReason"
    enum="CompositorAnimationsFailureReason" expires_after="2027-02-14">
  <owner>smcgruer@chromium.org</owner>
  <owner>animations-dev@chromium.org</owner>
  <summary>
    Reasons an Animation is not suitable for running on the compositor thread.

    Note that a given Animation may have more than one reason, so this histogram
    cannot be used to determine the overall rate of 'composited' vs
    'noncomposited' animations. Also note that &quot;failure&quot; to run on the
    compositor thread is actually good when the animation can be skipped
    entirely. Prior to M124, this case was restricted to composited properties
    that had no visual effect. This failure reason (bucket 18) has been
    generalized to capture cases where the animation can be optimized out even
    if having non-compositable properties. These animations will not run on the
    compositor and only tick on main at the boundaries of the active phase.
  </summary>
</histogram>

<histogram
    name="Blink.Animation.RangeOffsetHasRelativeOrElementDependentLength"
    enum="Boolean" expires_after="2027-08-20">
  <owner>kevers@chromium.org</owner>
  <owner>animations-dev@chromium.org</owner>
  <summary>
    Records whether a script-provided animation range offset contains a relative
    or element-dependent length and would be rejected if the experimental
    behavior were enabled. A false sample represents an absolute length or
    percentage. Recorded each time Blink converts a valid animation range offset
    supplied through the Web Animations API, before the runtime feature controls
    whether a TypeError is thrown. This measures the compatibility risk of
    rejecting relative and element-dependent offsets.
  </summary>
</histogram>

<histogram name="Blink.Animation.SDA.BoundaryMisalignment"
    units="16ths of a pixel" expires_after="2024-09-01">
  <owner>kevers@chromium.org</owner>
  <owner>animations-dev@chromium.org</owner>
  <summary>
    Unexpected misalignment of a phase boundary when aligned to a scroll-
    boundary measured in 16ths of a pixel. Recorded each time phase calculation
    determines the animation is in the before or after phase when a scroll-
    driven animation has determined that the before-active or active-after
    boundary is aligned to the bounds of the scroll range.
  </summary>
</histogram>

<histogram name="Blink.Blink.LoadURLSynchronouslyDuration" units="ms"
    expires_after="2025-11-30">
  <owner>fdoray@chromium.org</owner>
  <owner>catan-team@chromium.org</owner>
  <summary>
    Duration of a synchronous load by blink::URLLoader. Recorded every time
    blink::URLLoader::LoadSynchronously performs a load. Synchronous load are
    discouraged as they block the main thread. This histogram will be used to
    estimate to which extent they affect Interaction to Next Paint (INP).
  </summary>
</histogram>

<histogram name="Blink.Canvas.2DLayerBridge.Compression.DecompressionTime"
    units="ms" expires_after="2026-03-22">
  <owner>lizeb@chromium.org</owner>
  <owner>jpgravel@chromium.org</owner>
  <summary>
    When a compressed hibernated 2D canvas snapshot is decompressed, duration in
    ms. Reported each time a canvas snapshot is decompressed.
  </summary>
</histogram>

<histogram name="Blink.Canvas.2DLayerBridge.Compression.Ratio" units="%"
    expires_after="2026-03-22">
  <owner>lizeb@chromium.org</owner>
  <owner>jpgravel@chromium.org</owner>
  <summary>
    When a hibernated 2D canvas snapshot is compressed, the compression ratio
    achieved. Reported each time a canvas snapshot is compressed.
  </summary>
</histogram>

<histogram name="Blink.Canvas.2DLayerBridge.Compression.SnapshotSizeKb"
    units="KB" expires_after="2025-11-16">
  <owner>lizeb@chromium.org</owner>
  <owner>jpgravel@chromium.org</owner>
  <summary>
    When a hibernated 2D canvas snapshot is compressed, the size before
    compression. Reported each time a canvas snapshot is compressed.
  </summary>
</histogram>

<histogram name="Blink.Canvas.2DLayerBridge.Compression.ThreadTime" units="ms"
    expires_after="2026-03-22">
  <owner>lizeb@chromium.org</owner>
  <owner>jpgravel@chromium.org</owner>
  <summary>
    When a hibernated 2D canvas snapshot is compressed, the CPU time it takes to
    compress it. Reported each time a canvas snapshot is compressed.
  </summary>
</histogram>

<histogram name="Blink.Canvas.2DLayerBridge.WillReadFrequently"
    enum="BooleanWillReadFrequently" expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>jpgravel@chromium.org</owner>
  <summary>
    Records the state of the willReadFrequently flag upon creation of a Canvas2D
    layer bridge, as this is the moment when it determines whether the canvas
    will be accelerated.
  </summary>
</histogram>

<histogram name="Blink.Canvas.2DPrintingAsVector" enum="BooleanSuccess"
    expires_after="2025-12-14">
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <summary>
    Records if a Canvas is being printed as a vector or as an image.
  </summary>
</histogram>

<histogram name="Blink.Canvas.ContentChangeMode"
    enum="BooleanContentChangeMode" expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Records whether the contents in the canvas buffer needed to be preserved via
    a copy when replacing the target buffer for drawing a new frame. This metric
    is recorded each time the target buffer needs to be replaced. It's recorded
    once per frame.
  </summary>
</histogram>

<histogram name="Blink.Canvas.CreateImageBitmapSource"
    enum="CanvasCreateImageBitmapSource" expires_after="2025-04-01">
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <summary>
    The source from which an ImageBitmap is created by a createImageBitmap call.
  </summary>
</histogram>

<histogram name="Blink.Canvas.GetImageData.WillReadFrequently"
    enum="BooleanWillReadFrequently" expires_after="2026-02-22">
  <owner>aaronhk@chromium.org</owner>
  <owner>junov@chromium.org</owner>
  <summary>
    Records the state of the willReadFrequently flag during Canvas2D readback.
  </summary>
</histogram>

<histogram name="Blink.Canvas.GPUFallbackToCPU"
    enum="CanvasGPUFallbackToCPUScenario" expires_after="2026-08-30">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>Logs the occurrences of canvas fallback from GPU to CPU.</summary>
</histogram>

<histogram name="Blink.Canvas.HibernationEvents2" enum="CanvasHibernationEvent"
    expires_after="2026-02-22">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Records the occurrence of events related to 2D canvas GPU resource
    hibernation.

    Replaced Blink.Canvas.HibernationEvents because some hibernation events were
    incorrectly classified.
  </summary>
</histogram>

<histogram name="Blink.Canvas.MaximumInflightResources"
    units="canvas resources" expires_after="2026-09-27">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Reports the maximum number or canvas resources used at any one time by a
    canvas resource provider. Logged in the destructor of
    CanvasResourceProvider.
  </summary>
</histogram>

<histogram name="Blink.Canvas.MaximumStateStackDepth" units="stack depth"
    expires_after="2024-04-01">
  <owner>junov@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Reports the maximum depth of the state stack over the lifetime of a 2d
    rendering context. Metric is recorded once per instance of
    CanvasRenderingContext2D, OffscreenRenderingContext2D, and
    PaintRenderingContext2D; at context destruction time.
  </summary>
</histogram>

<histogram name="Blink.Canvas.NumCanvasesPerPage" units="canvases"
    expires_after="2025-08-10">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    When a Document is shutdown, reports the number of canvases on that page.
  </summary>
</histogram>

<histogram name="Blink.Canvas.RasterDuration{BlinkCanvasRasterDurationType}"
    units="microseconds" expires_after="2027-01-03">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Records the CPU, GPU and combined raster time for a random sampling of
    canvas frames for accelerated and deferred canvases. Records wall time for a
    random sampling of unaccelerated canvases.

    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. {BlinkCanvasRasterDurationType}
  </summary>
  <token key="BlinkCanvasRasterDurationType">
    <variant name=""/>
    <variant name=".Accelerated.CPU" summary=""/>
    <variant name=".Accelerated.GPU" summary=""/>
    <variant name=".Accelerated.Total" summary=""/>
    <variant name=".Unaccelerated" summary=""/>
  </token>
</histogram>

<histogram name="Blink.Canvas.ResourceProviderIsAccelerated"
    enum="BooleanHardwareAccelerated" expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>Logs if the canvas resource provider is accelerated or not.</summary>
</histogram>

<histogram name="Blink.Canvas.ResourceProviderType"
    enum="CanvasResourceProviderType" expires_after="2026-08-30">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>Records the type of resource provider used for a canvas.</summary>
</histogram>

<histogram name="Blink.Canvas.ResourceProviderUsage"
    enum="CanvasResourceProviderUsage" expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Records the requested resource usage for a canvas resource provider.
  </summary>
</histogram>

<histogram name="Blink.Canvas.SqrtNumberOfPixels" units="sqrt(pixels)"
    expires_after="2027-01-03">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Stores the square root of the number of pixels in a new or resized offscreen
    canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA.
  </summary>
</histogram>

<histogram name="Blink.Canvas.ToBlob.IdleTaskStatus" enum="IdleTaskStatus"
    expires_after="2025-04-01">
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <summary>
    Records the status of the idle task when finishing a toBlob call.

    In addition, metric values from OffscreenCanvas.convertToBlob API call are
    also gathered into this histogram, because the logic flow is exactly the
    same as canvas.toBlob. It's worth to note that the values can come from idle
    tasks on either main or worker thread.
  </summary>
</histogram>

<histogram name="Blink.Canvas.ToBlob.InitialEncodingDelay.{Type}"
    units="microseconds" expires_after="2026-04-19">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    A new version of &quot;Blink.Canvas.ToBlob.InitiateEncodingDelay&quot;
    (which will be allowed to expire) which allows for times &gt;10ms.

    This metric measures the time spent from initiating image encoding (jpeg or
    png) on idle task to the actual execution time of initiation, as part of a
    canvas.toBlob API call.

    This metric is useful in helping us adjust the IdleTaskStartTimeoutDelay in
    canvas.toBlob. When the initialization idle task is delayed for longer than
    IdleTaskStartTimeoutDelay, the browser will switch to a non-idle task to
    force initialization and encoding to occur on the main thread.

    In addition, metric values from OffscreenCanvas.convertToBlob API call are
    also gathered into this histogram, because the logic flow is exactly the
    same as canvas.toBlob. It's worth to note that the values can come from idle
    tasks on either main or worker thread.

    Note: This metric drops reports on clients with low-resolution clocks, which
    means these reports will be biased against a portion of the population on
    Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
  <token key="Type">
    <variant name="JPEG"/>
    <variant name="PNG"/>
  </token>
</histogram>

<histogram name="Blink.Canvas.ToBlob.ScaledDuration{BlinkCanvasToBlobType}"
    units="microseconds/sqrt(pixels)" expires_after="2025-10-12">
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <summary>
    Time in microseconds spent on the 2D canvas toBlob API call, divided by the
    square root of the total number of pixels of the canvas.

    In addition, metric values from OffscreenCanvas.convertToBlob API call are
    also gathered into this histogram, because the logic flow is exactly the
    same as canvas.toBlob. It's worth to note that the values can come from idle
    tasks on either main or worker thread.

    Note: This metric drops reports on clients with low-resolution clocks, which
    means these reports will be biased against a portion of the population on
    Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
    {BlinkCanvasToBlobType}
  </summary>
  <token key="BlinkCanvasToBlobType">
    <variant name=".JPEG" summary=""/>
    <variant name=".PNG" summary=""/>
    <variant name=".WEBP" summary=""/>
  </token>
</histogram>

<histogram name="Blink.Canvas.ToBlob.TotalEncodingDelay.{Type}"
    units="microseconds" expires_after="2026-06-21">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    A new version of &quot;Blink.Canvas.ToBlob.InitiateEncodingDelay&quot;
    (which will be allowed to expire) which allows for times &gt;10ms.

    This metric measures the total time spent on completing encoding all the
    rows of an image (jpeg or png), as part of a canvas.toBlob API call.
    Encoding occurs during one or more idle periods on the main thread and the
    waiting time of the next idle period is included in the measurement. If the
    code has swtiched to force encoding path, we will not measure the delay in
    this metric.

    This metric is useful in helping us adjust the IdleTaskCompleteTimeoutDelay
    in canvas.toBlob. When the encoding idle task is delayed for longer than
    IdleTaskCompleteTimeoutDelay, the browser will switch to a non-idle task to
    force encoding to happen on the main thread.

    In addition, metric values from OffscreenCanvas.convertToBlob API call are
    also gathered into this histogram, because the logic flow is exactly the
    same as canvas.toBlob. It's worth to note that the values can come from idle
    tasks on either main or worker thread.

    Note: This metric drops reports on clients with low-resolution clocks, which
    means these reports will be biased against a portion of the population on
    Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
  <token key="Type">
    <variant name="JPEG"/>
    <variant name="PNG"/>
  </token>
</histogram>

<histogram
    name="Blink.Canvas.ToDataURLScaledDuration{BlinkCanvasToDataURLMimeType}"
    units="microseconds/sqrt(pixels)" expires_after="2026-06-21">
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent on 2D canvas toDataURL API call divided by the square root of the
    total number of pixels of the image. Smaller is faster.

    The idea behind this unit is that the bigger the area of a canvas the longer
    the operation ToDataURL takes, so we want a way to measure the overall
    performance regardless of the size of the canvas.

    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. {BlinkCanvasToDataURLMimeType}
  </summary>
  <token key="BlinkCanvasToDataURLMimeType">
    <variant name=".JPEG" summary=""/>
    <variant name=".PNG" summary=""/>
    <variant name=".WEBP" summary=""/>
  </token>
</histogram>

<histogram name="Blink.Canvas.WebGLANGLEImplementation"
    enum="WebGLANGLEImplementation" expires_after="2026-02-22">
  <owner>zmo@chromium.org</owner>
  <owner>webgl-team@google.com</owner>
  <summary>
    Distribution of WebGL1 and WebGL2 contexts and their ANGLE implementation.
    Recorded at first draw call time for each context.
  </summary>
</histogram>

<histogram
    name="Blink.CapabilityElement.{CapabilityType}.GumApi.OverconstrainedError"
    enum="Boolean" expires_after="2027-06-02">
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records whether the getUserMedia (gUM) API call by the {CapabilityType}
    element failed specifically due to an OverconstrainedError (true) or some
    other error (false). Recorded when the gUM request callback returns with an
    error.
  </summary>
</histogram>

<histogram name="Blink.CapabilityElement.{CapabilityType}.InvalidStyle.Reason"
    enum="PermissionElementInvalidStyleReason" expires_after="2027-07-01">
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the reason why the {CapabilityType} element's style is invalid. This
    metric is emitted when the element's style is calculated/recalculated. Note:
    This metric was previously recorded as
    Blink.CapabilityElement.{CapabilityType}.InvalidStyleReason in M147
  </summary>
</histogram>

<histogram
    name="Blink.CapabilityElement.{CapabilityType}.UserInteraction.Accepted"
    enum="Boolean" expires_after="2027-02-07">
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Recorded every time a user clicks on a {CapabilityType} element. True
    indicates that the interaction was accepted, false indicates that the
    interaction was denied. Check
    Blink.CapabilityElement.{CapabilityType}.UserInteraction.DeniedReason for
    the reason of denial.
  </summary>
</histogram>

<histogram
    name="Blink.CapabilityElement.{CapabilityType}.UserInteraction.Denied.Reason"
    enum="PermissionElementUserInteractionDeniedReason"
    expires_after="2027-02-07">
  <owner>ravjit@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <summary>
    Records the reason why the user interaction with the {CapabilityType}
    element was denied. Recorded when the element is clicked by the user.
  </summary>
</histogram>

<histogram name="Blink.ChildURLLoaderFactoryBundle.CloneTime"
    units="microseconds" expires_after="2027-01-22">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Time spent in ChildURLLoaderFactoryBundle::Clone() in microseconds. Recorded
    when ChildURLLoaderFactoryBundle::Clone() is called to clone a loader
    factory bundle (e.g., when initializing workers, subresource loaders, or
    frame navigations).

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

<histogram name="Blink.Clipboard.EagerRead.TotalBlobSizeKB" units="KB"
    expires_after="2027-04-01">
  <owner>rbyers@chromium.org</owner>
  <owner>shwetabindal@microsoft.com</owner>
  <summary>
    Records the total size in KB of all blobs read during a single
    navigator.clipboard.read() call in eager (non-lazy) mode. All MIME type
    blobs are read upfront before the clipboard.read() promise resolves.
    Recorded once per clipboard.read() call when the ClipboardItem is created.
  </summary>
</histogram>

<histogram name="Blink.Clipboard.LazyRead.FormatsNeverRead" units="count"
    expires_after="2027-04-01">
  <owner>rbyers@chromium.org</owner>
  <owner>shwetabindal@microsoft.com</owner>
  <summary>
    Records the number of MIME types advertised by a lazy ClipboardItem (from
    navigator.clipboard.read()) that were never fetched via getType() before the
    ClipboardItem was destroyed. Recorded once per lazy ClipboardItem when it is
    destroyed (frame detachment or navigation) or garbage collected.
  </summary>
</histogram>

<histogram name="Blink.Clipboard.LazyRead.GetTypeRejected" enum="Boolean"
    expires_after="2027-04-01">
  <owner>rbyers@chromium.org</owner>
  <owner>shwetabindal@microsoft.com</owner>
  <summary>
    Records whether a lazy-read getType() call was rejected because the
    clipboard content changed after clipboard.read(). True means rejected; false
    means the clipboard had not changed. Recorded once per getType() call on a
    lazy-mode ClipboardItem.
  </summary>
</histogram>

<histogram name="Blink.Clipboard.LazyRead.NullBlobResolved" enum="Boolean"
    expires_after="2027-04-01">
  <owner>rbyers@chromium.org</owner>
  <owner>shwetabindal@microsoft.com</owner>
  <summary>
    Records whether a lazy-read getType() call resolved with a null blob from
    the OS clipboard. True means the blob was null; false means valid data was
    returned. Recorded once per getType() resolution on a lazy-mode
    ClipboardItem.
  </summary>
</histogram>

<histogram name="Blink.Clipboard.LazyRead.TotalBlobSizeKB" units="KB"
    expires_after="2027-04-01">
  <owner>rbyers@chromium.org</owner>
  <owner>shwetabindal@microsoft.com</owner>
  <summary>
    Records the total size in KB of all blobs resolved via getType() calls for a
    single lazy ClipboardItem during its lifetime. Recorded once per lazy
    ClipboardItem when it is destroyed (frame detachment or navigation) or
    garbage collected.
  </summary>
</histogram>

<histogram name="Blink.Clipboard.Reader.ProcessedDataNull" enum="Boolean"
    expires_after="2027-04-01">
  <owner>rbyers@chromium.org</owner>
  <owner>shwetabindal@microsoft.com</owner>
  <summary>
    Records true when a clipboard reader (PNG, text, HTML, or SVG) produces null
    data after processing. For PNG this means ReadPng() returned empty data; for
    text it means ReadPlainText() returned empty; for HTML/SVG it means
    sanitization produced an empty string. Recorded once per individual reader
    invocation.
  </summary>
</histogram>

<histogram name="Blink.CommitDocumentLoaderTime" units="ms"
    expires_after="2026-02-09">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time it takes to commit a new document in Blink. Collected once
    per navigation when a frame is loaded.
  </summary>
</histogram>

<histogram name="Blink.CompositingCommit.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-01-31">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating and pushing layers at the end of the paint step in the
    Blink document lifecycle. This is implemented by PaintArtifactCompositor.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.CompositingInputs.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating compositing inputs in the Blink document lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.Compositor.FixedLayerCount" units="count"
    expires_after="2026-08-07">
  <owner>wangxianzhu@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Number of fixed-position composited layers under a local frame root.
    Reported at the end of a full compositing update, with a 0.01 sample rate.
  </summary>
</histogram>

<histogram name="Blink.Compositor.MergedFixedLayerCount" units="count"
    expires_after="2026-08-07">
  <owner>wangxianzhu@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Total number of fixed-position pending layers that are merged into
    composited layers, under a local frame root. This is non-zero only if
    MergeFixedLayers is enabled. Reported at the end of a full compositing
    update, with a 0.01 sample rate.
  </summary>
</histogram>

<histogram name="Blink.Compositor.MergedStickyLayerCount" units="count"
    expires_after="2026-08-07">
  <owner>wangxianzhu@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Total number of sticky-position pending layers that are merged into
    composited layers, under a local frame root. This is non-zero only if
    MergeStickyLayers is enabled. Reported at the end of a full compositing
    update, with a 0.01 sample rate.
  </summary>
</histogram>

<histogram name="Blink.Compositor.StickyLayerCount" units="count"
    expires_after="2026-08-07">
  <owner>wangxianzhu@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Number of sticky-position composited layers under a local frame root.
    Reported at the end of a full compositing update, with a 0.01 sample rate.
  </summary>
</histogram>

<histogram name="Blink.Compression.CompressionStream.Format"
    enum="CompressionStreamsFormat" expires_after="2023-03-26">
  <owner>ricea@chromium.org</owner>
  <owner>yhirano@chromium.org</owner>
  <summary>
    Compression format passed to the constructor of the JavaScript API
    &quot;CompressionStream&quot;, which is used for lossless compression of
    arbitrary binary data. Recorded once per call to the constructor. This
    measures which compression formats are most commonly used in the wild.
  </summary>
</histogram>

<histogram name="Blink.Compression.DecompressionStream.Format"
    enum="CompressionStreamsFormat" expires_after="2023-03-26">
  <owner>ricea@chromium.org</owner>
  <owner>yhirano@chromium.org</owner>
  <summary>
    Compression format passed to the constructor of the JavaScript API
    &quot;DecompressionStream&quot;, which is used for lossless decompression of
    arbitrary binary data. Recorded once per call to the constructor. This
    measures which compression formats are most commonly used in the wild.
  </summary>
</histogram>

<histogram
    name="Blink.ContentDocumentUpdate.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent preparing the document for a canvas draw, SVG image draw or
    plugin during a main frame update. Includes time spent in style update and
    layout.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.ContextMenu.ImageSelection.Depth" units="count"
    expires_after="2023-08-31">
  <owner>flackr@chromium.org</owner>
  <owner>blink-interactions-team@google.com</owner>
  <summary>
    The depth of the discovered image node in the hit test list when performing
    a penetrating image selection search.

    Only recorded when a user long presses or right clicks a document (and an
    image is found).
  </summary>
</histogram>

<histogram name="Blink.ContextMenu.ImageSelection.ElapsedTime"
    units="microseconds" expires_after="2023-08-31">
  <owner>flackr@chromium.org</owner>
  <owner>blink-interactions-team@google.com</owner>
  <summary>
    The amount of time it took to iterate through the dom looking for an image
    node.

    Only recorded when a user long presses or right clicks a document.

    Note: This metric drops reports on clients with low-resolution clocks, which
    means these reports will be biased against a portion of the population on
    Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
</histogram>

<histogram name="Blink.ContextMenu.ImageSelection.Outcome"
    enum="ImageSelectionOutcome" expires_after="2024-03-17">
  <owner>flackr@chromium.org</owner>
  <owner>blink-interactions-team@google.com</owner>
  <summary>
    The outcome of an image selection search that may or may not trigger the
    context menu.

    Only recorded when a user long presses or right clicks a document (and an
    image is found).
  </summary>
</histogram>

<histogram name="Blink.ContextMenu.ImageSelection.RetrievalOutcome"
    enum="ImageSelectionRetrievalOutcome" expires_after="2023-08-31">
  <owner>flackr@chromium.org</owner>
  <owner>blink-interactions-team@google.com</owner>
  <summary>
    The outcome of a follow up retrieval of an image node after a selection has
    occurred, which occurs asynchronously and thus could be unsuccessful due to
    changes that may occur between the initial hit test and the retrieval.

    Only recorded when a user long presses or right clicks a document (and an
    image is found).
  </summary>
</histogram>

<histogram name="Blink.CookiesTime.AblationDelay2" units="ms"
    expires_after="2026-03-01">
  <owner>elkurin@chromium.org</owner>
  <owner>chrome-owp-storage@google.com</owner>
  <summary>
    Time (in ms) added to Cookies operation with IPC call from the CookieJar
    used for ablation study purpose. This is incremented to 2 because the
    Blink.CookiesTime.AblationDelay metrics also includes the metrics for the
    operation without IPC call.
  </summary>
</histogram>

<histogram name="Blink.CookiesTime.AblationSleepTime" units="microseconds"
    expires_after="2026-03-01">
  <owner>elkurin@chromium.org</owner>
  <owner>chrome-owp-storage@google.com</owner>
  <summary>
    Sleep duration (in microseconds) added to Cookies operation with IPC call
    from the CookieJar used for ablation study. This metrics is recorded only
    when CookieJar ablation study is enabled, and during getting cookie with
    IPC. While AblationDelay2 records the wanted delay, this metrics records the
    actual delay.

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

<histogram name="Blink.CookiesTime.{IpcNeeded}2" units="microseconds"
    expires_after="2027-07-07">
  <owner>elkurin@chromium.org</owner>
  <owner>chrome-owp-storage@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time it takes to perform a Cookies operation with or without
    IPC call from the CookieJar. IPC call can be skipped in case where the
    cookie string is taken successfully and has not changed. In such case, the
    metrics is recorded for the time to check shared memory and other tasks. The
    metrics should be separated by whether it needs IPC as it extremely affects
    the time. This is incremented to 2 because Blink.CookiesTime.{IpcNeeded} was
    ms units which is not precise enough to capture IpcNotNeeded metrics.

    Note: This metric is reported for all clients, regardless of clock
    resolution.
  </summary>
  <token key="IpcNeeded">
    <variant name="IpcNeeded"/>
    <variant name="IpcNotNeeded"/>
  </token>
</histogram>

<histogram name="Blink.CookiesTime.{PipeState}" units="ms"
    expires_after="2027-07-07">
  <owner>mmenke@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time it takes to perform a Cookies operation, given the state
    of the restricted cookie manager pipe owned by CookieJar when the call was
    made. This is intended to be a short-lived histogram to specifically
    investigate occasional hangs when fetching cookies.
  </summary>
  <token key="PipeState">
    <variant name="ConnectedOldPipe"/>
    <variant name="DisconnectedOldPipe"/>
    <variant name="NoOldPipe"/>
  </token>
</histogram>

<histogram name="Blink.CSSStyleSheetResource.ParseTime" units="microseconds"
    expires_after="2027-01-17">
  <owner>gjc@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent for parsing the stylesheet. Recorded when the stylesheet finishes
    loading and does not have cached stylesheet contents.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.AvifDensity.Count.{ImageArea}"
    units="0.01 bits per pixel" expires_after="2027-07-13">
  <owner>wtc@google.com</owner>
  <owner>jzern@google.com</owner>
  <owner>
    src/third_party/blink/renderer/platform/image-decoders/avif/OWNERS
  </owner>
  <summary>
    The number of images per image density measured in 0.01 bits per pixel for
    image size in {ImageArea} megapixels. This is logged once per image load
    after the whole image is loaded and only for 8-bit AVIF color still images
    without alpha.
  </summary>
  <token key="ImageArea">
    <variant name="0.1MP" summary="(0.0, 0.1]"/>
    <variant name="0.2MP" summary="(0.1, 0.2]"/>
    <variant name="0.3MP" summary="(0.2, 0.3]"/>
    <variant name="0.4MP" summary="(0.3, 0.4]"/>
    <variant name="0.5MP" summary="(0.4, 0.5]"/>
    <variant name="0.6MP" summary="(0.5, 0.6]"/>
    <variant name="0.7MP" summary="(0.6, 0.7]"/>
    <variant name="0.8MP" summary="(0.7, 0.8]"/>
    <variant name="0.9MP" summary="(0.8, 0.9]"/>
    <variant name="01MP" summary="(0.9, 1]"/>
    <variant name="02MP" summary="(1, 2]"/>
    <variant name="03MP" summary="(2, 3]"/>
    <variant name="04MP" summary="(3, 4]"/>
    <variant name="05MP" summary="(4, 5]"/>
    <variant name="06MP" summary="(5, 6]"/>
    <variant name="07MP" summary="(6, 7]"/>
    <variant name="08MP" summary="(7, 8]"/>
    <variant name="09MP" summary="(8, 9]"/>
    <variant name="10MP" summary="(9, 10]"/>
    <variant name="11MP" summary="(10, 11]"/>
    <variant name="12MP" summary="(11, 12]"/>
    <variant name="13MP" summary="(12, 13]"/>
    <variant name="14+MP" summary="(13, inf)"/>
  </token>
</histogram>

<histogram name="Blink.DecodedImage.AvifDensity.KiBWeighted2"
    units="0.01 bits per pixel" expires_after="2027-01-31">
  <owner>wtc@google.com</owner>
  <owner>jzern@google.com</owner>
  <owner>
    src/third_party/blink/renderer/platform/image-decoders/avif/OWNERS
  </owner>
  <summary>
    The compressed image size in KiB per image density measured in 0.01 bits per
    pixel. This is logged once per image load after the whole image is loaded
    and only for 8-bit AVIF still images with at least 100 pixels on the
    smallest dimension (width or height). The reported count for a sample
    represents the image size rounded to the nearest KiB.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.JpegDensity.Count.{ImageArea}"
    units="0.01 bits per pixel" expires_after="2027-07-20">
  <owner>wtc@google.com</owner>
  <owner>jzern@google.com</owner>
  <owner>src/third_party/blink/renderer/platform/image-decoders/OWNERS</owner>
  <summary>
    The number of images per image density measured in 0.01 bits per pixel for
    image size in {ImageArea} megapixels. This is logged once per image load
    after the whole image is loaded and only for JPEG non-grayscale images.
  </summary>
  <token key="ImageArea">
    <variant name="0.1MP" summary="(0.0, 0.1]"/>
    <variant name="0.2MP" summary="(0.1, 0.2]"/>
    <variant name="0.3MP" summary="(0.2, 0.3]"/>
    <variant name="0.4MP" summary="(0.3, 0.4]"/>
    <variant name="0.5MP" summary="(0.4, 0.5]"/>
    <variant name="0.6MP" summary="(0.5, 0.6]"/>
    <variant name="0.7MP" summary="(0.6, 0.7]"/>
    <variant name="0.8MP" summary="(0.7, 0.8]"/>
    <variant name="0.9MP" summary="(0.8, 0.9]"/>
    <variant name="01MP" summary="(0.9, 1]"/>
    <variant name="02MP" summary="(1, 2]"/>
    <variant name="03MP" summary="(2, 3]"/>
    <variant name="04MP" summary="(3, 4]"/>
    <variant name="05MP" summary="(4, 5]"/>
    <variant name="06MP" summary="(5, 6]"/>
    <variant name="07MP" summary="(6, 7]"/>
    <variant name="08MP" summary="(7, 8]"/>
    <variant name="09MP" summary="(8, 9]"/>
    <variant name="10MP" summary="(9, 10]"/>
    <variant name="11MP" summary="(10, 11]"/>
    <variant name="12MP" summary="(11, 12]"/>
    <variant name="13MP" summary="(12, 13]"/>
    <variant name="14+MP" summary="(13, inf)"/>
  </token>
</histogram>

<histogram name="Blink.DecodedImage.JpegDensity.KiBWeighted"
    units="0.01 bits per pixel" expires_after="2026-08-30">
  <owner>jyrki@google.com</owner>
  <owner>compression-dev@google.com</owner>
  <summary>
    The compressed image size in KiB per image density measured in 0.01 bits per
    pixel. This is logged once per image load after the whole image is loaded
    and only for JPEGs with at least 100 pixels on the smallest dimension (width
    or height). The reported count for a sample represents the image size
    rounded to the nearest KiB.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.JxlDensity.Count.{ImageArea}"
    units="0.01 bits per pixel" expires_after="2027-01-12">
  <owner>veluca@chromium.org</owner>
  <owner>helmut@januschka.com</owner>
  <owner>
    src/third_party/blink/renderer/platform/image-decoders/jxl/OWNERS
  </owner>
  <summary>
    The number of images per image density measured in 0.01 bits per pixel for
    image size in {ImageArea} megapixels. This is logged once per image load
    after the whole image is loaded and only for 8-bit JXL color still images
    without alpha.
  </summary>
  <token key="ImageArea">
    <variant name="0.1MP" summary="(0.0, 0.1]"/>
    <variant name="0.2MP" summary="(0.1, 0.2]"/>
    <variant name="0.3MP" summary="(0.2, 0.3]"/>
    <variant name="0.4MP" summary="(0.3, 0.4]"/>
    <variant name="0.5MP" summary="(0.4, 0.5]"/>
    <variant name="0.6MP" summary="(0.5, 0.6]"/>
    <variant name="0.7MP" summary="(0.6, 0.7]"/>
    <variant name="0.8MP" summary="(0.7, 0.8]"/>
    <variant name="0.9MP" summary="(0.8, 0.9]"/>
    <variant name="01MP" summary="(0.9, 1]"/>
    <variant name="02MP" summary="(1, 2]"/>
    <variant name="03MP" summary="(2, 3]"/>
    <variant name="04MP" summary="(3, 4]"/>
    <variant name="05MP" summary="(4, 5]"/>
    <variant name="06MP" summary="(5, 6]"/>
    <variant name="07MP" summary="(6, 7]"/>
    <variant name="08MP" summary="(7, 8]"/>
    <variant name="09MP" summary="(8, 9]"/>
    <variant name="10MP" summary="(9, 10]"/>
    <variant name="11MP" summary="(10, 11]"/>
    <variant name="12MP" summary="(11, 12]"/>
    <variant name="13MP" summary="(12, 13]"/>
    <variant name="14+MP" summary="(13, inf)"/>
  </token>
</histogram>

<histogram name="Blink.DecodedImage.WebPDensity.Count.{ImageArea}"
    units="0.01 bits per pixel" expires_after="2027-07-20">
  <owner>wtc@google.com</owner>
  <owner>jzern@google.com</owner>
  <owner>src/third_party/blink/renderer/platform/image-decoders/OWNERS</owner>
  <summary>
    The number of images per image density measured in 0.01 bits per pixel for
    image size in {ImageArea} megapixels. This is logged once per image load
    after the whole image is loaded and only for WebP lossy still images without
    alpha.
  </summary>
  <token key="ImageArea">
    <variant name="0.1MP" summary="(0.0, 0.1]"/>
    <variant name="0.2MP" summary="(0.1, 0.2]"/>
    <variant name="0.3MP" summary="(0.2, 0.3]"/>
    <variant name="0.4MP" summary="(0.3, 0.4]"/>
    <variant name="0.5MP" summary="(0.4, 0.5]"/>
    <variant name="0.6MP" summary="(0.5, 0.6]"/>
    <variant name="0.7MP" summary="(0.6, 0.7]"/>
    <variant name="0.8MP" summary="(0.7, 0.8]"/>
    <variant name="0.9MP" summary="(0.8, 0.9]"/>
    <variant name="01MP" summary="(0.9, 1]"/>
    <variant name="02MP" summary="(1, 2]"/>
    <variant name="03MP" summary="(2, 3]"/>
    <variant name="04MP" summary="(3, 4]"/>
    <variant name="05MP" summary="(4, 5]"/>
    <variant name="06MP" summary="(5, 6]"/>
    <variant name="07MP" summary="(6, 7]"/>
    <variant name="08MP" summary="(7, 8]"/>
    <variant name="09MP" summary="(8, 9]"/>
    <variant name="10MP" summary="(9, 10]"/>
    <variant name="11MP" summary="(10, 11]"/>
    <variant name="12MP" summary="(11, 12]"/>
    <variant name="13MP" summary="(12, 13]"/>
    <variant name="14+MP" summary="(13, inf)"/>
  </token>
</histogram>

<histogram name="Blink.DecodedImage.WebPDensity.KiBWeighted2"
    units="0.01 bits per pixel" expires_after="2027-01-31">
  <owner>wtc@google.com</owner>
  <owner>jzern@google.com</owner>
  <owner>src/third_party/blink/renderer/platform/image-decoders/OWNERS</owner>
  <summary>
    The compressed image size in KiB per image density measured in 0.01 bits per
    pixel. This is logged once per image load after the whole image is loaded
    and only for WebP still images with at least 100 pixels on the smallest
    dimension (width or height). The reported count for a sample represents the
    image size rounded to the nearest KiB.
  </summary>
</histogram>

<histogram name="Blink.DecodedImage.WebPFileFormat" enum="WebPFileFormat"
    expires_after="2026-03-22">
  <owner>mcasas@chromium.org</owner>
  <owner>andrescj@chromium.org</owner>
  <summary>
    WebP file format parsed during Blink's header parsing phase (which should
    happen only once per image).
  </summary>
</histogram>

<histogram name="Blink.DecodedImageType" enum="DecodedImageType"
    expires_after="2027-01-17">
  <owner>urvang@chromium.org</owner>
  <summary>
    Image codec inferred during decode. The histogram is incremented when enough
    of the image has been downloaded to infer its width and height. Animated
    images are counted only once, regardless of how many frames there are.
  </summary>
</histogram>

<histogram name="Blink.DigitalCredentials.Create.HasTransientUserActivation"
    enum="Boolean" expires_after="2027-07-05">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether a create() request to the digital credentials API had
    transient user activation at the time of the call.
  </summary>
</histogram>

<histogram name="Blink.DigitalCredentials.Create.IsDelegated" enum="Boolean"
    expires_after="2027-07-01">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether a create() request to the digital credentials API
    successfully utilized a delegated token. Recorded when the API is invoked.
  </summary>
</histogram>

<histogram name="Blink.DigitalCredentials.Get.HasTransientUserActivation"
    enum="Boolean" expires_after="2027-07-05">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether a get() request to the digital credentials API had transient
    user activation at the time of the call.
  </summary>
</histogram>

<histogram name="Blink.DigitalCredentials.Get.IsDelegated" enum="Boolean"
    expires_after="2027-07-01">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether a get() request to the digital credentials API successfully
    utilized a delegated token. Recorded when the API is invoked.
  </summary>
</histogram>

<histogram name="Blink.DigitalIdentityRequest.InterstitialClosedReason"
    enum="DigitalIdentityInterstitialClosedReason" expires_after="2026-12-01">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the reason that the digital identity interstitial dialog was
    dismissed. Recorded when the dialog is dismissed.
  </summary>
</histogram>

<histogram name="Blink.DigitalIdentityRequest.OpenId4VpResponseMode"
    enum="OpenId4VpResponseMode" expires_after="2027-02-07">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the response mode of OpenID4VP requests to the digital credentials
    get API. Recorded when a get request is received.
  </summary>
</histogram>

<histogram name="Blink.DigitalIdentityRequest.Status"
    enum="DigitalIdentityRequestStatus" expires_after="2026-12-01">
  <owner>mamir@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the result of a request to the digital identity API. Recorded when
    the request completes.
  </summary>
</histogram>

<histogram
    name="Blink.DisplayLockIntersectionObserver.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle where the observation is for Display Locking. Recorded when an
    intersection observation is made for the Display Locking reason.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.Document.CompleteURLTime" units="microseconds"
    expires_after="2026-02-01">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Time taken to resolve a non-null URL in Document::CompleteURLWithOverride.
    This is recorded each time a URL is resolved, and can happen multiple times
    per navigation.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram
    name="Blink.DocumentLoader.CommitNavigationToStartLoadingResponse.Time.OutermostMainFrame.NewNavigation.IsHTTPOrHTTPS"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time between CommitNavigation to StartLoadingResponse in the renderer
    process. This is recorded on each new navigation for http or https URLs in
    OutermostMainFrame.
  </summary>
</histogram>

<histogram
    name="Blink.DocumentLoader.CreateParserPostCommit.Time.OutermostMainFrame.NewNavigation.IsHTTPOrHTTPS"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent processing DocumentLoader::CreateParserPostCommit() in the
    renderer process. This is recorded on each new navigation for http or https
    URLs in OutermostMainFrame.
  </summary>
</histogram>

<histogram
    name="Blink.DocumentLoader.TotalTakenTimeToUpdateSubresourceLoadMetrics2.OutermostMainFrame.NewNavigation.IsHTTPOrHTTPS"
    units="microseconds" expires_after="2027-01-03">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Total time spent processing DocumentLoader::UpdateSubresourceLoadMetrics()
    until the document parsing is finished in the renderer process. This is
    recorded on each new navigation for http or https URLs in
    OutermostMainFrame.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.Evp.Autofill.FlowResult" enum="EvpAutofillFlowResult"
    expires_after="2027-02-07">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcomes and failure reasons of the high-level Email
    Verification Protocol (EVP) flow from autofill side. Recorded once per
    autofill attempt when a comformant form contains an email verification token
    field.
  </summary>
</histogram>

<histogram name="Blink.Evp.Autofill.FormSubmitted" enum="BooleanHit"
    expires_after="2027-02-07">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records when a form containing a verified email verification token is
    submitted. Recorded once when the form submission occurs after successful
    email verification.
  </summary>
</histogram>

<histogram name="Blink.Evp.PermissionUi.Status" enum="EvpPermissionUiStatus"
    expires_after="2027-02-14">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome and dismissal reasons of the Email Verification
    Permission UI. Recorded once per permission UI showing when it is dismissed
    or accepted.
  </summary>
</histogram>

<histogram name="Blink.Evp.Status.IsVerifiable" enum="EvpRequestStatus"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the status of the IsVerifiable stage of an Email Verification
    Protocol (EVP) request. Recorded once per request when the IsVerifiable
    check completes.
  </summary>
</histogram>

<histogram name="Blink.Evp.Status.Verify" enum="EvpRequestStatus"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the status of the Verify stage of an Email Verification Protocol
    (EVP) request. Recorded once per request when the Verify operation
    completes.
  </summary>
</histogram>

<histogram name="Blink.Evp.Timing.IsVerifiable" units="ms"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time taken from the start of checking if an email is verifiable
    until the pre-prompt background verification check completes. Recorded once
    per pre-prompt check.
  </summary>
</histogram>

<histogram name="Blink.Evp.Timing.Verify" units="ms" expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time taken from the start of the token verification call until
    the post-prompt token verification and fetch completes. Recorded once per
    verification request execution.
  </summary>
</histogram>

<histogram name="Blink.Experimental.Cookies.CacheLookupResult2"
    enum="CookieCacheLookupResult" expires_after="2027-07-07">
  <owner>olivierli@chromium.org</owner>
  <owner>woa-performance@google</owner>
  <summary>
    Whether a GetCookiesString request for a document returned the same result
    as the previous one. This is an experiment to determine the usefulness of a
    cookie cache in the Renderer.

    A sample is recorded for every GetCookiesString request sent from the
    Document owned CookieJar.
  </summary>
</histogram>

<histogram name="Blink.Experimental.Cookies.FirstCookieRequest"
    enum="FirstCookieRequest" expires_after="2027-07-07">
  <owner>aattar@google.com</owner>
  <owner>chrome-catan@google</owner>
  <summary>
    Whether the first cookie request is a SET, GET, or a check to determine if
    the cookies are enabled. This is an experiment to determine if we should
    return the version and/or the cookie string on SET.

    A sample is recorded on the first GetCookiesString, SetCookiesString, or
    CookiesEnabled request sent from the Document owned CookieJar.
  </summary>
</histogram>

<histogram name="Blink.Experimental.Cookies.IpcNeeded" enum="BooleanYesNo"
    expires_after="2027-07-07">
  <owner>lizeb@google.com</owner>
  <owner>clank-performance-team@google</owner>
  <summary>
    When reading document.cookie, whether an IPC to the network service was
    required. Recorded at each cookie read access.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AccountChosenPosition.Desktop" units="count"
    expires_after="2026-12-27">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the 0-based position of the account that was selected by the user in
    a FedCM dialog. Recorded whenever the user clicks on a clickable account in
    the FedCM dialog. Currently only recorded on desktop.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AccountFieldsType" enum="FedCmAccountFieldsType"
    expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records what kind of account fields we received from the server. Recorded
    once per accounts endpoint response, when we receive it.

    Considers the union of fields over all accounts that were received. For
    example, if one account has only an email address and one account only has a
    name, we record kOnlyNameAndEmail.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AccountLabel.NumMatchingAccounts"
    enum="FedCmNumAccounts" expires_after="2027-02-07">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the number of accounts that match an account label. Records at the
    time the accounts received by the FedCM API are filtered.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AccountsDialogShown" enum="BooleanHit"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>Records a 1 each time an accounts dialog is shown.</summary>
</histogram>

<histogram name="Blink.FedCm.AccountsRequestSent" enum="BooleanHit"
    expires_after="2026-12-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records a 1 each time a request is sent to the accounts endpoint.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AccountsSize.Raw" units="accounts"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the size of the accounts received from the IdP before applying any
    filters. Records one sample per accounts fetch if there's at least one
    account returned.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AccountsSize.ReadyToShow" units="accounts"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the size of the accounts received from the IdP after applying the
    filters. Records one sample per accounts fetch if there's at least one
    account left after filtering.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Ambient.ClickSource" enum="FedCmAmbientClick"
    expires_after="2027-02-07">
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the click source of the FedCM ambient UI. Recorded when the user
    clicks on the omnibox icon, chip or the anchored message's button or close
    button (but not when the user clicks on the avatar or strings). Multiple
    clicks can happen per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Ambient.Impression" enum="FedCmAmbientImpression"
    expires_after="2027-02-07">
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records when the FedCM ambient UI is shown. Recorded when the omnibox icon,
    chip and anchored message is displayed to the user (can happen more than
    once per API call).
  </summary>
</histogram>

<histogram name="Blink.FedCm.Android.ActivityDestroyedWhileCctShown"
    enum="BooleanHit" expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records a 1 each time the parent activity is destroyed while the IDP
    login/continuation custom tab is shown. Recorded at most once per IDP login
    attempt and at most once per IDP continuation popup.
  </summary>
</histogram>

<histogram name="Blink.FedCm.ApprovedClientsExistence" enum="Boolean"
    expires_after="2026-12-22">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether an IDP returns an approved clients list in the response.
    Records at most one sample per IDP when the accounts response is parsed.
  </summary>
</histogram>

<histogram name="Blink.FedCm.ApprovedClientsSize" units="clients"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the size of the approved clients list returned by IDP if applicable.
    Records at most one sample per IDP when the IDP includes `approved_clients`
    in the accounts response.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AutoReauthn.BlockedByContentSettings"
    enum="Boolean" expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the FedCM auto re-authn call is blocked because the auto
    re-authn content settings permission is disabled. Records at most one sample
    per FedCM API with auto re-authn enabled: some failures could occur before
    this metric is recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AutoReauthn.BlockedByEmbargo" enum="Boolean"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the FedCM auto re-authn call is blocked because the auto
    re-authn is under embargo, i.e. due to cooldown. Records at most one sample
    per FedCM API with auto re-authn enabled: some failures could occur before
    this metric is recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AutoReauthn.BlockedByEmbedder" enum="Boolean"
    expires_after="2026-12-12">
  <owner>npm@chromium.org</owner>
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether auto-reauthn was disabled by an embedder (e.g. due to an
    active actor task). Records at most one sample per FedCM API with auto
    re-authn enabled: some failures could occur before this metric is recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AutoReauthn.BlockedByPreventSilentAccess"
    enum="Boolean" expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the FedCM auto re-authn call is blocked because
    preventSilentAccess() has been called on this site. Records at most one
    sample per FedCM API with auto re-authn enabled: some failures could occur
    before this metric is recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AutoReauthn.ReturningAccounts"
    enum="FedCmNumAccounts" expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether there was zero, one, or multiple returning accounts when a
    site calls the FedCM API with autoReauthn: true. Records at most one sample
    per failed API call: some failures could occur before this metric is
    recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.AutoReauthn.Succeeded" enum="Boolean"
    expires_after="2026-12-27">
  <owner>npm@chromium.org</owner>
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether auto re-authn checks succeeded or not. The count would
    provide roughly the number of FedCM re-authn attempts, the true count would
    provide the number of times the re-authn UI is shown to the user, and the
    false count would provide the number of attempts where auto re-authn was
    blocked for some non-network related reason. Records at most one sample per
    FedCM API with auto re-authn enabled: some failures could occur before this
    metric is recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Button.AccountChooserResult"
    enum="FedCmAccountChooserResult" expires_after="2027-02-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the last account chooser the user sees in a button
    flow. Recorded at most once per button flow. For example, if the user
    selects an account on the account chooser and then clicks on the back button
    in the next dialog where an account chooser is shown again, leaving would
    only record one sample.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Button.DisclosureDialogResult"
    enum="FedCmDisclosureDialogResult" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the last disclosure dialog the user sees in a button
    flow. Recorded at most once per button flow. For example, if the user clicks
    on the back button in the disclosure dialog and then clicks on an account
    where the disclosure dialog is shown again, leaving would only record one
    sample.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Button.LoadingDialogResult"
    enum="FedCmLoadingDialogResult" expires_after="2026-11-29">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the loading dialog in button flow. Button flows
    always start with a loading dialog. Recorded once per button flow dialog
    destroyed. For example, when the dialog gets updated into an account
    chooser, the user can then select an account and subsequently cause the
    dialog to be destroyed once they are signed in. Upon destroyal, this metric
    is recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Button.LoadingStatePopupInteraction"
    enum="FedCmPopupInteraction" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the user lost focus of the pop-up and whether it was the IDP
    or the user that closed the pop-up. Recorded once per loading state pop-up
    window closed in button mode.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Button.UseOtherAccountPopupInteraction"
    enum="FedCmPopupInteraction" expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the user lost focus of the pop-up and whether it was the IDP
    or the user that closed the pop-up. Recorded once per use other account
    pop-up window closed in button mode.
  </summary>
</histogram>

<histogram name="Blink.FedCm.CancelReason" enum="FedCmCancelReason"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the reason that the FedCM dialog was closed (ex user clicked the
    dialog close button). Recorded when the FedCM dialog is closed without the
    user selecting an account. This includes instances where the close action is
    less intentional such as the virtual keyboard showing trigerring the dialog
    close.
  </summary>
</histogram>

<histogram name="Blink.FedCm.ClosedSheetType.Android" enum="FedCmSheetType"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of FedCM Android UI sheet that is being displayed when the
    user manually closes it. Records when the user closes this dialog, so at
    most once per API call that results in UI being shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.ClosedSheetType.Desktop" enum="FedCmSheetType"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of FedCM desktop UI sheet that is being displayed when the
    user manually closes it. Records when the user closes this dialog, so at
    most once per API call that results in UI being shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.CloseVerifySheet.Android" enum="Boolean"
    expires_after="2027-02-14">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the UI that a user is closing is the verify sheet or not on
    Android. Records at most one sample per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.CloseVerifySheet.Desktop" enum="Boolean"
    expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the UI that a user is closing is the verify sheet or not on
    desktop. Records at most one sample per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.ContinueOn.PopupWindowResult"
    enum="FedCmContinueOnPopupResult" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the continue_on popup was closed by the user or by the page
    finishing the flow. Recorded once per continue_on flow when the window gets
    closed (at most once per FedCM API call). If the RP tab/window gets closed
    before the popup, this will not get recorded.
  </summary>
</histogram>

<histogram name="Blink.FedCm.ContinueOn.PopupWindowStatus"
    enum="FedCmContinueOnPopupStatus" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether we could open the continue_on popup or if not, why we
    couldn't. Recorded once per continue_on popup request when we receive the
    request, at most once per FedCM API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.CrossSiteIframeType"
    enum="FedCmCrossSiteIframeType" expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the client metadata endpoint response contained a value for
    `client_is_third_party_to_top_frame_origin`, and if so, what value. Only
    recorded if the iframe is cross-site. Recorded when we receive the client
    metadata endpoint response.
  </summary>
</histogram>

<histogram name="Blink.FedCm.DidShowUI" enum="Boolean"
    expires_after="2027-01-03">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the FedCM UI is shown or not. Records a sample when the
    FedCM call is completed, i.e. at the same time as
    Blink.FedCm.Status.RequestIdToken.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Disconnect.FrameType"
    enum="FedCmRequesterFrameType" expires_after="2026-12-28">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of frame that invokes disconnect(). Records once for each
    disconnect() call. Possible values are: main frame, same-site iframe, and
    cross-site iframe, where the site of the caller frame is compared with the
    site of the main frame.
  </summary>
</histogram>

<histogram name="Blink.FedCm.DomainHint.NumMatchingAccounts"
    enum="FedCmNumAccounts" expires_after="2026-12-28">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the number of accounts that match a domain hint. Records at the time
    the accounts received by the FedCM API are filtered.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Error.ErrorDialogResult"
    enum="FedCmErrorDialogResult" expires_after="2026-12-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the error dialog. Recorded at most once per API call
    when the error dialog is displayed.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Error.ErrorDialogType" enum="FedCmErrorDialogType"
    expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of error dialog shown. Recorded at most once per API call
  </summary>
</histogram>

<histogram name="Blink.FedCm.Error.ErrorUrlType" enum="FedCmErrorUrlType"
    expires_after="2026-12-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the error URL is same-origin, cross-origin but same-site or
    cross-site with the config URL. Recorded at most once per API call when a
    valid error URL is received.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Error.TokenResponseType"
    enum="FedCmTokenResponseType" expires_after="2026-12-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of token response received. Recorded at most once per API
    call when a token response received.
  </summary>
</histogram>

<histogram name="Blink.FedCm.FrameType" enum="FedCmRequesterFrameType"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of frame that invokes the FedCM API call. Records once per
    API call. Possible values are: main frame, same-site iframe, and cross-site
    iframe, where the site of the caller frame is compared with the site of the
    main frame. Same-origin iframes are recorded under the same-site category.
  </summary>
</histogram>

<histogram name="Blink.FedCm.HasNonce" enum="BooleanHit"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records a 1 whenever a FedCM API call includes the nonce parameter. Records
    towards the beginning of the call, except for some cases where the call is
    immediately rejected.
  </summary>
</histogram>

<histogram name="Blink.FedCm.HasNonceOutsideParamsOnly" enum="BooleanHit"
    expires_after="2027-01-03">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records a 1 whenever a FedCM API call includes the nonce parameter, but does
    not include it inside the params JSON blob. Records towards the beginning of
    the call, except for some cases where the call is immediately rejected.
  </summary>
</histogram>

<histogram name="Blink.FedCm.HasSigninAccount" enum="BooleanYesNo"
    expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether a user is signing up with the API. Records once per
    successful account fetch from the IdP server after the accounts filtering.
    If there are multiple accounts, record the user as sign-in if IdP claims at
    least one of the accounts is sign-in. If an IdP does not share the user's
    sign-in state, record the state stored in the browser.
  </summary>
</histogram>

<histogram name="Blink.FedCm.IdentityProvidersCount" units="count"
    expires_after="2026-10-26">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the count of identity providers right before fetching endpoints with
    multi IDP flag enabled. It counts distint providers including the ones a
    user is not signed in to. Recorded at most once per API call before the
    browser starts fetching from the IdPs.
  </summary>
</histogram>

<histogram name="Blink.FedCm.IdpSigninStatus.ClosePopupWindowReason"
    enum="FedCmClosePopupWindowReason" expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the reason why the pop-up window is closed. Recorded once per
    opening of a pop-up window.
  </summary>
</histogram>

<histogram
    name="Blink.FedCm.IdpSigninStatus.IdpClosePopupToBrowserShowAccountsDuration"
    units="ms" expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when IdentityProvider.close() is called to when an
    updated accounts dialog is shown. Recorded once per IdentityProvider.close()
    being called given that an accounts dialog is shown. It is not recorded when
    the accounts dialog is never shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.IdpSigninStatus.MismatchDialogResult"
    enum="FedCmMismatchDialogResult" expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the mismatch dialog. Recorded once per the mismatch
    dialog being displayed.
  </summary>
</histogram>

<histogram name="Blink.FedCm.IdpSigninStatus.PopupWindowResult"
    enum="FedCmPopupWindowResult" expires_after="2027-02-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the IDP sign-in pop-up window. Recorded once per
    pop-up window triggered by the user.
  </summary>
</histogram>

<histogram name="Blink.FedCm.IsSignInUser" enum="Boolean"
    expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the user selected account is for sign-in or not. Records at
    most one sample per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.JavaObjectCreationOutcome.Active"
    enum="FedCmJavaObjectCreationOutcome" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    The Java object is tied to the bottomsheet availability so it may not be
    creatable when we need it. Records one sample each time we request creating
    the object in active mode. Recorded whenever native is talking with the
    Android side which could be multiple times per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.JavaObjectCreationOutcome.Passive"
    enum="FedCmJavaObjectCreationOutcome" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    The Java object is tied to the bottomsheet availability so it may not be
    creatable when we need it. Records one sample each time we request creating
    the object in passive mode. Recorded whenever native is talking with the
    Android side which could be multiple times per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.LifecycleStateFailureReason"
    enum="FedCmLifecycleStateFailureReason" expires_after="2027-01-24">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    When we fail a FedCM request because the `Page` is not primary, this records
    the lifecycle state the render frame host is in.
  </summary>
</histogram>

<histogram name="Blink.FedCm.LoginHint.NumMatchingAccounts"
    enum="FedCmNumAccounts" expires_after="2026-12-28">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the number of accounts that match a login hint. Records at the time
    the accounts received by the FedCM API are filtered.
  </summary>
</histogram>

<histogram name="Blink.FedCm.MismatchDialogShown" enum="BooleanHit"
    expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>Records a 1 each time a mismatch dialog is shown.</summary>
</histogram>

<histogram name="Blink.FedCm.MismatchDialogType" enum="FedCmMismatchDialogType"
    expires_after="2027-01-03">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the type of mismatch dialog shown: whether it is the first mismatch
    shown for the current FedCM request or not, and whether there were hints
    requested in the current FedCM request or not. Records every time a mismatch
    dialog is shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.MultipleRequestsFromDifferentIdPs" enum="Boolean"
    expires_after="2026-12-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether an API call is rejected due to there's an existing in-flight
    API call initiated by other IdPs. Recorded once per promise rejection
    because of an existing API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.MultipleRequestsRpMode"
    enum="FedCmMultipleRequestsRpMode" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the RP mode of two consecutive token requests. Recorded one sample
    every time when a new request is invoked while there is another one pending.
  </summary>
</histogram>

<histogram name="Blink.FedCm.NumRequestsPerDocument" units="count"
    expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the number of navigator.credentials.get() requests made in a
    document. Requests made when FedCM is disabled or when there is a pending
    FedCM request are not counted. Records at most one sample for every document
    where at least one navigator.credentials.get() request is made. No samples
    are recorded if the count is 0. The bucketing method used is
    base::UmaHistogramCounts100.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Popup.DialogType" enum="FedCmDialogType"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the dialog type whenever we open a popup/custom tab. Recorded once
    per popup/custom tab opened. Values 0-4 of the enum will not be recorded for
    this histogram.
  </summary>
</histogram>

<histogram name="Blink.FedCm.RpContext" enum="FedCmRpContext"
    expires_after="2026-12-27">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the RP Context used in a FedCM call. Records only when the RP
    Context flag is enabled.
  </summary>
</histogram>

<histogram name="Blink.FedCm.RpMode" enum="FedCmRpMode"
    expires_after="2026-12-20">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the RP mode of the FedCM API. Recorded once per API call together
    with Blink.FedCm.Status.RequestIdToken when the request is fulfilled (either
    resolved or rejected).
  </summary>
</histogram>

<histogram name="Blink.FedCm.RpParametersAndScopeState"
    enum="FedCmRpParameters" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether parameters or a non-default scope were specified in the
    FedCM call by the RP for any IDP. Records once per FedCM call when the
    request is initiated. Only recorded if parameters or non-default scopes were
    specified and FedCmAuthz is enabled.
  </summary>
</histogram>

<histogram name="Blink.FedCm.SegmentationPlatform.UserAction"
    enum="FedCmUserAction" expires_after="2026-12-20">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    The action taken by the user. Recorded when the FedCM UI is destroyed, if
    the UI shown uses segmentation platform's UI volume recommendation.
  </summary>
</histogram>

<histogram name="Blink.FedCm.SignInStatusSetToSignout.NetError"
    enum="NetErrorCodes" expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the NetError from the accounts list endpoint. This histogram is only
    recorded when the IDP Sign-In Status of an IDP is marked as signout as a
    result of the accounts list endpoint not returning any accounts.
  </summary>
</histogram>

<histogram name="Blink.FedCm.SignUp.PrivacyPolicyClicked" enum="BooleanHit"
    expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Recorded each time that the privacy-policy link in the FedCM prompt is
    clicked.
  </summary>
</histogram>

<histogram name="Blink.FedCm.SignUp.TermsOfServiceClicked" enum="BooleanHit"
    expires_after="2026-12-22">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Recorded each time that the terms-of-service link in the FedCM prompt is
    clicked.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Status.AccountsResponseInvalidReason"
    enum="FedCmAccountsResponseInvalidReason" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the reason why there is no valid account in the response. Recorded
    at most once per accounts fetch when the response is received.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Status.Csp" enum="FedCmCspStatus"
    expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>Records the result of CSP checks in the FedCM API.</summary>
</histogram>

<histogram name="Blink.FedCm.Status.Disconnect" enum="FedCmDisconnectStatus"
    expires_after="2026-12-28">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the status of a disconnect call to the FedCM API. Recorded once per
    IdentityCredential.disconnect() call, once the browser knows the result.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Status.IdpSigninMatch"
    enum="FedCmIdpSigninMatchStatus" expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the browser's knowledge of whether the user is signed-in to
    the IDP based on observing signin/signout HTTP headers matches the
    information returned by the accounts endpoint. Recorded at most once per
    navigator.credentials.get() call after sending the request to the accounts
    endpoint.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Status.MediationRequirement"
    enum="CredentialManagerMediationRequirement" expires_after="2026-12-28">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the mediation requirement of a request token call to the FedCM API.
    Records a sample when the FedCM call is completed, i.e. at the same time as
    Blink.FedCm.Status.RequestIdToken.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Status.RequestIdToken"
    enum="FedCmRequestIdTokenStatus" expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the status of a request token call to the FedCM API.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Status.SignInStateMatch"
    enum="FedCmSignInStateMatchStatus" expires_after="2026-12-22">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether user sign-in states between IDP and browser match. Records a
    sample after browser receives an account list from IDP prior to showing UI.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.AccountsDialogShownDuration2" units="ms"
    expires_after="2026-12-27">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when an accounts dialog is shown to when dialog is
    destroyed e.g. user selects an account, user closes the dialog, or the
    developer aborts the request. This duration includes the time when the
    accounts dialog is inactive e.g. user switches to a different tab. Samples
    are at most 10 minutes. Records a sample when an accounts dialog which is
    not the verifying UI for auto re-authentication is shown. In a previous
    definition, Blink.FedCm.Timing.AccountsDialogShownDuration, a sample was
    recorded when an accounts dialog (including the verifying UI) is shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.CancelOnDialog" units="ms"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when the accounts dialog is shown to when the user
    explicitly closes the dialog without selecting any account. Only records a
    sample when the user sees and *explicitly* closes the dialog. For instance,
    the accounts dialog being closed as a result of the user focusing a
    different part of the browser UI does not count as explicitly closing the
    dialog.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.ContinueOn.Response" units="ms"
    expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when an account is selected to when the continue_on
    response is received. Only records a sample if and when
    IdentityProvider.resolve is called from the continue_on popup. Recorded at
    most once per FedCM call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.ContinueOn.TurnaroundTime" units="ms"
    expires_after="2027-09-05">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the overall time from when the API is called to when the token is
    received through IdentityProvider.resolve. Only records a sample if and when
    IdentityProvider.resolve is called from the continue_on popup. Recorded at
    most once per FedCM call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.ContinueOnDialog" units="ms"
    expires_after="2026-12-20">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when the accounts dialog is shown to when the user
    presses the Continue button. Only records a sample when the user sees and
    taps the &quot;Continue&quot; button on the dialog.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.Disconnect" units="ms"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when the disconnect() request is received by the
    browser process to the time in which it is completed, e.g. right before
    sending the response back to the renderer process. Records one sample for
    every disconnect call which sends a disconnect request.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.IdTokenResponse" units="ms"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when the user presses the Continue button to when the
    token response is received. Only records a sample when the token response is
    received.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.MismatchDialogShownDuration" units="ms"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when a mismatch dialog is shown to when user
    triggers IDP sign-in pop-up window or when dialog is destroyed e.g. user
    closes the dialog. This duration includes the time when the mismatch dialog
    is inactive e.g. user switches to a different tab. Samples are at most 10
    minutes. Records a sample when a mismatch dialog is shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.ShowAccountsDialog" units="ms"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a call to the API was made to when the accounts
    dialog is ready to be shown. Only records a sample when the dialog is shown.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.ShowAccountsDialogBreakdown.AccountsFetch"
    units="ms" expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when an accounts request is made to when the accounts
    fetch response is received. Records one sample whenever it's ready to show
    the accounts UI which could happen multiple times per API call.
  </summary>
</histogram>

<histogram
    name="Blink.FedCm.Timing.ShowAccountsDialogBreakdown.ClientMetadataFetch"
    units="ms" expires_after="2027-02-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a client metadata request is made to when the
    fetch response is received. Records one sample whenever it's ready to show
    the accounts UI which could happen multiple times per API call. If the
    client metadata request is skipped, e.g. for returning users, records a zero
    instead.
  </summary>
</histogram>

<histogram
    name="Blink.FedCm.Timing.ShowAccountsDialogBreakdown.WellKnownAndConfigFetch"
    units="ms" expires_after="2027-02-14">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a call to the API was made to when the well-known
    and config files are fetched. Records one sample whenever it's ready to show
    the accounts UI which could happen multiple times per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.TurnaroundTime" units="ms"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the overall time from when the API is called to when the token
    response is received. Only records a sample when the token response is
    received.
  </summary>
</histogram>

<histogram name="Blink.FedCm.Timing.WellKnownAndConfigFetch" units="ms"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a call to the API was made to when the well-known
    and config files fetch response are received. Records a sample when the
    response is received. Recorded at most once per API call. The histogram
    Blink.FedCm.Timing.ShowAccountsDialogBreakdown.WellKnownAndConfigFetch is
    different because it only records the fetch time when the accounts dialog is
    ready to show. i.e. there could be much fewer samples recorded in that
    histogram because many well-known and config file fetches take too much time
    such that the API call would fail without fetching the rest endpoints. i.e.
    the distribution of the two histograms could be statically different.
  </summary>
</histogram>

<histogram name="Blink.FedCm.UseOtherAccountResult"
    enum="FedCmUseOtherAccountResult" expires_after="2026-12-22">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the user clicking on the &quot;use other
    account&quot; button in FedCM. Recorded once per API call when the user
    attempts to login with a new account via the &quot;use other account&quot;
    button, when the request is fulfilled (either resolved or rejected). Only
    considers the last &quot;use other account&quot; button clicked if there are
    multiple attempts.
  </summary>
</histogram>

<histogram name="Blink.FedCm.UserInfo.NumAccounts" enum="FedCmNumAccounts"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the number of accounts returned by a getUserInfo() call. Records
    once per request with a successful accounts fetch. Records when the request
    is completed.
  </summary>
</histogram>

<histogram name="Blink.FedCm.UserInfo.Status" enum="FedCmUserInfoStatus"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the status of a getUserInfo() call. Records once per request when
    the request is completed, right before running the callback.
  </summary>
</histogram>

<histogram name="Blink.FedCm.UserInfo.TimeToRequestCompleted" units="ms"
    expires_after="2027-09-05">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a getUserInfo() call is received on the browser
    process to the time it is completed. Records once per request with a
    successful accounts fetch. Records when the request is completed.
  </summary>
</histogram>

<histogram name="Blink.FedCm.VerifyingDialogResult"
    enum="FedCmVerifyingDialogResult" expires_after="2026-12-28">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the outcome of the verifying dialog. Recorded once per verifying
    dialog shown when the FedCM call is completed, i.e. at the same time as
    Blink.FedCm.Status.RequestIdToken.
  </summary>
</histogram>

<histogram name="Blink.FedCm.WebContentsActive" enum="Boolean"
    expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the WebContents is active when the browser is ready to show
    the accounts dialog to the user. Records at most one sample per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.WebContentsVisible" enum="Boolean"
    expires_after="2026-10-25">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the WebContents is visible when the browser is ready to show
    the accounts dialog to the user. Records at most one sample per API call.
  </summary>
</histogram>

<histogram name="Blink.FedCm.WebIdentitySubdomain.DiscoverySucceeded"
    enum="BooleanSuccess" expires_after="2027-05-08">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <owner>sureshpotti@microsoft.com</owner>
  <summary>
    Recorded once per FedCM well-known discovery attempt when the
    FedCmWebIdentitySubdomain feature is enabled. True if the
    https://web-identity.well-known.&lt;eTLD+1&gt;/.well-known/web-identity
    fetch returned a usable response (success ParseStatus and
    provider_urls.size() &lt;= 1). False if it fell back to the apex
    https://&lt;eTLD+1&gt;/.well-known/web-identity URL due to fetch failure
    (network error, malformed JSON, or non-dictionary response) or more than one
    provider_url.
  </summary>
</histogram>

<histogram name="Blink.FedCm.WellKnownInvalidDueToClientMetadata"
    enum="BooleanHit" expires_after="2027-02-23">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records a 1 whenever a FedCM API call includes a well-known file without
    accounts or login_url but where the config file has client_metadata. Records
    when the config and well-known files have been fetched.
  </summary>
</histogram>

<histogram name="Blink.FencedFrame.CreationOrNavigationOutcome"
    enum="FencedFrameCreationOutcome" expires_after="2026-12-23">
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <owner>averge@chromium.org</owner>
  <summary>
    Records creation and navigation outcomes for a fenced frame. This is written
    either when a fenced frame navigates successfully, or when some issue causes
    either the creation or navigation of a fenced frame to stop.
  </summary>
</histogram>

<histogram name="Blink.FencedFrame.FailedSandboxLoadInTopLevelFrame"
    enum="BooleanYesNo" expires_after="2026-08-04">
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <owner>lbrady@google.com</owner>
  <summary>
    If a fenced frame failed to load due to incorrectly set sandbox flags,
    records whether or not the fenced frame was attempting to be created in a
    top-level frame. This is written whenever a fenced frame creation fails due
    to sandbox flags not being permissive enough.
  </summary>
</histogram>

<histogram name="Blink.FencedFrame.IsFrameResizedAfterSizeFrozen"
    enum="BooleanYesNo" expires_after="2025-08-08">
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <owner>lbrady@google.com</owner>
  <summary>
    Records if a fenced frame's size is set after the size had been frozen. The
    size of a fenced frame is frozen once it navigates to a page, and results in
    the inner contents being scaled to fit the new dimensions without telling it
    the frame's new size. This is only logged up to one time throughout a fenced
    frame's life, and will not be logged if the size is never set after being
    frozen.
  </summary>
</histogram>

<histogram name="Blink.FencedFrame.IsOpaqueFrameSizeCoerced"
    enum="BooleanChanged" expires_after="2025-08-08">
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <owner>lbrady@google.com</owner>
  <summary>
    Records whether an opaque-ads fenced frame's size was changed because the
    provided size was not in the list of allowed sizes. This will not log
    anything for a default mode fenced frame. This will log when an opaque-ads
    fenced frame has its size frozen (which is triggered when it navigates to
    its first page).
  </summary>
</histogram>

<histogram name="Blink.FencedFrame.MandatoryUnsandboxedFlagsSandboxed"
    enum="WebSandboxFlags" expires_after="2026-08-04">
  <owner>shivanisha@chromium.org</owner>
  <owner>dom@chromium.org</owner>
  <owner>lbrady@google.com</owner>
  <summary>
    If a fenced frame failed to load due to incorrectly set sandbox flags,
    records which sandbox flags that should be unsandboxed ended up being
    sandboxed, causing the load to fail. This is written whenever a fenced frame
    creation fails due to sandbox flags not being permissive enough. If multiple
    sandbox flags are incorrectly set, it will log every sandbox flag that was
    not set correctly for each failed load.
  </summary>
</histogram>

<histogram name="Blink.Fetch.RequestResourceTime2{SchemeOrPreload}"
    units="microseconds" expires_after="2027-02-07">
  <owner>cduvall@chromium.org</owner>
  <owner>csharrison@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The total microseconds spent in ResourceFetcher::requestResource for
    {SchemeOrPreload}.

    This histogram only records metrics on machines with high-resolution clocks.

    Warning: this histogram was expired from 2023-05-02 to 2023-12-12; data may
    be missing.
  </summary>
  <token key="SchemeOrPreload">
    <variant name="" summary="all URLs"/>
    <variant name=".Data" summary="data URLs"/>
    <variant name=".Preload" summary="preloaded URLs"/>
    <variant name=".TransparentPlaceholderImage"
        summary="transparent placeholder images"/>
  </token>
</histogram>

<histogram name="Blink.FetchQueuedPreloadsTime.{FrameType}.{IsInitial}"
    units="ms" expires_after="2025-10-26">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time it takes to fetch queued subresource preloads for a
    document in a {FrameType}. Logged every time preloads need to be fetched
    after the {IsInitial} preload scan.

    Warning: this histogram was expired from 2023-05-29 to 2023-12-04; data may
    be missing.
  </summary>
  <token key="FrameType">
    <variant name="MainFrame"/>
    <variant name="Subframe"/>
  </token>
  <token key="IsInitial">
    <variant name="Initial"/>
    <variant name="NonInitial"/>
  </token>
</histogram>

<histogram name="Blink.Fonts.BackgroundDecodeTime" units="microseconds"
    expires_after="2024-08-17">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Time spent for decoding the fonts on the background thread. Recorded when a
    font resource creates its decoded data. This histogram is only logged in
    platforms with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.Fonts.DecodeTime" units="microseconds"
    expires_after="2027-01-10">
  <owner>gjc@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Time spent for decoding the fonts. Recorded when a font resource creates its
    decoded data. This histogram is only logged in platforms with
    high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.Fonts.FontServiceThread.MatchFamilyNameTime"
    units="microseconds" expires_after="2027-01-17">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Time spent identifying the best match for a font face to use given a family
    name and style, including the mojo calls. This is recorded right after the
    best match is found. This histogram is only logged in platforms with
    high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.Fonts.FontServiceThread.OpenStreamTime"
    units="microseconds" expires_after="2027-02-07">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Time spent opening a font file, including the mojo calls. This is recorded
    right after the font file is opened. This histogram is only logged in
    platforms with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.Fonts.LastResortAttemptsUntilStaticMatch"
    units="attempts" expires_after="2026-05-10">
  <owner>andresrperez@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Obsolete: rebucketed and renamed to LastResortAttemptsUntilStaticMatch2 in
    M144.

    Records how many attempts it took to find a last resort fallback font. This
    is attempted when no other specified font could be instantiated to render a
    character. The last resort font from the FontDescription is tried first, and
    then hardcoded system fonts if needed. This histogram counts those hardcoded
    fonts attempts. If no fallback is found, the overflow bucket is recorded.
  </summary>
</histogram>

<histogram name="Blink.Fonts.LastResortAttemptsUntilStaticMatch2"
    units="attempts" expires_after="2027-01-17">
  <owner>andresrperez@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records how many attempts it took to find a last resort fallback font. This
    is attempted when no other specified font could be instantiated to render a
    character. The last resort font from the FontDescription is tried first, and
    then hardcoded system fonts if needed. This histogram counts those hardcoded
    fonts attempts. If no fallback is found, the overflow bucket is recorded.

    Replaced Blink.Fonts.LastResortAttemptsUntilStaticMatch in M144 and is a
    re-bucketed version of that histogram.
  </summary>
</histogram>

<histogram name="Blink.Fonts.LastResortFallbackFound" enum="Boolean"
    expires_after="2027-01-17">
  <owner>andresrperez@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Records whether a last resort fallback font was found. This is attempted
    when no other specified font could be instantiated to render a character.
    The last resort font from the FontDescription is tried first, and then
    hardcoded system fonts if needed.
  </summary>
</histogram>

<histogram name="Blink.Fonts.MatchFamilyStyle.Duration" units="microseconds"
    expires_after="2027-06-15">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of SkFontMgr::matchFamilyStyle calls on the main
    thread. Recorded when a typeface is looked up by family name during font
    creation.

    This measures the latency of querying the operating system's font manager.
    For &quot;cold&quot; lookups (first time a font is loaded), this includes
    disk I/O to read and parse font files, and potential sandbox/IPC overhead on
    platforms that use a font service (such as Windows, macOS, or Linux). For
    &quot;warm&quot; lookups, this measures the fast Skia-side in-memory
    cache-resolution latency.

    Note that this metric is only recorded on clients with high-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.Fonts.MatchFamilyStyleCharacter.Duration"
    units="microseconds" expires_after="2027-06-15">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the duration of SkFontMgr::matchFamilyStyleCharacter calls on the
    main thread. Recorded when a fallback typeface is looked up for a specific
    character or locale.

    This measures the latency of system font fallback resolution. For
    &quot;cold&quot; lookups, this includes the expensive OS-level scanning of
    multiple system font character maps (cmaps) to find a supporting font, disk
    I/O, and potential sandbox/IPC overhead on platforms that use a font service
    (such as Windows, macOS, or Linux). For &quot;warm&quot; lookups, it
    measures the fast Skia-side in-memory cache-resolution latency.

    Note that this metric is only recorded on clients with high-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.Fonts.VariableFontsRatio"
    enum="WebFontInstantiationResult" expires_after="2026-10-26">
  <owner>drott@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <summary>
    Tracks adoption ratio of variable fonts compared to conventional (in the
    sense of non-variable) web fonts. Recorded at the time of instantiating a
    Skia SkTypeface from the successfully decoded web font blob.
  </summary>
</histogram>

<histogram
    name="Blink.ForcedStyleAndLayout.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-01-03">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing layouts due to Javascript value requests. Specifically,
    time spent in Blink Document::UpdateStyleAndLayout.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.Frame.GetCanonicalUrlRendererTime" units="microseconds"
    expires_after="2023-09-03">
  <owner>carlosk@chromium.org</owner>
  <owner>harringtond@chromium.org</owner>
  <owner>feed@chromium.org</owner>
  <summary>
    Android only: The time spent by the renderer main thread to collect and send
    back to the browser process a web page's canonical link. This is recorded
    every time the renderer fulfills a request for this information. This
    histogram is only logged in platforms with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.HandleInputEvents.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent processing rAF-aligned input during a main frame update.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.History.VisitedLinks.IsLinkStyledAsVisited"
    enum="Boolean" expires_after="2027-03-01">
  <owner>kyraseevers@chromium.org</owner>
  <owner>tiffanysong@google.com</owner>
  <summary>
    Each time we determine an anchor element's VisitedLinkState, we record
    whether the link will be styled as visited. :visited is true and :unvisited
    is false.
  </summary>
</histogram>

<histogram name="Blink.History.VisitedLinks.IsSaltFromNavigationThrottle"
    enum="Boolean" expires_after="2027-03-01">
  <owner>kyraseevers@chromium.org</owner>
  <owner>tiffanysong@google.com</owner>
  <summary>
    Each time we add an origin, salt pair to VisitedLinkReader, this histogram
    records whether the salt came from the VisitedLinkNavigationThrottle or the
    VisitedLinkNotificationSink IPC. The VisitedLinkNavigationThrottle salts are
    true and the VisitedLinkNotificationSink salts are false.
  </summary>
</histogram>

<histogram
    name="Blink.HitTestDocumentUpdate.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent preparing the document for hit testing during a main frame
    update. It does not compute the actual hit test time, rather the style,
    layout, compositing, etc time to prepare for the test.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.AbortedParseSize" units="bytes"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Number of bytes after which the html fast-path parser aborted. This does not
    count the bytes the fast-path parser did not look at. We measure this since
    aborting the fast-path and falling back to the normal parser is wasted
    effort. This is recorded after every invocation of Element::setInnerHTML.

    WARNING: This histogram was expired from 2024-04-28 to 2026-04-09; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.AbortedParseTime2"
    units="microseconds" expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The amount of time the innerHTML fast-path parser took before reaching input
    it could not handle. This is recorded when Element::setInnerHTML is called,
    and at the moment when the input it can't handle is reached.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2024-04-28 to 2026-04-09; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.ParseResult"
    enum="InnerHTMLFastPathParserParseResult" expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Captures the result of the innerHTML fast-path parser. This is recorded
    every time Element::setInnerHTML is called and only if the innerHTML
    fast-path parser is enabled.

    WARNING: This histogram was expired from 2025-03-30 to 2026-04-09; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.SuccessfulParseSize" units="bytes"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Number of bytes successfully parsed by the innerHTML fast-path parser. This
    is recorded if the innerHTML fast-path parser completes successfully and is
    logged at the end of parsing the content supplied to Element::setInnerHTML.

    WARNING: This histogram was expired from 2024-04-28 to 2026-04-09; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.SuccessfulParseTime2"
    units="microseconds" expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time it takes for the innerHTML fast-path parser to complete processing
    text from Element::setInnerHTML. This is recorded if fast-path innerHTML is
    enabled, and completes successfully.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2024-04-28 to 2026-04-09; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.TotalParseTime2" units="microseconds"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The total time it takes to complete parsing of Element::setInnerHTML. This
    includes the time taken by the fast-path parser (even if it failed). This is
    recorded after every invocation of Element::setInnerHTML.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLFastPathParser.{Type}.CompositeMaskV2"
    enum="InnerHTMLFastPathParserUnsupportedTagType" expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    This is logged if the innerHTML fast-path parser fails because an {Type} tag
    is encountered. This value is an aggregate (bitmask) that identifies which
    {Type} groupings were encountered. Ideally a single bitmask would be logged,
    but the dashboard doesn't deal well with large bitmasks. The individual
    groupings are recorded via one of Blink.HTMLFastPathParser.*.Mask0-3 (* is
    one of UnsupportedContextTag or UnsupportedTag).

    WARNING: This histogram was expired from 2023-12-07 to 2026-04-09; data may
    be missing.
  </summary>
  <token key="Type">
    <variant name="UnsupportedContextTag" summary="unsupported context"/>
    <variant name="UnsupportedTag" summary="unsupported"/>
  </token>
</histogram>

<histogram name="Blink.HTMLFastPathParser.{Type}.Mask{MaskBit}V2" units="tags"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    See description of Blink.HTMLFastPathParser.*.CompositeMask for an overview
    of this including when it is logged. The value is a bitmask that identifies
    which tags were encountered:

    {MaskBit}

    WARNING: This histogram was expired from 2023-12-07 to 2026-04-09; data may
    be missing.
  </summary>
  <token key="Type">
    <variant name="UnsupportedContextTag" summary="unsupported context"/>
    <variant name="UnsupportedTag" summary="unsupported"/>
  </token>
  <token key="MaskBit">
    <variant name="0"
        summary="bit 0: img. bit 1: aside. bit 2: u. bit 3: hr. bit 4: h. bit
                 5: em. bit 6: The tag is not a known html tag. bit 7: The
                 tag is a known html tag, but is not categorized."/>
    <variant name="1"
        summary="bit 0: form. bit 1: Any one of article, header, footer, or
                 section. bit 2: nav. bit 3: iframe. bit 4: Any one of table,
                 tr, td, tbody, or th. bit 5: Any of of dl, dt, or dd. bit 6:
                 ins bit 7: blockquote."/>
    <variant name="2"
        summary="bit 0: center. bit 1: small. bit 2: font. bit 3: fieldset.
                 bit 4: textarea. bit 5: time. bit 6: svg. bit7: body."/>
  </token>
</histogram>

<histogram name="Blink.HTMLParsing.ChunkCount4" units="chunks"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    The number of chunks parsed while loading a page. Each chunk represents a
    piece of the HTML content that can be loaded without blocking or yielding.
    This is only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.InputCharacterCount4" units="characters"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    The number of characters processed while parsing a document during page
    load. This is computed as the sum of all the characters appended to the
    input string sequence for the parser. This is only reported for http/https
    urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.IsParserPausingCalledAfterResuming"
    enum="Boolean" expires_after="2026-04-26">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether pausing the parser is attempted after resuming the parser.
    This can happen when the site sends a signal to pause the parser after
    sending another signal to resume the parser.

    This is recorded when the signal to pause the parser is dispatched via the
    user timing. This is measured for the experiment in crbug.com/416543903.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.IsParserResumingCalledBeforePausing"
    enum="Boolean" expires_after="2026-04-26">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether the parser is resumed before it's actually paused. This can
    happen when the site sends a signal to resume the parser without sending
    another signal to pause the parser.

    This is measured for the experiment in crbug.com/416543903.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.ParsingTimeMax4" units="microseconds"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    While parsing a page, the maximum time used to parse a single chunk before
    being blocked, yielding or completing, in microseconds. This does not
    include time spent executing script. This is only reported for http/https
    urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.ParsingTimeMin4" units="microseconds"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    While parsing a page, the minimum time used to parse a single chunk before
    being blocked, yielding or completing, in microseconds. This does not
    include time spent executing script. This is only reported for http/https
    urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.ParsingTimeTotal4" units="microseconds"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    While parsing a page, the total amount of time spent in the
    HTMLDocumentParser performing parsing, in microseconds. This does not
    include time spent executing script. This is only reported for http/https
    urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.PreloadRequestCount" units="count"
    expires_after="2026-08-30">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The total number of queued preload requests created by the preload scanner
    when HTMLDocumentParser performing parsing. This is only reported for
    http/https urls. This is reported at the parse end.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.ResumedByUserTiming" enum="Boolean"
    expires_after="2026-04-26">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records whether the parser yield is resumed by the user timing signal via
    performance.mark(), or resumed by the scheduled timeout.

    This is measured for the experiment in crbug.com/416543903.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.TimeToDeferredPumpTokenizer4"
    units="microseconds" expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    The time between when the first content has been received by the
    HTMLDocumentParser and when parsing begins. This is effectively measuring
    the time between when SchedulePumpTokenizer() is called, and when the task
    runs that does the parsing. This is only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2024-12-24 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.TokensParsedAverage4" units="tokens"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the average number of tokens parsed across all chunks.
    This is only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.TokensParsedMax4" units="tokens"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the maximum number of tokens parsed as a chunk. This
    is only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2025-01-31 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.TokensParsedMin4" units="tokens"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the minimum number of tokens parsed as a chunk. This
    is only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2025-01-31 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.TokensParsedTotal4" units="tokens"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the total number of tokens parsed across all chunks.
    This is only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.YieldedCountByUserTiming" units="count"
    expires_after="2026-08-30">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The count how many times the parser is yielded by the signal from the site.
    This is triggered via performance.mark().

    This is measured for the experiment in crbug.com/416543903.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.YieldedTimeAverage4" units="microseconds"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the average time between parsing of two chunks, in
    microseconds. Will not be recorded if only one chunk was parsed. This is
    only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2025-01-31 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.YieldedTimeByUserTiming" units="ms"
    expires_after="2026-04-26">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The time between when the parser has been paused by the signal from the site
    and when it's resumed. Both pause and resume signals are triggered via
    performance.mark(). This is measured for the experiment in
    crbug.com/416543903.

    WARNING: This histogram was expired from 2025-02-01 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.YieldedTimeMax4" units="microseconds"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the maximum time between parsing of two chunks, in
    microseconds. Will not be recorded if only one chunk was parsed. This is
    only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2025-01-31 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.HTMLParsing.YieldedTimeMin4" units="microseconds"
    expires_after="2027-03-17">
  <owner>masonf@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <summary>
    While parsing a page, the minimum time between parsing of two chunks, in
    microseconds. Will not be recorded if only one chunk was parsed. This is
    only reported for http/https urls.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    WARNING: This histogram was expired from 2025-01-31 to 2025-09-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.ImageDecoders.ImageHasMultipleGeneratorClientIds"
    enum="ImageHasMultipleGeneratorClientIds" expires_after="2023-09-10">
  <owner>vmpstr@chromium.org</owner>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    This histogram records whether an image has been decoded by a single client
    or by multiple clients during decoding. For an image to be decoded, it is
    always requested by a client with a client_id. If an image has been
    requested by multiple clients, it would be decoded more than once. The
    histogram value is recorded at most two times per image (once per bucket).
    There will be overlap for two buckets, but we can get the the number of an
    image decodeded by only one client with the difference between two buckets.
    This helps us to know how often images get duplicated decoding in real life.
  </summary>
</histogram>

<histogram
    name="Blink.ImplCompositorCommit.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-11-29">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating layers in the compositor thread during a
    ProxyMain::BeginMainFrame. It is the actual work time, excluding time spent
    waiting for the compositor thread to begin.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.IntersectionObservation.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-01-03">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.IntersectionObservationInternalCount.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="count" expires_after="2026-09-12">
  <owner>szager@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Number of IntersectionObserver computations for blink-internal consumers
    that were performed during the course of a single main frame.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.IntersectionObservationJavascriptCount.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="count" expires_after="2026-09-12">
  <owner>szager@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Number of IntersectionObserver computations for javascript consumers that
    were performed during the course of a single main frame.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.JavascriptDocumentUpdate.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent preparing the document to answer a Javascript API query or
    request. Examples include scrool offset requests, queries of layout
    dimensions, SVG path queries, etc. Includes time spent in style update and
    layout, or via EnsurePaintLocationDataValidForNode. Some of these calls may
    be servicing internal needs, but we have no way to disambiguate those from
    JS driven activity.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.JavascriptIntersectionObserver.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle where the observation is due to a Javascript request. Recorded
    when an intersection observation is made for the Javascript reason.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.Jxl.DecodeThroughput" units="megapixels/second"
    expires_after="2027-02-15">
  <owner>veluca@chromium.org</owner>
  <owner>helmut@januschka.com</owner>
  <owner>
    src/third_party/blink/renderer/platform/image-decoders/jxl/OWNERS
  </owner>
  <summary>
    JXL pixel decode throughput. A sample is recorded when each JXL frame
    finishes decoding, and the decode time includes only time spent inside
    jxl-rs.
  </summary>
</histogram>

<histogram name="Blink.KeyboardLock.MethodCalled" enum="KeyboardLockMethods"
    expires_after="2023-06-30">
  <owner>joedow@chromium.org</owner>
  <owner>garykac@chromium.org</owner>
  <summary>
    Records each call to the navigator.keyboard{Lock|Unlock} methods.
  </summary>
</histogram>

<histogram name="Blink.Layout.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-01-03">
  <owner>pdr@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating layout in the Blink document lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.LazyLoadIntersectionObserver.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle where the observation is due to a Lazy Image Loading request.
    Recorded when an intersection observation is made to determine when a lazy
    loaded image should be loaded.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.LCPP.BoostImagePriorityReason"
    enum="BoostImagePriorityReason" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the reason for the image boost when image fetch priority was
    increased in ResourceFetcher. Currently there are two major ways to increase
    the image fetch priority. This UMA helps us to understand which way is more
    common.
  </summary>
</histogram>

<histogram name="Blink.LCPP.CrossSiteFontUrls" units="count"
    expires_after="2025-08-10">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of the reported font URLs in the cross site.

    This metric is emitted when predicted font URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
</histogram>

<histogram name="Blink.LCPP.DeferUnusedPreload.DeferredResourceCount"
    units="count" expires_after="2026-05-03">
  <owner>sisidovski@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the total count of preloads, which are deferred to load based on the
    potentially unused preload signals from the LCP Critical Path Predictor
    (LCPP) database.

    This metric is recorded at the same time when
    &quot;Renderer.Preload.UnusedResourceCount&quot; is recorded. That is
    scheduled to a few seconds later after the preload request is created.
  </summary>
</histogram>

<histogram name="Blink.LCPP.DeferUnusedPreload.DeferredResource{Trigger}"
    enum="ResourceType" expires_after="2025-10-26">
  <owner>sisidovski@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of deferred preloads per ResourceType. {Trigger} are
    recorded.

    This is recorded when deferred preloads starts loading.
  </summary>
  <token key="Trigger" variants="PreloadTrigger"/>
</histogram>

<histogram name="Blink.LCPP.DeferUnusedPreload.PredictionFailed{Trigger}"
    enum="ResourceType" expires_after="2025-11-16">
  <owner>sisidovski@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of deferred preloads per ResourceType. {Trigger} are
    recorded only when those were predicted as not used in the page, but
    actually used.

    This is recorded when deferred preloads starts loading.
  </summary>
  <token key="Trigger" variants="PreloadTrigger"/>
</histogram>

<histogram
    name="Blink.LCPP.DeferUnusedPreload.UnusedAtDeferredLoadTiming{Trigger}"
    enum="Boolean" expires_after="2025-10-26">
  <owner>sisidovski@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Indicates the prediction result. If true, the deferred preload is still not
    used at least at the timing when the scheduled loading task is executed (the
    actual timing is defined based on the kLCPPDeferUnusedPreloadTiming feature
    param), which means the prediction succeeded. If false, that means the
    prediction failed.

    This is recorded when deferred preloads starts loading. {Trigger} are the
    target.
  </summary>
  <token key="Trigger" variants="PreloadTrigger"/>
</histogram>

<histogram name="Blink.LCPP.FontFetch.{Condition}.ConnectionType"
    enum="NetworkConnectionType" expires_after="2025-10-13">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Record a connection type when there is fonts to be prefetched or preloaded
    according to the LCPP prediction.

    There is a configuration on the bandwidth limit. If the bandwidth is below
    the limit, an empty fonts list is returned. It is used for disabling the
    prefetch/preload.
  </summary>
  <token key="Condition">
    <variant name="Disabled"
        summary="disabled due to hitting the bandwidth limit"/>
    <variant name="Enabled"
        summary="enabled because above the bandwidth limit"/>
  </token>
</histogram>

<histogram name="Blink.LCPP.LCPElementLocatorSize" units="bytes"
    expires_after="2026-02-22">
  <owner>kouhei@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the size of the identified LCP element locator in bytes.

    The metric is emitted before the element locator is serialized to the LCP
    Critical Path Predictor (LCPP) database, so it can inform us if the current
    ElementLocator encoding scheme is reasonable in terms of its output size.
  </summary>
</histogram>

<histogram name="Blink.LCPP.LCPInfluencerUrlsCount" units="count"
    expires_after="2024-11-03">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the number of resources identified to be influencing the load of
    the LCP element.

    The metric is emitted before the influencer list is serialized to the LCP
    Critical Path Predictor (LCPP) database.
  </summary>
</histogram>

<histogram name="Blink.LCPP.LCPInfluencerUrlsMaxLength" units="bytes"
    expires_after="2024-11-03">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the size of the longest URL influencing the load of the LCP
    element.

    The metric is emitted before the influencer list is serialized to the LCP
    Critical Path Predictor (LCPP) database.
  </summary>
</histogram>

<histogram name="Blink.LCPP.LCPInfluencerUrlsPredictionMatchCount"
    units="count" expires_after="2024-11-03">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of URLs matched during a subsequent page load, from the
    set of URLs identified to be influencing the load of the LCP element.

    The metric is emitted as LCP Critical Path Predictor calculates dependencies
    of the current LCP candidate.
  </summary>
</histogram>

<histogram name="Blink.LCPP.LCPInfluencerUrlsPredictionMatchPercent" units="%"
    expires_after="2024-11-03">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the percent of matched LCP influencer URLs against the predicted
    set of URLs.

    The metric is emitted as LCP Critical Path Predictor calculates dependencies
    of the current LCP candidate.
  </summary>
</histogram>

<histogram
    name="Blink.LCPP.NavigationToStartPreload.MainFrame.{SubresourceType}.Time"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>yyanagisawa@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Record when the page's main frame starts preloading {SubresourceType}.
    Measures the duration between when the navigation starts, to when preloading
    subresource is started.
  </summary>
  <token key="SubresourceType">
    <variant name="EachSubresource" summary="each subresources"/>
    <variant name="FirstSubresource" summary="the first subresource"/>
  </token>
</histogram>

<histogram name="Blink.LCPP.PotentiallyLCPResourcePriorityBoosts2"
    units="count" expires_after="2027-02-14">
  <owner>kouhei@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the number of resources that got priority boost from LCPP signals
    for page loads with non-empty LCPP hint data.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. The metric would tell us how much LCP Critical
    Path Predictor (LCPP), is affecting page load in the wild.

    This metric is not emitted 1) when there are no LCPP signals, 2) when the
    document is not in an OutermostMainFrame, or 3) when the document URL is not
    a HTTP family.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PreconnectCount" units="count"
    expires_after="2026-09-13">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of actual preconncted origins for image element.

    The metric is emitted as LCP Critical Path Predictor finalizes LCP candidate
    dependencies.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PreconnectPredictionCount" units="count"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of origins preconnected using the LCPP prediction.

    This metric is emitted when predicted origins are appended to the
    PreconnectPrediction structure during PrepareForPageLoad.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PreconnectPredictionMatchCount" units="count"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of predicted preconnect origins that matched against the
    LCP image.

    The metric is emitted as LCP Critical Path Predictor finalizes LCP candidate
    dependencies. This metric should indicate &quot;1&quot; in the ideal case,
    i.e., exactly one prediction matched the actual LCP origin. Higher than one
    would indicate duplicate predictions and should not be normal.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PreconnectPredictionMatchPercent" units="%"
    expires_after="2027-04-01">
  <owner>chikamune@chromium.org</owner>
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the percent of LCP origins matched against the LCPP predicted
    preconnect origins.

    The metric is emitted as LCP Critical Path Predictor finalizes LCP candidate
    dependencies.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PrefetchFontCount" units="count"
    expires_after="2025-09-07">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of font URLs to be prefetched using the LCPP prediction.

    This metric is emitted when predicted font URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PrefetchSubresource.Count.SameSiteRatio" units="%"
    expires_after="2025-08-10">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Ratio of the same site subresource URLs in prefetching subresources using
    LCPP prewaming HttpDiskCache database.

    This metric is emitted when predicted subresources URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PrefetchSubresource.Count.{Site}" units="count"
    expires_after="2025-12-14">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of {Site} subresource URLs in prefetching subresources
    using LCPP prewaming HttpDiskCache database.

    This metric is emitted when predicted subresources URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
  <token key="Site">
    <variant name="CrossSite" summary="cross-site subresources"/>
    <variant name="SameSite" summary="same-site subresources"/>
  </token>
</histogram>

<histogram name="Blink.LCPP.PrefetchSubresource.DBBroken" enum="BooleanEnabled"
    expires_after="2025-12-14">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records whether LCP DB misses the type of subresource to be prefeteched. We
    expect this rarely happens except experiment starting, where the DB scheme
    changes.

    This metric is emitted when predicted subresources URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PreloadedFontCount" units="count"
    expires_after="2025-08-24">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of fetched font URLs to be preloaded in the renderer using
    the LCPP prediction.

    This metric is emitted just after the fonts are preloaded.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PrewarmHttpDiskCache.{PrewarmMethod}.CacheExists"
    enum="BooleanExists" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records whether prewarming HttpDiskCache successfully warmed up the disk or
    not. If the cache entry does not exist, false will be recorded. This is
    recorded on each HttpDiskCache prewarming attempt and only if the
    {PrewarmMethod} prewarming method was used.
  </summary>
  <token key="PrewarmMethod">
    <variant name="DownloadBody"/>
    <variant name="HeadersOnly"/>
  </token>
</histogram>

<histogram name="Blink.LCPP.PrewarmHttpDiskCacheURL.Count" units="count"
    expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Records the predicted subresource URL count that is predicted by the
    HttpDiskCachePrewarming feature. This is recorded on each navigation.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PrewarmHttpDiskCacheURL.Count.SameSiteRatio"
    units="%" expires_after="2026-05-17">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Ratio of the same site subresource URLs in the all reported subresource URLs
    in prewarming HttpDiskCache.

    This is recorded on each navigation.
  </summary>
</histogram>

<histogram name="Blink.LCPP.PrewarmHttpDiskCacheURL.Count.{Site}" units="count"
    expires_after="2026-05-17">
  <owner>yoichio@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of {Site} subresource URLs in prewarming HttpDiskCache
    learnt to local LCP database.

    This is recorded on each navigation.
  </summary>
  <token key="Site">
    <variant name="CrossSite" summary="cross-site subresources"/>
    <variant name="SameSite" summary="same-site subresources"/>
  </token>
</histogram>

<histogram name="Blink.LCPP.RecordedFontCount" units="count"
    expires_after="2025-08-10">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the number of web fonts that was fetched in the page and recorded
    to the LCPP database.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. Unlike Blink.LCPP.ReportedFontCount, this metric
    counts the number of fonts after filitering with the max fonts per site.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlHitCountForPagesWithFonts"
    units="count" expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Count the number of font URLs that hits the prediction using LCPP.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. Unlike Blink.LCPP.ReportedFontCount, this metric
    counts the number of fonts after filitering with the max fonts per site. If
    the page does not have web fonts, they are excluded from this metrics.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlMatchCount" units="count"
    expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of fetched font URLs that are already recorded in the LCPP
    database.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlMatchCountForPagesWithFonts"
    units="count" expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Count the number of font URLs that has already recorded in the LCPP
    database.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. Unlike Blink.LCPP.ReportedFontCount, this metric
    counts the number of fonts after filitering with the max fonts per site. If
    the page does not have web fonts, they are excluded from this metrics.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlPredictionHitPercent" units="%"
    expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Ratio of the font URLs that hits the prediction using LCPP out of all
    fetched fonts.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. If the page does not have web fonts, they are
    excluded from this metrics.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlPredictionHitPercentInRecordedFonts"
    units="%" expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Ratio of the font URLs that hits the prediction using LCPP out of fetched
    fonts to be recorded.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. Unlike Blink.LCPP.ReportedFontCount, this metric
    counts the number of fonts after filitering with the max fonts per site. If
    the page does not have web fonts, they are excluded from this metrics.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlPredictionMatchPercent" units="%"
    expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the percent of font URLs in the LCPP database against all fetched
    font URLs.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlReenterCountForPagesWithFonts"
    units="count" expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    The number of the font URLs that reentered to LCPP out of fetched fonts to
    be recorded.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. If the page does not have web fonts, they are
    excluded from this metrics.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlReenterPercentInRecordedFonts"
    units="%" expires_after="2025-10-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Ratio of the font URLs that reentered to LCPP out of fetched fonts to be
    recorded.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event. Unlike Blink.LCPP.ReportedFontCount, this metric
    counts the number of fonts after filitering with the max fonts per site. If
    the page does not have web fonts, they are excluded from this metrics.
  </summary>
</histogram>

<histogram name="Blink.LCPP.RecordedFontUrlsMaxLength" units="bytes"
    expires_after="2026-04-26">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the longest font URL that was fetched in the page and recorded to
    the LCPP database.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event.
  </summary>
</histogram>

<histogram name="Blink.LCPP.ReportedFontCount" units="count"
    expires_after="2025-06-01">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Measures the number of web fonts that was fetched in the page.

    This metric is emitted for every page load when it is about to emit
    &quot;onload&quot; event.
  </summary>
</histogram>

<histogram name="Blink.LCPP.SameSiteFontUrlRatio" units="%"
    expires_after="2025-08-10">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Ratio of the same site font URLs in the all reported font URLs.

    This metric is emitted when predicted font URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
</histogram>

<histogram name="Blink.LCPP.SameSiteFontUrls" units="count"
    expires_after="2025-08-10">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>
    src/third_party/blink/renderer/core/lcp_critical_path_predictor/OWNERS
  </owner>
  <summary>
    Counts the number of the reported font URLs in the same site.

    This metric is emitted when predicted font URLs are appended to the
    PreconnectPrediction structure for prefetching.
  </summary>
</histogram>

<histogram name="Blink.LinkHeader.LoadLinksFromHeaderMode"
    enum="LoadLinksFromHeaderMode" expires_after="2027-02-07">
  <owner>tnak@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Counts usage of Link header in HTTP responces to subresource fetches. This
    histogram are recorded when a HTTP responce with Link headers is received.
    For details, see PreloadHelper::LoadLinksFromHeader().
  </summary>
</histogram>

<histogram name="Blink.MainFrame.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-01-03">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time between a BeginMainFrame and paint results commit in Blink.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.MediaIntersectionObserver.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle where the observation is for a media element. Recorded when an
    intersection observation is made attributed to a media element (such as
    video auto-play).

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.CrossDocumentCachedResource3"
    enum="ResourceType" expires_after="2027-01-17">
  <owner>gjc@chromium.org</owner>
  <owner>blink-network-dev@chromium.org</owner>
  <summary>
    Type of cached non-static resources reused across Documents when loading a
    new document in the same renderer. Recorded by the ResourceFetcher when a
    resource is requested for a new document and is not static. If the resource
    is available from the memory cache and previously loaded by a different
    document, the resource will be considered as reused. Repetitive requests to
    the same url in a document will be counted only once.
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.PageSavedResourceStrongReferenceSize2"
    units="count" expires_after="2026-07-05">
  <owner>gjc@chromium.org</owner>
  <owner>blink-network-stack@chromium.org</owner>
  <summary>
    Size of the resource strong references saved to the memory cache. Recorded
    when the user navigates to a newpage under the same origin. Recorded only
    with feature flag MemoryCacheStrongReference.
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy2.AsyncScript"
    enum="RevalidationPolicy" expires_after="2026-11-15">
  <owner>hiroshige@chromium.org</owner>
  <owner>lizeb@chromium.org</owner>
  <owner>gjc@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    RevalidationPolicy used for non-preloading requests of async and defer
    scripts. https://crbug.com/1043679 https://crbug.com/1376866 Warning: this
    histogram was expired from 2021/10/25 to 2022/12/09; data may be missing.
  </summary>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy2.Dead.{ResourceType}"
    enum="RevalidationPolicy" expires_after="2026-11-29">
  <owner>hiroshige@chromium.org</owner>
  <owner>gjc@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    RevalidationPolicy used for requests that hit Resource only referenced from
    MemoryCache for each resource type ({ResourceType}).
    https://crbug.com/579496 Requests counted by this are also counted by
    Blink.MemoryCache.RevalidationPolicy2 or
    Blink.MemoryCache.RevalidationPolicy2.Preload. https://crbug.com/1376866
  </summary>
  <token key="ResourceType" variants="ResourceType"/>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy2.Preload.{ResourceType}"
    enum="RevalidationPolicy" expires_after="2026-11-29">
  <owner>hiroshige@chromium.org</owner>
  <owner>gjc@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    RevalidationPolicy used for preloading requests for each resource type
    ({ResourceType}). https://crbug.com/579496 https://crbug.com/1376866
  </summary>
  <token key="ResourceType" variants="ResourceType"/>
</histogram>

<histogram name="Blink.MemoryCache.RevalidationPolicy2.{ResourceType}"
    enum="RevalidationPolicy" expires_after="2026-11-29">
  <owner>hiroshige@chromium.org</owner>
  <owner>gjc@chromium.org</owner>
  <owner>loading-dev@chromium.org</owner>
  <summary>
    RevalidationPolicy used for non-preloading requests for each resource type.
    https://crbug.com/579496 https://crbug.com/1376866
  </summary>
  <token key="ResourceType" variants="ResourceType"/>
</histogram>

<histogram
    name="Blink.MemoryCache.TotalTakenTimeForDidLoadResourceFromMemoryCache"
    units="microseconds" expires_after="2027-01-10">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Total time spent processing
    `ResourceFetcher::DidLoadResourceFromMemoryCache()` until the document
    parsing is finished in the renderer process. This is recorded on each
    navigation for http or https URLs in OutermostMainFrame. The UMA is reported
    when the document finishes parsing.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.MobileMetrics.BadTapTargetRatioExtractionSucceed"
    enum="Boolean" expires_after="2023-05-07">
  <owner>kumagi@google.com</owner>
  <owner>gaul@google.com</owner>
  <owner>paint-dev@google.com</owner>
  <summary>
    Whether element extraction phase succeed without consuming entire 4ms time
    budget in MobileFriendlinessChecker::ComputeBadTapTargetsRatio() evaluation.
    This metric recorded at 5 seconds after first MainFrame's commit and
    periodically every 1 minutes after that.
  </summary>
</histogram>

<histogram name="Blink.ModelContext.DelayedToolCount" units="count"
    expires_after="2027-03-10">
  <owner>mfoltz@chromium.org</owner>
  <owner>agentic-web-platform-team@google.com</owner>
  <summary>
    Records the total number of tools registered with document.modelContext
    after some delay after the first registration. This is recorded once per top
    level document. It provides an approximate number of tool registrations,
    assuming that declarative tool registrations happen on the main document
    load, followed by some imperative tool registrations in script.
  </summary>
</histogram>

<histogram name="Blink.Network.DataUrlLength{Type}" units="characters"
    expires_after="2027-01-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The total length of {Type} data URLs. This is recorded per resource request
    when the parsing is completed.

    Warning: this histogram was expired from 2025-03-28 to 2025-06-25; data may
    be missing.
  </summary>
  <token key="Type">
    <variant name="" summary=""/>
    <variant name=".Image" summary="image"/>
  </token>
</histogram>

<histogram name="Blink.Network.ParseDataURLTime{Type}{CharacterCount}"
    units="microseconds" expires_after="2026-09-27">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    The total microseconds spent in network_utils::ParseDataURL and is recorded
    per resource request for {CharacterCount} of {Type} when the parsing is
    completed.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="Type">
    <variant name="" summary="all types"/>
    <variant name=".Image" summary="image type"/>
  </token>
  <token key="CharacterCount">
    <variant name="" summary="all data URLs"/>
    <variant name=".Over100000Char"
        summary="data URLs of over 100000 characters"/>
    <variant name=".Under1000Char" summary="data URLs of 0 to 1000 characters"/>
    <variant name=".Under100000Char"
        summary="data URLs of 1000 to 100000 characters"/>
  </token>
</histogram>

<histogram name="Blink.NotificationManager.GetPermissionStatusTime" units="ms"
    expires_after="2024-01-21">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <summary>
    The time taken to query the notification permission status. This is recorded
    each time a sync call is made.
  </summary>
</histogram>

<histogram name="Blink.OffscreenCanvas.NewOffscreenCanvas" enum="Boolean"
    expires_after="2025-06-08">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Records the creation of a new offscreen canvas in OffscreenCanvas::Create.
  </summary>
</histogram>

<histogram name="Blink.OffscreenCanvas.SqrtNumberOfPixels" units="sqrt(pixels)"
    expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Stores the square root of the number of pixels in a new or resized offscreen
    canvas. Emitted from CanvasRenderingContextHost::RecordCanvasSizeToUMA.
  </summary>
</histogram>

<histogram name="Blink.OffscreenCanvas.TransferControlToOffscreen"
    enum="BooleanSuccess" expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>Records a call to transfer a canvas offscreen.</summary>
</histogram>

<histogram name="Blink.OffscreenCanvas.Transferred" enum="Boolean"
    expires_after="2025-04-01">
  <owner>aaronhk@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <summary>
    Records when an offscreen canvas has been transferred from the main thread
    to a worker.
  </summary>
</histogram>

<histogram name="Blink.Overflow.ReplacedElementAreaOutsideContentRect"
    units="pixels" expires_after="2023-11-12">
  <owner>khushalsagar@chromium.org</owner>
  <owner>vmpstr@chromium.org</owner>
  <summary>
    Computes the area of img, video or canvas elements which is painted outside
    the content rect if 'overflow' property is respected on these elements.
  </summary>
</histogram>

<histogram name="Blink.Paint.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-01-03">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating paint in the Blink document lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.ParseStyleSheet.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-02-07">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent parsing style sheets for a document. Only recorded when the
    CSSParserContext has a document available.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.PermissionElementIntersectionObserver.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-04-26">
  <owner>tungnh@chromium.org</owner>
  <owner>src/components/permissions/PERMISSIONS_OWNERS</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing IntersectionObserver observations in the Blink document
    lifecycle where the observation is for gathering information about
    permission elements within the viewport. Recorded when an intersection
    observation attributed to permission element is updated.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram
    name="Blink.PossibleSynchronizedScrollCount2.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="count" expires_after="2024-06-01">
  <owner>vollick@chromium.org</owner>
  <owner>flackr@chromium.org</owner>
  <summary>
    Counts whether a possible sync-scroll update is attempted during an
    animation update of the outermost main frame of a page (see
    sync_scroll_attempt_heuristic.h for details).

    We will only record a 1 when the heuristic detects a possible sync scroll
    (and we will also subsample further). This means PreFCP and PostFCP will
    only report ones, and only when subsampled.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.PreloadRequestStartDuration" units="microseconds"
    expires_after="2026-08-09">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time from the time when PreloadRequest::Start is called to when
    PreloadRequest::Start is finished.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.PreloadRequestWaitTime" units="ms"
    expires_after="2025-07-27">
  <owner>cduvall@chromium.org</owner>
  <owner>swarm-team@google.com</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time from the creation of a PreloadRequest to when
    PreloadRequest::Start is called. Logged for each PreloadRequest::Start call.

    Warning: this histogram was expired from 2023-10-22 to 2023-12-12; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.PrePaint.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-10-25">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating paint properties and paint invalidation in the Blink
    document lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.PrepareToStopParsingTime" units="ms"
    expires_after="2026-05-03">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time it takes to tokenize the HTML document, if necessary, and
    perform other tasks around parsing completion. Logged every time there is an
    update to the HTML document.
  </summary>
</histogram>

<histogram name="Blink.PumpTokenizerTime" units="ms" expires_after="2026-09-06">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Measures the time it takes to tokenize an HTML document in Blink. Collected
    once per update to HTML document.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.BackgroundResourceFetchSupportStatus"
    enum="BackgroundResourceFetchSupportStatus" expires_after="2025-09-14">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Records whether BackgroundURLLoader can handle the resource request, and the
    reason why it can't handle the request. Logged for every resource request
    from the page which is not controlled by a service worker.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.CodeFetchLatency" units="ms"
    expires_after="2026-12-27">
  <owner>olivierli@chromium.org</owner>
  <owner>leszeks@chromium.org</owner>
  <summary>
    Measures the time from when a code fetch is initiated to when the renderer
    starts processesing the result. Logged for every code fetch when the
    response is received.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.CompletionDelay3" units="ms"
    expires_after="2027-02-07">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Measures the time from when a resource request completes to when the
    renderer is notified. Logged for every resource request if the request has
    never been frozen.

    Warning: this histogram was expired from 2025-11-16 to 2026-04-02; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.CompletionTimeOutOfRange"
    enum="BooleanHit" expires_after="2027-07-01">
  <owner>suzukikeita@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Whether the completion time of a resource request is out of range. Emitted
    for every resource request when TimeTicks is consistent across processes.

    This histogram has been expired between 2025-12-06 and 2026-07-01, thus does
    not contain data for this period.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.DeferedRequestWaitingOnCodeCache"
    enum="Boolean" expires_after="2027-01-03">
  <owner>olivierli@chromium.org</owner>
  <owner>leszeks@chromium.org</owner>
  <summary>
    Measured on resource request completion for requests that queried the code
    cache. True if one of these operations was delayed waiting on a response
    from the code cache:

    1) Receiving a response 2) Receiving a redirect 3) Completing the request.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.RedirectDelay2" units="ms"
    expires_after="2027-02-07">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Measures the time from when a redirect from a resource request happens to
    when the renderer is notified. Logged for every resource request if the
    request has never been frozen.

    Warning: this histogram was expired from 2025-09-14 to 2026-04-02; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.ResponseDelay2" units="ms"
    expires_after="2026-12-27">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Measures the time from when a response from a resource request is started to
    when the renderer is notified. Logged for every resource request if the
    request has never been frozen.
  </summary>
</histogram>

<histogram name="Blink.ResourceRequest.StartDelay2" units="ms"
    expires_after="2027-02-07">
  <owner>horo@chromium.org</owner>
  <owner>net-dev@chromium.org</owner>
  <summary>
    Measures the time from when the renderer starts a resource request to when
    it is actually started on the network. Logged for every resource request if
    the request has never been frozen.

    Warning: this histogram was expired from 2026-01-18 to 2026-04-02; data may
    be missing.
  </summary>
</histogram>

<histogram
    name="Blink.ResourceRequest.WebUIBundledCachedMetadataHandler.ConsumeCache"
    enum="BooleanSuccess" expires_after="2025-12-06">
  <owner>tluk@chromium.org</owner>
  <owner>webui-everywhere@google.com</owner>
  <summary>
    Whether the cached metadata managed by a WebUIBundledCachedMetadataHandler
    was successfully consumed and not rejected by V8 during script compilation.
    Emitted immediately following WebUI script compilation started with the
    kConsumeCodeCache compile option. The value is expected to always be true.
    This histogram and associated code can be removed once this behavior has
    been confirmed.
  </summary>
</histogram>

<histogram
    name="Blink.ResourceRequest.WebUIBundledCodeCacheFetcher.DidReceiveCachedCode"
    enum="BooleanSuccess" expires_after="2025-12-06">
  <owner>tluk@chromium.org</owner>
  <owner>webui-everywhere@google.com</owner>
  <summary>
    Whether the the fetch request for WebUI bundled cached metadata completed
    successfully. Emitted immediately after the request to fetch the metadata
    from the resource bundle has completed.
  </summary>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.CommitToPresentationTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the time when commit stage of
    rendering completes to when the browser presents the next frame with the
    changes caused by the last event.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.EventCreationTimeToEventQueueTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the first event creation time
    (timeStamp) to when it was queued on the main thread.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.EventCreationTimeToProcessingStart.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the first event creation time
    (timeStamp) to when it was processed on the main thread. Traditionally, also
    referred to as Input Delay.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.EventCreationToLastProcessingEnd.NoFramePresented.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the total duration when no frame is presented, which
    is from the time when the first event is created to when the last event
    finishes processing. To get the total duration when a frame is presented,
    use Blink.Responsiveness.PerAnimationFrame.EventCreationToPresentationTime.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.EventCreationToPresentationTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the total duration between when the event is created
    until it is presented, which is the entire interaction duration.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.EventQueueTimeToCommit.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the total duration between when the event is queued
    on the main thread until commit, which is the duration on the main thread.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.EventQueueTimeToProcessingStart.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the time when the first event was
    queued on the main thread to when it was processed.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.FirstProcessingStartToLastProcessingEnd.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the time when the first event
    starts processing on the main thread to when the last event finishes
    processing.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.ProcessingEndToPresentationTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the time when the last event
    finishes processing on the main thread to when the browser presents the next
    frame with the changes caused by this event. Traditionally, also referred to
    as Presentation Delay.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.ProcessingEndToRenderStartTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the time when the last event
    finishes processing on the main thread to when the rendering starts.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.RenderStartTimeToCommitTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the duration from the time when the rendering starts
    to when commit stage of rendering completes.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.PerAnimationFrame.TotalUnaccountedEventProcessingTime.{PerAnimationFrameInteractionType}"
    units="ms" expires_after="2027-05-10">
  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.Responsiveness.PerAnimationFrame.* is a family of metrics representing
    the sub-parts (aka breakdowns) of Interactions. Reported per Animation Frame
    which includes at least one Event Timing which is a part of an interaction
    (as in INP). All subparts are based on Event Timing API measurements (and
    so, do not include continuous events, like scrolling).

    This subpart represents the total unaccounted duration (idle time) within
    the processing time range which is from the time when the first event starts
    processing on the main thread to when the last event finishes processing.

    The metric is reported for {PerAnimationFrameInteractionType}.
  </summary>
  <token key="PerAnimationFrameInteractionType"
      variants="PerAnimationFrameInteractionType"/>
</histogram>

<histogram
    name="Blink.Responsiveness.UserInteraction.MaxEventDuration.{InteractionType}"
    units="ms" expires_after="never">
<!-- expires-never: Supports guardrail metric debugging -->

  <owner>sullivan@chromium.org</owner>
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The duration of a single user interaction:
    https://web.dev/better-responsiveness-metric/#group-events-into-interactions

    This metric is emitted once for every interaction in the web contents
    {InteractionType}
  </summary>
  <token key="InteractionType">
    <variant name="AllTypes"
        summary="of all interaction types (keyboard, click, tap, drag). The
                 maximum event duration for the keydown, keypress, keyup,
                 pointerdown, pointerup, mousedown, mouseup, and click event
                 is reported."/>
    <variant name="Drag"
        summary="of type drag. The maximum event duration for the
                 pointerdown, pointerup, mousedown, mouseup, and click event
                 is reported."/>
    <variant name="Keyboard"
        summary="of type keyboard. The maximum event duration for the
                 keydown, keypress, and keyup event is reported."/>
    <variant name="TapOrClick"
        summary="of type click or tap. The maximum event duration for the
                 pointerdown, pointerup, mousedown, mouseup, and click event
                 is reported."/>
  </token>
</histogram>

<histogram name="Blink.ScanAndPreloadTime.{FrameType}.{IsInitial}" units="ms"
    expires_after="2027-02-07">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Blink.ScanAndPreloadTime2 is the newer one of this histogram, which records
    the time with microseconds.

    Measures the time it takes to scan and preload subresources for a document
    in a {FrameType}. Logged every time the {IsInitial} preload scan is
    performed.

    Warning: this histogram was expired from 2023-05-29 to 2023-12-04; data may
    be missing.
  </summary>
  <token key="FrameType">
    <variant name="MainFrame"/>
    <variant name="Subframe"/>
  </token>
  <token key="IsInitial">
    <variant name="Initial"/>
    <variant name="NonInitial"/>
  </token>
</histogram>

<histogram name="Blink.ScanAndPreloadTime2{Task}.{FrameType}.{IsInitial}"
    units="microseconds" expires_after="2027-01-03">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time it takes to {Task} for a document in a {FrameType}. Logged
    every time the {IsInitial} preload scan is performed.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="Task">
    <variant name="" summary="scan and preload subresources"/>
    <variant name=".Preload" summary="preload subresources"/>
    <variant name=".Scan" summary="scan"/>
  </token>
  <token key="FrameType">
    <variant name="MainFrame"/>
    <variant name="Subframe"/>
  </token>
  <token key="IsInitial">
    <variant name="Initial"/>
    <variant name="NonInitial"/>
  </token>
</histogram>

<histogram name="Blink.Script.AsyncScript.FromReadyToStartExecution.Time"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>yyanagisawa@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Record when async scripts or dynamically inserted scripts run. Measures the
    duration between when a script is ready to run, to when the script is about
    to run.
  </summary>
</histogram>

<histogram name="Blink.Script.InlineScriptCache.FetchResult"
    enum="InlineScriptCacheFetchResult" expires_after="2027-03-25">
  <owner>tnak@chromium.org</owner>
  <owner>chrome-loading@chromium.org</owner>
  <summary>
    The result of inline script cache fetch attempts. This is recorded for each
    inline script only if the inline script caching is enabled and cache fetch
    is not skipped (e.g., for small scripts).
  </summary>
</histogram>

<histogram name="Blink.Script.InlineScriptCache.FetchTime" units="ms"
    expires_after="2027-03-25">
  <owner>tnak@chromium.org</owner>
  <owner>chrome-loading@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent fetching an inline script cache from a worker thread. This is
    recorded for each inline script only if the inline script caching is
    enabled.
  </summary>
</histogram>

<histogram
    name="Blink.Script.PostTaskWithLowPriorityUntilTimeout.RaceTaskPriority"
    enum="RaceTaskPriority" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>yyanagisawa@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Record which task priority's task was run in
    `PostTaskWithLowPriorityUntilTimeout()` that uses LowerPriority task queue
    and NormalPriority task queue. This is recorded when the
    LowPriorityAsyncScriptExecution behavior is applied to async scripts.
  </summary>
</histogram>

<histogram name="Blink.Script.PostTaskWithLowPriorityUntilTimeout.Time"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>yyanagisawa@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Record when the LowPriorityAsyncScriptExecution behavior is applied to async
    scripts. Measures the duration between when a script is ready to run, to
    when the script is about to run.
  </summary>
</histogram>

<histogram
    name="Blink.Script.PostTaskWithLowPriorityUntilTimeout.Time.{RaceTaskPriority}"
    units="ms" expires_after="2027-01-10">
  <owner>chikamune@chromium.org</owner>
  <owner>yyanagisawa@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Record when the LowPriorityAsyncScriptExecution behavior is applied to async
    scripts, and {RaceTaskPriority} task was eventually run. Measures the
    duration between when a script is ready to run, to when the script is about
    to run.
  </summary>
  <token key="RaceTaskPriority">
    <variant name="LowerPriority"/>
    <variant name="NormalPriority"/>
  </token>
</histogram>

<histogram name="Blink.Script.SchedulingType" enum="ScriptSchedulingType"
    expires_after="2027-01-10">
  <owner>kouhei@chromium.org</owner>
  <owner>hiroshige@chromium.org</owner>
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Number of script elements for each scheduling type, recorded when each
    script loading reaches the #prepare-a-script state defined in the spec, with
    http or https request.

    Warning: this histogram was expired from 2018-12-31 to 2022-05-25; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.Script.SourceTextTime" units="microseconds"
    expires_after="2023-08-27">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The time spent generating the source text for a script resource. Logged when
    the source text is accessed for the first time. Emitted at most once per
    script resource.

    Note that clients without high-resolution clocks will report 0 for very
    short times.
  </summary>
</histogram>

<histogram
    name="Blink.ServiceDocumentUpdate.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent preparing the document to service browser driven behaviors.
    Examples include accessibility, intersection observer, display locking and
    spell checking. Includes time spent in style update and layout.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.SetCookieTime.AblationDelay" units="ms"
    expires_after="2026-03-01">
  <owner>elkurin@chromium.org</owner>
  <owner>chrome-owp-storage@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time (in ms) added to SetCookie operation from the CookieJar used for
    ablation study purpose.
  </summary>
</histogram>

<histogram name="Blink.SharedDictionary.Hint.Discovery"
    enum="SharedDictionaryHintType" expires_after="2027-01-10">
  <owner>wbjacksonjr@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Records how often a shared dictionary hint is discovered by the renderer,
    either via an HTML &quot;link&quot; tag or an HTTP Link header.

    The UMA is recorded before fetching the compression dictionary.
  </summary>
</histogram>

<histogram name="Blink.Sms.BackendAvailability"
    enum="WebOTPBackendAvailability" expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records how often the verification backend is unavailable for the WebOTP API
    and the corresponding reason. This is recorded once per OTP request.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.CrossDeviceFailure"
    enum="WebOTPCrossDeviceFailure" expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the reason why using the WebOTP API on desktop failed on the sharing
    path. It records one sample per invocation of the API.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.Infobar" enum="WebOTPServiceInfobarAction"
    expires_after="2027-06-01">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records how many times the infobar was called and how many times the infobar
    replaced a keyboard.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.Outcome" enum="WebOTPServiceOutcome"
    expires_after="2027-01-03">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>Records the result of a call to the WebOTP API.</summary>
</histogram>

<histogram name="Blink.Sms.Receive.SmsParsingStatus" enum="SmsParsingStatus"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the status of parsing an incoming SMS when using the WebOTP API. It
    records one sample per incoming SMS.

    Note: This metric does not cover cross-devices WebOTP.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeCancel" units="ms"
    expires_after="2027-06-01">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when the API is called to when the request is
    cancelled by the service due to duplicated requests or lack of delegate.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeCancelOnKeyboardDismissal" units="ms"
    expires_after="2027-06-01">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when the keyboard was replaced with an infobar
    until when the user clicked the cancel button.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeCancelOnSuccess" units="ms"
    expires_after="2027-06-01">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a successful SMS was retrieved to when the user
    presses the Cancel button.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeContinueOnSuccess" units="ms"
    expires_after="2027-06-01">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the time from when a successful SMS was retrieved to when the user
    presses the Continue button.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeSmsReceive" units="ms"
    expires_after="2027-02-02">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when the API is called to when an SMS has been
    successfully received.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeSuccess" units="ms"
    expires_after="2027-01-24">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when the API is called to when the user
    successfully receives the SMS and presses continue to pass the incoming SMS
    to the site and proceed with the SMS verification flow.
  </summary>
</histogram>

<histogram name="Blink.Sms.Receive.TimeUserCancel" units="ms"
    expires_after="2027-06-01">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records the duration from when the API is called to when the user
    successfully receives the SMS and presses &quot;Deny&quot; to terminate the
    SMS verification flow.
  </summary>
</histogram>

<histogram name="Blink.Sms.WebContentsVisibleOnReceive" enum="Boolean"
    expires_after="2027-01-17">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records whether the web contents that receives the OTP is visible or not for
    the UserConsent backend. Recorded at most once per API call when Chrome sees
    the OTP from the expected origin.
  </summary>
</histogram>

<histogram name="Blink.SpeculationRules.FetchTime" units="ms"
    expires_after="2025-06-29">
  <owner>jbroman@chromium.org</owner>
  <owner>src/third_party/blink/renderer/core/speculation_rules/OWNERS</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    The amount of time between when a fetch of speculation rules is started and
    when it is finished. Recorded each time such a fetch occurs.
  </summary>
</histogram>

<histogram name="Blink.SpeculationRules.LoadOutcome"
    enum="SpeculationRulesLoadOutcome" expires_after="2025-06-29">
  <owner>jbroman@chromium.org</owner>
  <owner>src/third_party/blink/renderer/core/speculation_rules/OWNERS</owner>
  <summary>
    Outcome of an attempt to load a speculation rule set. Recorded once per
    attempt, whether triggered by a response header, by the parser or by script.
  </summary>
</histogram>

<histogram name="Blink.Style.MatchedPropertiesCache.BucketSize" units="entries"
    expires_after="2027-03-12">
  <owner>etiennep@chromium.org</owner>
  <owner>src/third_party/blink/renderer/core/css/OWNERS</owner>
  <summary>
    Size of the bucket (CachedMatchedProperties::entries) in which an item
    landed in the MatchedPropertiesCache (MPC). Recorded when adding an entry to
    the cache (subsampled to 1%).
  </summary>
</histogram>

<histogram name="Blink.Style.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-02-07">
  <owner>pdr@chromium.org</owner>
  <owner>layout-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating style in the Blink document lifecycle.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.SVGImage.DataChanged" units="microseconds"
    expires_after="2027-01-10">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent updating a SVG image once all data is received.

    This histogram does not record metrics on machines with low-resolution
    clocks.

    Warning: this histogram was expired from 2024-02-25 to 2024-04-17; data may
    be missing.
  </summary>
</histogram>

<histogram name="Blink.UpdateViewportIntersection.RemoteFrameNeedsUpdate"
    enum="BooleanYesNo" expires_after="2026-03-01">
  <owner>lizeb@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    When propagating intersection information to remote frames, whether the
    update can be skipped or not, resulting in no IPC being sent.
  </summary>
</histogram>

<histogram
    name="Blink.UpdateViewportIntersection.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-11-29">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent computing geometry information about iframes from the perspective
    of their embedding document. This time is also included in the
    Blink.IntersectionObservation.UpdateTime metric.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
  <token key="BlinkUpdateTimeSuffixes" variants="BlinkUpdateTimeSuffixes">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Blink.UseCounter.AboutBlankOrSrcdoc.Features"
    enum="FeatureObserver" expires_after="2026-04-12">
  <owner>wjmaclean@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Count of how many about:blank and about:srcdoc pages use various features
    across all frames in the page. This histogram has the same semantics as
    &quot;Blink.UseCounter.Features&quot;, but applies only to `about:blank` and
    `about:srcdoc` URLs (which that histogram does not include). Metrics are
    emitted either at the time a document commits, or via
    UseCounterImpl::ReportMeasurement(), depending on which feature is involved.
    For example, SandboxedSrcdocFrameResolvesRelativeURL reports at most once
    per PageVisit, and only when the feature is activated.

    Refer to &quot;Blink.UseCounter.Features&quot; for more details.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.AnimatedCSSProperties"
    enum="MappedCSSProperties" expires_after="never">
<!-- expires-never: used by Chrome Platform Status dashboard -->

<!-- https://www.chromestatus.com/metrics/css/animated -->

  <owner>chasej@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Records usage of animated CSS properties used on a page, either statically
    or dynamically, from the time the page is initialised to when it is closed
    or navigated away from. Each property is counted at most once per page per
    view via PageLoadMetricsObserver.

    This histogram counts CSS properties only when they are animated by a CSS
    Animation. Refer to Blink.UseCounter.CSSProperties for more details.

    As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink
    side to the browser side.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.CSSProperties" enum="MappedCSSProperties"
    expires_after="never">
<!-- expires-never: used by Chrome Platform Status dashboard -->

<!-- https://www.chromestatus.com/metrics/css/animated -->

  <owner>chasej@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Records usage of CSS properties used on a page, either statically or
    dynamically, from the time the page is initialised to when it is closed or
    navigated away from. Each property is counted at most once per page per view
    via PageLoadMetricsObserver.

    The first time a CSS property is parsed on a page, the histogram is updated
    to increment the counter. Each histogram bucket corresponds to a CSS
    property (eg. width, border-radius). The exception is the 'Total pages
    measured' bucket - this counts the number of pages that CSS properties were
    counted on. When a page navigation occurs the page count bucket is
    incremented and tracking of the set of which properties have been seen is
    reset.

    These numbers give the percentage of pages that use a CSS property. For
    example, if the 'border-radius' histogram bucket has a count of 250, and the
    page count bucket (i.e. bucket number 1) has a count of 1000 - this means
    that 1000 pages were recorded, and border-radius was used on 25% of those
    pages.

    Note that CSS properties used inside of SVG images are tracked separately in
    the Blink.UseCounter.SVGImage.CSSProperties histogram.

    As of M57 this histogram supercedes WebCore.FeatureObserver.CSSProperties.

    As of M69, Blink.UseCounter.AnimatedCSSProperties is moved from the blink
    side to the browser side.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.DocumentPolicy.Enforced"
    enum="DocumentPolicyFeature" expires_after="2023-03-31">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts enforced DocumentPolicyViolationReport generated in a document.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.DocumentPolicy.PolicyAttribute"
    enum="DocumentPolicyFeature" expires_after="2023-03-31">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts the use of a specific document policy via the &quot;policy&quot;
    attribute. Each policy is counted only once per page load.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.DocumentPolicy.ReportOnly"
    enum="DocumentPolicyFeature" expires_after="2023-03-31">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts report only DocumentPolicyViolationReport generated in a document.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.Extensions.Features" enum="FeatureObserver"
    expires_after="never">
<!-- expires-never: While this histogram is not used by the Chrome Platform
     Status dashboard, being able to measure usage of feature in
     chrome-extension:// URLs can still be vitally important when making
     decisions around web platform features, per the documentation at
     https://chromium.googlesource.com/chromium/src/+/HEAD/docs/use_counter_wiki.md#uma-timeline-with-formula. -->

  <owner>chasej@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Count of how many page loads use various features for pages with a
    chrome-extension:// URL only. The PageVisits bucket is incremented for each
    page load, and the other buckets incremented at most once per PageVisit via
    the WebCore::UserCounter class.

    Warning: This histogram represents pre-renderer metrics and so is flawed
    under OOPIF.

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

<histogram name="Blink.UseCounter.FeaturePolicy.Header"
    enum="FeaturePolicyFeature" expires_after="2027-01-17">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts the use of a specific feature policy via the
    &quot;Feature-Policy&quot; HTTP response header.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.Features" enum="FeatureObserver"
    expires_after="never">
<!-- expires-never: used by Chrome Platform Status dashboard -->

<!-- https://chromestatus.com/metrics/feature/popularity -->

  <owner>chasej@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Count of how many page loads use various features across all frames in a
    page. The PageVisits bucket is incremented for each page load, and the other
    buckets incremented at most once per PageVisit via blink::UseCounter and
    UseCounterPageLoadMetricsObserver.

    Note that this histogram only counts page with HTTP/HTTPS URL scheme.
    Feature used in pages with other URL schemes might be counted in other
    histograms: &quot;extension://&quot; : Blink.UseCounter.Extensions.Features
    &quot;file://&quot; : Blink.UseCounter.File.Features

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.File.Features" enum="FeatureObserver"
    expires_after="2027-01-03">
  <owner>yhirano@chromium.org</owner>
  <owner>mkwst@chromium.org</owner>
  <summary>
    Count of how many `file:` URL page loads use various features across all
    frames in the page. This histogram has the same semantics as
    &quot;Blink.UseCounter.Features&quot;, but applies only to `file:` URLs
    (which that histogram does not include).

    Refer to &quot;Blink.UseCounter.Features&quot; for more details.

    This counter expired on 2021-01-28 and was re-enabled on 2022-12-19.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.MainFrame.Features" enum="FeatureObserver"
    expires_after="never">
<!-- expires-never: Companion to Blink.UseCounter.Features, which is also expires-never. -->

  <owner>chasej@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Count of how many page loads use various features across in the main frame
    of a page. The PageVisits bucket is incremented at the beginning of each
    page load and the other buckets incremented at most once per PageVisit via
    blink::UseCounter and UseCounterPageLoadMetricsObserver throughout the
    lifetime of a page load metrics observer.

    This histogram counts usage of web features in main frame only. Refer to
    Blink.UseCounter.Features for more details.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.PermissionsPolicy.Allow2"
    enum="FeaturePolicyFeature" expires_after="2027-02-07">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts the use of a specific permissions policy feature via the
    &quot;allow&quot; attribute on iframes. Each policy is counted only once per
    page load. Version 2 fixes the mismatched histogram name with data
    collected.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.PermissionsPolicy.Header2"
    enum="FeaturePolicyFeature" expires_after="2026-12-20">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts the use of a specific permissions policy feature via both
    &quot;Feature-Policy&quot; and &quot;Permissions-Policy&quot; HTTP response
    header. Each policy is counted only once per page load. Version 2 fixes the
    mismatched histogram name with data collected.

    Not recorded if the page is prerendered and cancelled.

    Note that this histogram was expired from 2026-03-09 to 2026-04-16, and data
    may be missing.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.PermissionsPolicy.PrivacySensitive.Enabled"
    enum="FeaturePolicyFeature" expires_after="2027-01-03">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-team@chromium.org</owner>
  <summary>
    Counts the use of a specific permissions policy that is enabled by the API
    but is marked as sensitive and advertising script is in the stack when the
    feature policy is checked. Each policy is counted only once per page load.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.PermissionsPolicy.Violation.Enforce"
    enum="FeaturePolicyFeature" expires_after="2026-09-27">
  <owner>iclelland@chromium.org</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Counts the actual enforced permissions policy violation. The metrics is
    triggered when ExecutionContext::IsFeatureEnabled with
    ReportOptions::ReportOnFailure as param returns false, at most once per page
    visit.

    Not recorded if the page is prerendered and cancelled.

    Note that this histogram was expired from 2026-03-09 to 2026-04-16, and data
    may be missing.
  </summary>
</histogram>

<histogram name="Blink.UseCounter.TotalTakenTimeForReporting2.{Timing}"
    units="microseconds" expires_after="2027-01-31">
  <owner>sisidovski@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the accumulated time taken by recording the feautre usage in the
    renderer, at the timing of {Timing}.

    This metrics is recorded only when the frame is outer-most main frame, the
    document is not the initial empty document, and the URL is HTTP or HTTPS.

    This is triggered at the {Timing} phase.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="Timing">
    <variant name="DidCommitLoad"/>
    <variant name="FinishedParsing"/>
  </token>
</histogram>

<histogram name="Blink.UseCounter.WebDXFeatures" enum="WebDXFeatureObserver"
    expires_after="never">
<!-- expires-never: used by Chrome Platform Status dashboard, etc -->

<!-- https://chromestatus.com -->

  <owner>jstenback@google.com</owner>
  <owner>feature-control@chromium.org</owner>
  <summary>
    Count of how many page loads use various Web Platform features (as defined
    by https://github.com/web-platform-dx/web-features/) across all frames in a
    page. The PageVisits bucket is incremented for each page load, and the other
    buckets incremented at most once per PageVisit via blink::UseCounter and
    UseCounterPageLoadMetricsObserver.

    Note that this histogram only counts page with HTTP/HTTPS URL scheme. Web DX
    Feature used in pages with other URL schemes might be counted in other
    histograms.

    Not recorded if the page is prerendered and cancelled.
  </summary>
</histogram>

<histogram
    name="Blink.UserDrivenDocumentUpdate.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent preparing the document to service user driven behaviors. Examples
    include inspector, selection, editing, find-in-page and focus. Includes time
    spent in style update and layout.

    Note: As of 04/2023, scroll updates are included in user driven behaviors.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.ViewTransitions.AnimateRequestToAnimatingDelay"
    units="microseconds" expires_after="2027-01-01">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time between sending the animate request and the first animating
    frame. This captures the delay waiting for a scheduled frame. Recorded for
    script-based (SPA) transitions only.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.ViewTransitions.CaptureRequestToDOMCallbackRunningDelay"
    units="microseconds" expires_after="2027-01-01">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time between sending a capture request and invoking the DOM change
    callback. Recorded for script-based (SPA) transitions only.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.ViewTransitions.CaptureTagDiscoveryDuration"
    units="microseconds" expires_after="2027-01-01">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time spent in capture tag discovery (adding transition elements from
    CSS). Recorded for script-based (SPA) transitions only.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram
    name="Blink.ViewTransitions.DOMCallbackFinishedToAnimationRequestedDuration"
    units="microseconds" expires_after="2027-01-01">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time between the DOM callback finishing and the animation being
    requested. Recorded for script-based (SPA) transitions only.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.ViewTransitions.DOMCallbackRunDuration"
    units="microseconds" expires_after="2027-01-01">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time spent running the DOM change callback. Recorded for
    script-based (SPA) transitions only.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.ViewTransitions.InitialFrameDelay" units="microseconds"
    expires_after="2027-01-01">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time between a start of a view transition and the first non-initial
    step process, which happens at the earliest rendering opportunity. This is
    recorded for cross-document transitions only on the outgoing page.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
</histogram>

<histogram name="Blink.ViewTransitions.SkipReason"
    enum="ViewTransitionSkipReason" expires_after="2027-08-05">
  <owner>vmpstr@chromium.org</owner>
  <owner>rendering-core-dev@chromium.org</owner>
  <summary>
    Recorded when a view transition is skipped or aborted, logging the reason
    for the skip.
  </summary>
</histogram>

<histogram name="Blink.VisualUpdateDelay.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2026-09-12">
  <owner>szager@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Elapsed time between when a widget first registers a state invalidation that
    requires a visual refresh; and when the main thread begins a main frame that
    will send the updated visual state to the compositor.

    This histogram only records metrics on machines with high-resolution clocks.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.WaitForCommit.UpdateTime{BlinkUpdateTimeSuffixes}"
    units="microseconds" expires_after="2027-02-07">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent waiting for the compositor thread to begin processing a layer
    update inside ProxyMain::BeginMainFrame.

    Note: PreFCP metrics will be recorded even if FCP is not reached, whereas
    AggregatedPreFCP metrics are only recorded if FCP is reached.

    Note: Not recorded on ~5% of Windows machines with low-resolution clocks.

    Note: The histograms with PreFCP/PostFCP/AggregatedPreFCP suffixes before
    105.0.5175.0 were impacted by https://crbug.com/1330675. Be careful when
    aggregating or comparing these histograms across the version.
    {BlinkUpdateTimeSuffixes}
  </summary>
</histogram>

<histogram name="Blink.WebCodecs.ImageDecoder.Success" enum="BooleanSuccess"
    expires_after="never">
<!-- expires-never: WebCodecs health metric. -->

  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Whether a given JavaScript ImageDecoder instance completed operation
    successfully or not. Logged upon destruction of the instance.
  </summary>
</histogram>

<histogram name="Blink.WebCodecs.ImageDecoder.Type" enum="DecodedImageType"
    expires_after="never">
<!-- expires-never: WebCodecs health metric. -->

  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    Image codec provided to JavaScript ImageDecoder constructor. Logged once per
    successful construction upon completion of construction.
  </summary>
</histogram>

<histogram name="Blink.WebCodecs.{AudioCodecApi}.Codec" enum="AudioCodec"
    expires_after="never">
<!-- expires-never: WebCodecs health metric. -->

  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    The codec type used with {AudioCodecApi}. Recorded for every successful
    configure() call.
  </summary>
  <token key="AudioCodecApi">
    <variant name="AudioDecoder"/>
    <variant name="AudioEncoder"/>
  </token>
</histogram>

<histogram name="Blink.WebCodecs.{CodecApi}.FinalStatus" enum="MediaStatusCode"
    expires_after="never">
<!-- expires-never: WebCodecs health metric. -->

  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    The final media::StatusCode for each {CodecApi} instance. The final status
    code is either StatusCode::kOk or the first fatal error encountered.
    Recorded once upon destruction for each codec type.
  </summary>
  <token key="CodecApi">
    <variant name="AudioDecoder"/>
    <variant name="AudioEncoder"/>
    <variant name="VideoDecoder"/>
    <variant name="VideoEncoder"/>
  </token>
</histogram>

<histogram name="Blink.WebCodecs.{VideoCodecApi}.Codec" enum="VideoCodec"
    expires_after="never">
<!-- expires-never: WebCodecs health metric. -->

  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev-uma@chromium.org</owner>
  <summary>
    The codec type used with {VideoCodecApi}. Recorded for every successful
    configure() call.
  </summary>
  <token key="VideoCodecApi">
    <variant name="VideoDecoder"/>
    <variant name="VideoEncoder"/>
  </token>
</histogram>

<histogram name="Blink.XMLParsing.NonXsltXmlParsingTime.{Backend}" units="ms"
    expires_after="2027-02-07">
  <owner>drott@chromium.org</owner>
  <owner>dom-dev@google.com</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time to parse an XML Document using the {Backend}-backend in
    non-Frame situations, i.e. in situations where XSLT is not allowed, such as
    using the DOMParser API or accessing the XML response document of
    XMLHttpRequests. Recorded once per created and parsed XML document. The
    counter starts when the XML parser is created, and stops when parsing
    finishes.
  </summary>
  <token key="Backend">
    <variant name="Combined"/>
    <variant name="Libxml2"/>
    <variant name="Rust"/>
  </token>
</histogram>

<histogram name="Blink.{CookieOperation}Time" units="ms"
    expires_after="2027-07-07">
  <owner>cduvall@chromium.org</owner>
  <owner>jam@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Measures the time it takes to perform a {CookieOperation} operation from the
    CookieJar. Logged on every operation from the CookieJar.
  </summary>
  <token key="CookieOperation">
    <variant name="CookiesEnabled"/>
    <variant name="SetCookie"/>
  </token>
</histogram>

<histogram name="Blink.{Host}.RenderTaskDuration.{Context}.{Filter}"
    units="microseconds" expires_after="2027-01-03">
  <owner>junov@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <improvement direction="LOWER_IS_BETTER"/>
  <summary>
    Time spent executing a script task that draws content to a {Context} context
    of a {Host}.

    Note: This metric drops reports on clients with low-resolution clocks, which
    means these reports will be biased against a portion of the population on
    Windows. See Windows.HasHighResolutionTimeTicks for the affected sample.
  </summary>
  <token key="Host">
    <variant name="Canvas"/>
    <variant name="OffscreenCanvas"/>
  </token>
  <token key="Context">
    <variant name="2D.Accelerated"/>
    <variant name="2D.Unaccelerated"/>
    <variant name="ImageBitmap"/>
    <variant name="WebGL"/>
    <variant name="WebGL2"/>
    <variant name="WebGPU"/>
  </token>
  <token key="Filter">
    <variant name="All"/>
    <variant name="Animation"/>
    <variant name="DrawArrays"/>
    <variant name="DrawElements"/>
    <variant name="Image"/>
    <variant name="ImageData"/>
    <variant name="Path"/>
    <variant name="Rectangle"/>
    <variant name="Text"/>
  </token>
</histogram>

<histogram name="Blink.{Host}.{Heap}.{Context}" units="KB"
    expires_after="2027-02-14">
  <owner>junov@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <owner>aaronhk@chromium.org</owner>
  <summary>
    Memory usage on the {Heap} heap in KB, sampled after the execution of script
    tasks that render content to a {Host}, using a {Context} context.
  </summary>
  <token key="Host">
    <variant name="Canvas"/>
    <variant name="OffscreenCanvas"/>
  </token>
  <token key="Heap">
    <variant name="BlinkGC"/>
    <variant name="PartitionAlloc"/>
  </token>
  <token key="Context">
    <variant name="2D.Accelerated"/>
    <variant name="2D.Unaccelerated"/>
    <variant name="ImageBitmap"/>
    <variant name="WebGL"/>
    <variant name="WebGL2"/>
    <variant name="WebGPU"/>
  </token>
</histogram>

</histograms>

</histogram-configuration>
