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

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

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

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

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

<histogram-configuration>

<histograms>

<variants name="AccumulatedSequences">
  <variant name="AllAnimations"
      summary="its animations (e.g. comositor-driven animations, main-thread
               driven animations, and raf-driven animations, etc.)"/>
  <variant name="AllInteractions"
      summary="its supported combinations of interaction types (e.g.
               scrolling, pinching, etc.) and input device types (e.g.
               touchscreen, touchpad, mousewheel, etc.)"/>
</variants>

<variants name="CheckerboardingVersion">
  <variant name="3"
      summary="A frame is counted as checkerboarded if any visible tile is
               not fully rastered."/>
  <variant name="4"
      summary="A frame is counted as checkerboarded if any visible tile is
               not fully rastered or recorded."/>
</variants>

<variants name="LCDTextDisallowedReasonDPI">
  <variant name="HighDPI"
      summary="In web pages where device scale factor is greater than or
               equal to 1.5."/>
  <variant name="LowDPI"
      summary="In web pages where device scale factor is less than 1.5."/>
</variants>

<variants name="SmoothnessSequence">
  <variant name="CanvasAnimation" summary="canvas animations"/>
  <variant name="CompositorAnimation"
      summary="compositor thread driven animations"/>
  <variant name="JSAnimation" summary="JS driven animations"/>
  <variant name="MainThreadAnimation" summary="main thread driven animations"/>
  <variant name="PinchZoom" summary="pinch to zoom interctions"/>
  <variant name="RAF" summary="raf driven animations"/>
  <variant name="ScrollbarScroll" summary="scrollbar scrolling"/>
  <variant name="SETCompositorAnimation"
      summary="compositor animations during a view transition"/>
  <variant name="SETMainThreadAnimation"
      summary="main thread animations during a view transition"/>
  <variant name="TouchScroll" summary="touch scrolling"/>
  <variant name="Video" summary="video playback"/>
  <variant name="WheelScroll" summary="wheel scrolling"/>
</variants>

<variants name="SmoothnessThread">
  <variant name="CompositorThread."/>
  <variant name="MainThread."/>
</variants>

<variants name="TileManagerProcessType">
  <variant name="Browser"/>
  <variant name="Renderer"/>
</variants>

<histogram name="Compositing.Browser.LayersUpdateTime" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent updating layers, in microseconds. Recorded when layers are
    updated (in a browser process).

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Compositing.Browser.LayerTreeImpl.CalculateDrawPropertiesUs"
    units="microseconds" expires_after="2023-03-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent updating layer draw properties, in microseconds. Recorded when a
    LayerTreeImpl's draw properties are updated (in a browser process).

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Compositing.BufferQueue.TimeUntilBuffersRecreatedMs"
    units="ms" expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time since a BufferQueue's buffers were destroyed until they were
    recreated. If this time is commonly very small, that is a problem. Recorded
    when the buffer recreates buffers that were previously destroyed. For a
    single BufferQueue this should be once per frame at worst.
  </summary>
</histogram>

<histogram name="Compositing.ColorGamut" enum="ColorGamut"
    expires_after="2024-04-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Every time a frame is presented, record the generalized color gamut of that
    frame. Note: this metric was expired from 2022-02-06 to 2023-11-17.
  </summary>
</histogram>

<histogram name="Compositing.DecodeLCPCandidateImage.{DecodeMethod}"
    enum="Boolean" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports whether an image decode was for an image that might be used as the
    Largest Contentful Image, and then whether a missing tile at raster time
    includes such an image. The goal is to get an approximate idea of how many
    LCP candidate images miss their frame deadline, and hence how often we may
    report LCP too soon.

    Recorded on every {DecodeMethod}

    Note: this metric was expired from 2023-01-31 to 2023-12-20.
  </summary>
  <token key="DecodeMethod">
    <variant name="Hardware" summary="hardware image decode task completion."/>
    <variant name="MissedDeadline"
        summary="call to PrepareTiles() in which there was a missing tile.
                 True if any missing tile contains an LCP candidate decode
                 that has not completed."/>
    <variant name="Software" summary="software image decode task completion."/>
  </token>
</histogram>

<histogram name="Compositing.DidMainThreadBlockDuringCommit" enum="Boolean"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded on every commit. Indicates whether the renderer's main thread was
    blocked waiting for the impl thread to commit. True indicates the main
    thread did block.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.DrawnRectAssignmentType"
    enum="RenderPassDrawRectAssign" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records update type to the drawn rect for every draw to each non root
    renderpass.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.OverlayProcessingUs"
    units="microseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent processing quads to see which can be replaced with overlays. This
    is logged once per frame, when a frame should be drawn. Only reported for
    platforms supporting high resolution clocks.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.PartialSwap.ExtraDamage" units="%"
    expires_after="2024-03-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The area of the display damage that was added to current frame damage after
    all adjustments, including FrameBufferDamage from buffer queue and render
    pass filters.

    This metric is reported once per frame only on platforms/devices that
    support partial swap and does not include &quot;empty swap&quot; (no frame
    damage) case

    Note: this metric was expired from 2022-10-16 to 2023-06-09.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.PartialSwap.FrameBufferDamage"
    units="%" expires_after="2024-03-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The area of the display that was damaged since previous draw to this frame
    buffer.

    This metric is reported once per frame only on platforms/devices that
    support partial swap and does not include &quot;empty swap&quot; (no frame
    damage) case.

    Note: this metric was expired from 2022-10-23 to 2023-06-09.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.PartialSwap.RootDamage" units="%"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The area of the display that was damaged in current frame.

    This metric is reported only on platforms/devices that support partial swap
    and does not include &quot;empty swap&quot; (no frame damage) case.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.PartialSwap.TotalDamage" units="%"
    expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total area of the display that will be redrawn this frame.

    This metric is reported only on platforms/devices that support partial swap
    and does not include &quot;empty swap&quot; (no frame damage) case

    Note: this metric was expired from 2023-04-30 to 2023-06-09.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.RenderPassDrawnRectMatch"
    enum="Boolean" expires_after="2025-06-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether a render pass drawn rect matches the expected output rect. Record
    for each non-root render pass every time it is drawn.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.SkipAllNonRootRenderPassesPerFrame"
    enum="BooleanSkipped" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether all non-root render passes in a frame are skipped. Logged once per
    frame during DrawFrame for the frames with non-root render passes.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.SkipNonRootRenderPass"
    enum="BooleanSkipped" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged for every non-root render pass in DrawRenderPass during DrawFrame.
    True if there is no damages to the render pass and the rendering is skipped.
  </summary>
</histogram>

<histogram name="Compositing.DirectRenderer.{FocusType}" units="pixels"
    expires_after="2025-06-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record every frame the sum of all rendered pixels from all render passes.
    The buckets are {FocusType}
  </summary>
  <token key="FocusType">
    <variant name="TotalPixelsRendered" summary="Full Linear view of count."/>
    <variant name="TotalPixelsRenderedNarrow"
        summary="Narrowed bucket sampling selected based on common screen
                 resolutions"/>
  </token>
</histogram>

<histogram name="Compositing.Display.AdpfHintUs" units="microseconds"
    expires_after="2025-09-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once for every ADPF performance hint report, which is
    generally once every frame on Android device that supports ADPF and ADPF is
    enabled. It's the interval reported to ADPF, which is currently implemented
    as the wall clock time from vsync frame time to swap_start. Only reported
    for platforms supporting high resolution clocks.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.AverageOverdraw" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The average overdraw of the aggregated compositor frame. It is logged once
    per frame. Overdraw is expected to range is [1.0, 6.0]. An overdraw of 2.0
    means that on average each pixel of the display is drawn twice. Note: The
    overdraw value is logged as `overdraw * 100000`.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.LastPass.Quads" units="quads"
    expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per n frames, when the frame is drawn and feature is
    enabled. The total number of quads in the last render passes in the
    CompositorFrame that is produced by surface aggregation.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.LastPass.Quads.BufferFormat"
    enum="BufferFormat" expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per n frames, when the frame is drawn and feature is
    enabled. The buffer format underlying each quads in the last render pass in
    the CompositorFrame that is produced by surface aggregation.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.LastPass.Quads.ColorSpacePrimaryID"
    enum="ColorSpacePrimaryID" expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per n frames, when the frame is drawn and feature is
    enabled. The primary id for the color space of each quad in the last render
    pass in the CompositorFrame that is produced by surface aggregation.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.LastPass.Quads.ColorSpaceTransferID"
    enum="ColorSpaceTransferID" expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per n frames, when the frame is drawn and feature is
    enabled. The transfer id for the color space of each quad in the last render
    pass in the CompositorFrame that is produced by surface aggregation.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.LastPass.Quads.LoggingTimeUs"
    units="microseconds" expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per n frames, when the frame is drawn and feature is
    enabled. The amount of time spent collecting information relevant to all
    quads in the last render pass. Only reported for platforms supporting high
    resolution clocks.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.LastPass.Quads.{IdType}"
    units="quads" expires_after="2025-05-13">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per n frames, when the frame is drawn and feature is
    enabled. The total number of quads that resulted in {IdType} during overlay
    promotion attempt in the last render pass in the CompositorFrame is produced
    by surface aggregation.
  </summary>
  <token key="IdType">
    <variant name="FailedCandidate" summary="failed candidates"/>
    <variant name="NonAligned" summary="non-aligned candidates"/>
    <variant name="NonOpaque" summary="non-opaque candidates"/>
    <variant name="NonPixelAligned" summary="non-pixel aligned candidates"/>
    <variant name="RoundedCorners" summary="candidates with rounded corner"/>
    <variant name="Scaled" summary="scaled candidates"/>
    <variant name="SolidColor" summary="solid color quad"/>
    <variant name="Transformations" summary="candidates with transformations"/>
  </token>
</histogram>

<histogram name="Compositing.Display.Draw.Occlusion.Calculation.Time"
    units="microseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent to remove invisible quads from the quad_list in CompositorFrame.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Compositing.Display.Draw.Quads" units="quads"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per frame, when the frame is drawn. The total number of
    quads in all render passes in the CompositorFrame that is produced by
    surface aggregation. Histogram was previously expired from 2019-06 to
    2024-03.
  </summary>
</histogram>

<histogram name="Compositing.Display.DrawToSwapUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per frame, if the output surface provides timing
    information. It measures the time from the display compositor starting a
    draw on the Viz Compositor thread to issuing all related draw calls to the
    driver on the Gpu Main thread. Only reported for platforms supporting high
    resolution clocks.
  </summary>
</histogram>

<histogram name="Compositing.Display.DrmOverlayManager.FullscreenOverlayFailed"
    enum="Boolean" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    If kHandleOverlaysSwapFailure is enabled, this is logged once per frame that
    has a fullscreen overlay. Helps to measure how many times fullscreen
    overlays succeeded or failed while DRM test was allowed to be skipped.
  </summary>
</histogram>

<histogram name="Compositing.Display.FlattenedRenderPassCount" units="units"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per frame. It is the number of renderer passes after
    flattening all possible render passes. If the value is more than one, then
    an intermediate rendering target must be used during the rendering of the
    frame for each render pass greater than one.
  </summary>
</histogram>

<histogram
    name="Compositing.Display.HardwareDisplayController.SchedulePageFlipResult"
    enum="PageFlipResult" expires_after="2024-03-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged once per frame, represents whether we could successfully schedule a
    page flip, or what error we encountered along the way. Note: this metric was
    expired from 2023-03-02 to 2023-04-13.
  </summary>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.FramesAttemptingRequiredOverlays"
    enum="Boolean" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records once per frame, whether we will attempt to promote any required
    overlay or not in that frame.
  </summary>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.FramesScalingRequiredOverlays"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records zero or once per frame, whether we attempted scaling any required
    overlay.
  </summary>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.FramesWith{Catcher}"
    enum="Boolean" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records zero or once per frame, wether a frame has a {Catcher}.
  </summary>
  <token key="Catcher">
    <variant name="MaskCandidates" summary="mask candidates."/>
    <variant name="MaskCandidatesRequireOverlays"
        summary="a mask candidate that should be promoted to overlay."/>
  </token>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.NumOverlays{Counted}"
    units="overlay candidates" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged once per frame, the number of overlays {Counted}. Note: this metric
    was expired from 2022-11-30 to 2023-04-13.
  </summary>
  <token key="Counted">
    <variant name="Attempted"
        summary="attempted. This is only logged when using the
                 AttemptMultipleOverlays path."/>
    <variant name="Failed"
        summary="failed. This is only logged when using the
                 AttemptMultipleOverlays path."/>
    <variant name="Promoted" summary="promoted."/>
  </token>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.NumQuadsConsidered"
    units="units" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged once per frame, the number of quads considered for promotion to
    overlay. Note: this metric was expired from 2023-06-18 to 2024-02-05.
  </summary>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.ShouldPromoteCandidatesWithMasks"
    enum="PromotingMaskCandidates" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged for each mask candidate whether it was promoted or why it was not
    promoted.
  </summary>
</histogram>

<histogram
    name="Compositing.Display.OverlayProcessorUsingStrategy.WorkingScaleFactorForRequiredOverlays"
    units="scale_factor" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the scale factor that is used to downscale successfully promoted
    required candidates. It is only logged once per frame if a required overlay
    is promoted. Note: The scale factor value is logged as `scale_factor * 100`.
  </summary>
</histogram>

<histogram name="Compositing.Display.PendingSwaps" units="swaps"
    expires_after="2024-08-18">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the count of pending swaps in the display scheduler. Length of the
    swap chain can be used as a rough approximation for input latency. Recorded
    before the swap executes. Refer to Display::DrawAndSwap for details.
  </summary>
</histogram>

<histogram name="Compositing.Display.VizDependencyResolvedToGpuStartedDrawUs"
    units="microseconds" expires_after="2024-10-20">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per frame, if the output surface provides timing
    information. It measures delta between the time when display compositor draw
    task's dependencies have been solved and the time when the Gpu Thread
    started processing it. Only reported for platforms supporting high
    resolution clocks. Note: this metric was expired from 2022-12-18 to
    2023-11-17.
  </summary>
</histogram>

<histogram name="Compositing.Display.VizScheduledDrawToDependencyResolvedUs"
    units="microseconds" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per frame if the output surface provides timing
    information. It measures delta between the time when display compositor
    scheduled first draw task for the current frame on Viz Compositor thread and
    the time when the task's dependencies have been resolved and the task is
    ready for the Gpu Thread to start processing it. Recorded when swap
    completes. Only reported for platforms supporting high resolution clocks.
    Note: this metric was expired from 2023-08-27 to 2023-11-17.
  </summary>
</histogram>

<histogram name="Compositing.Display.VizScheduledDrawToGpuStartedDrawUs"
    units="microseconds" expires_after="2025-02-23">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    This is logged once per frame if the output surface provides timing
    information. It measures delta between the time when display compositor
    scheduled first draw task for the current frame on Viz Compositor thread and
    the time when Gpu Thread started processing it. Recorded when swap
    completes. Only reported for platforms supporting high resolution clocks.
    Note: this metric was expired from 2022-12-18 to 2023-11-17.
  </summary>
</histogram>

<histogram name="Compositing.FrameRateDecider.ToggleFrameRateCase"
    enum="ToggleFrameRateCase" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The count of cases to decide whether we should toggle framerate or not in
    FrameRateDecider. This is logged at 1/1000 probability of frames with
    video(s) on screen. This aims to determine how frequently Chormium is
    rendering single video with perfect cadence to the supported frame rates.
  </summary>
</histogram>

<histogram name="Compositing.MainThreadBlockedDuringCommitTime"
    units="microseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that the renderer's main thread blocked waiting for the impl thread
    to commit. This is only reported if the main thread blocked.

    Drops reports on clients with low-resolution clocks, biasing to a portion of
    the population on Windows. See Windows.HasHighResolutionTimeTicks for the
    affected sample.
  </summary>
</histogram>

<histogram
    name="Compositing.MainThreadBlockedDuringCommitTime.ApplyCompositorChanges"
    units="microseconds" expires_after="2023-10-08">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time that ApplyCompositorChanges is blocked waiting for the impl thread
    to commit. This is a subset of the total time spent in
    Compositing.MainThreadBlockedDuringCommitTime.

    Drops reports on clients with low-resolution clocks, biasing to a portion of
    the population on Windows. See Windows.HasHighResolutionTimeTicks for the
    affected sample.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.AnimationUpdateOnMissingPropertyNode"
    enum="Boolean" expires_after="2024-12-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records when we attempt to update an animation with a missing property node.
    See crbug.com/1307498. We safely handle this case but until we find and fix
    the root cause, this histogram allows us to keep track of the frequency at
    this occurs.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.CALayerResult" enum="CALayerResult"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The outcome of attempting to replace all renderer tiles with CALayers.
    Either success, or the first reason why a DrawQuad couldn't be replaced by a
    CALayer.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.LayersUpdateTime" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent updating layers, in microseconds. Recorded when layers are
    updated (in a renderer process).

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Compositing.Renderer.LCDTextDisallowedReasonKPixels2.{DPI}"
    enum="LCDTextDisallowedReason" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the approximate kilo-pixels covered by text drawing operations by
    LCD-text disallowed reasons. Hence the histogram value for each reason is
    the approximate number of non-LCD kilo-pixels resulting from that reason.
    Recorded when the renderer is idle, at minimum interval of the longer of 1
    minute and 500 begin frames for each local frame tree.
  </summary>
  <token key="DPI" variants="LCDTextDisallowedReasonDPI"/>
</histogram>

<histogram name="Compositing.Renderer.LCDTextDisallowedReasonLayers2.{DPI}"
    enum="LCDTextDisallowedReason" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Records the number of layers containing text by LCD-text disallowed reasons.
    Recorded along with Compositing.Renderer.LCDTextDisallowedReasonKPixels.
  </summary>
  <token key="DPI" variants="LCDTextDisallowedReasonDPI"/>
</histogram>

<histogram name="Compositing.Renderer.NumActiveLayers" units="layers"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of layers in the active tree for each compositor frame. This is
    logged once per frame, before the frame is drawn (in a renderer process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.NumActivePictureLayers" units="layers"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of PictureLayers in the active tree for each compositor frame.
    This is logged once per frame, before the frame is drawn (in a renderer
    process).
  </summary>
</histogram>

<histogram name="Compositing.Renderer.NumRenderSurfaces" units="surfaces"
    expires_after="2024-09-22">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of render surfaces in the render surface layer list. Recorded
    each time the render surface layer list is constructed (in a renderer
    process).
  </summary>
</histogram>

<histogram name="Compositing.SkiaRenderer.DrawTileDrawQuad.UsingRawDraw"
    enum="Boolean" expires_after="2023-06-11">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>Records if the TileDrawQuad is rendered with RawDraw.</summary>
</histogram>

<histogram name="Compositing.SkiaRenderer.SkipOverlayRenderPassDrawQuad"
    enum="BooleanSkipped" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Logged for every RenderPassDrawQuad in the overlay list during
    ScheduleOverlays. An Overlay RenderPassDrawQuad is skipped if there is no
    damages to the render pass and the RenderPassDrawQuad settings are the same.
  </summary>
</histogram>

<histogram name="Compositing.SkiaRenderer.SkippedOverlayRenderPassDrawQuadSize"
    units="pixels" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Pixel size for a skipped overlay render pass draw quad. Recorded in
    SkiaRenderer ScheduleOverlays.
  </summary>
</histogram>

<histogram name="Compositing.SkiaRenderer.VertexOpacityUsage"
    units="VertexOpacityUsage" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Vertex usage is logged cumulatively for every 1000 TextureDrawQuads drawn.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.AggregateUs"
    units="microseconds" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent aggregating compositor frames from different surfaces in
    microseconds. This is logged once per frame.

    Warning: This metric may include reports from clients with low-resolution
    clocks (i.e. on Windows, ref. |TimeTicks::IsHighResolution()|). Such reports
    will cause this metric to have an abnormal distribution. When considering
    revising this histogram, see UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES for the
    solution.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.CopiedSurfaceCount"
    units="surfaces" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of surfaces where the active CompositorFrame was copied into the
    AggregateFrame during surface aggregation. This is logged once per frame.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.CopyUs" units="microseconds"
    expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent copying quads during surface aggregation. This is a subset of the
    time recorded for Compositing.SurfaceAggregator.AggregateUs and is logged
    once per frame.

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

<histogram name="Compositing.SurfaceAggregator.ExcessPixelsClipped"
    units="pixels" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record the number of excess pixels for the output rect that would not be
    visible due to the parent root clip. This is logged once per frame.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.Has{Type}PerFrame"
    enum="Boolean" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record whether a frame has a specific type of render pass. This is logged
    once per frame.
  </summary>
  <token key="Type">
    <variant name="CopyRequests"/>
    <variant name="PixelMovingBackdropFilters"/>
    <variant name="PixelMovingFilters"/>
    <variant name="UnembeddedRenderPasses"/>
  </token>
</histogram>

<histogram name="Compositing.SurfaceAggregator.PrewalkedSurfaceCount"
    units="surfaces" expires_after="2024-11-03">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The number of surfaces that were looked at during the prewalk phase of
    surface aggregation. This is logged once per frame.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceAggregator.PrewalkUs" units="microseconds"
    expires_after="2024-09-15">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Time spent doing prewalk during surface aggregation. This is a subset of the
    time recorded for Compositing.SurfaceAggregator.AggregateUs and is logged
    once per frame.

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

<histogram name="Compositing.SurfaceAggregator.RenderPassDamageType"
    enum="RenderPassDamage" expires_after="2025-03-01">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Record the damage type for an aggregate render pass based on clipping by the
    root. This is logged once per frame.
  </summary>
</histogram>

<histogram name="Compositing.SurfaceManager.MarkForDestructionToDestroy"
    units="ms" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The time between when a Surface has been Marked for Destruction, to when it
    is actually Destroyed.

    This time denotes how long the Surface remains referenced by other Surfaces,
    preventing deletion. This does not include the following time until the
    associated resources are released, and their memory is freed. This is logged
    once per destroyed Surface.
  </summary>
</histogram>

<histogram name="Compositing.TileManager.EnoughMemory.{ProcessType}"
    enum="Boolean" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When memory is assigned to tiles, whether there was enough memory for all
    required tiles.
  </summary>
  <token key="ProcessType" variants="TileManagerProcessType"/>
</histogram>

<histogram
    name="Compositing.TileManager.LimitWhenNotEnoughMemory.{ProcessType}"
    units="MB" expires_after="2024-06-30">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When memory is assigned to tiles and there is not enough memory, the memory
    limit that the tile assignment was breaching.
  </summary>
  <token key="ProcessType" variants="TileManagerProcessType"/>
</histogram>

<histogram name="Compositing.TileManager.TileInvalidationArea" units="%"
    expires_after="2025-06-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    When resource is assigned to tile for rasterization, records the percentage
    area of invalidation of said resource. This will only be recorded for
    partially rasterized tiles.
  </summary>
</histogram>

<histogram name="Compositing.VizBreakdownToPresentationUnexpected"
    enum="VizBreakdown" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Recorded when an unexpected viz stage ends after the presentation time.
  </summary>
</histogram>

<histogram name="Compositing.{Process}.CompositorFrame.Quads" units="quads"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The total number of quads in all render passes in a CompositorFrame. This is
    logged as the CompositorFrame is submitted to its surface. Histogram was
    previously expired from 2019-06 to 2024-03.
  </summary>
  <token key="Process">
    <variant name="Browser"/>
    <variant name="Renderer"/>
  </token>
</histogram>

<histogram
    name="CompositorLatency.CompositorOnlyFrame{InteractionType}.{StageType}"
    units="microseconds" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the duration of various stages in the pipeline as a single frame goes
    through the various stages in the compositor in the cases that there is no
    damage from main thread.

    This metric uses base::Histogram::FactoryMicrosecondsTimeGet so only users
    with high resolution clocks will report this metric.

    Note: This metric was expired from 2023-03-01 to 2023-05-05.
  </summary>
  <token key="InteractionType">
    <variant name=""/>
    <variant name=".CanvasAnimation"/>
    <variant name=".CompositorAnimation"/>
    <variant name=".JSAnimation"/>
    <variant name=".MainThreadAnimation"/>
    <variant name=".PinchZoom"/>
    <variant name=".RAF"/>
    <variant name=".ScrollbarScroll"/>
    <variant name=".SETCompositorAnimation"/>
    <variant name=".SETMainThreadAnimation"/>
    <variant name=".TouchScroll"/>
    <variant name=".WheelScroll"/>
  </token>
  <token key="StageType">
    <variant name="BeginImplFrameToFinishImpl"/>
    <variant name="ImplFrameDoneToSubmitCompositorFrame"/>
    <variant name="SendBeginMainFrameToBeginMainAbort"/>
    <variant name="SubmitCompositorFrameToPresentationCompositorFrame"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.BufferAvailableToBufferReady"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.BufferReadyToLatch"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.LatchToSwapEnd"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.ReceivedCompositorFrameToStartDraw"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.StartDrawToSwapStart"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SubmitToReceiveCompositorFrame"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SwapEndToPresentationCompositorFrame"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SwapStartToBufferAvailable"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SwapStartToSwapEnd"/>
    <variant name="TotalLatency"/>
  </token>
</histogram>

<histogram name="CompositorLatency.IpcThread.{LatencyType}"
    units="microseconds" expires_after="2025-02-16">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Reports the overhead of IPC's and thread hops during the production of a
    single frame. Measures {LatencyType}

    This is reported by the Renderer, at a subsampled rate of effectively once
    per 1000 frames. Non-Renderer clients do not report this. This metric drops
    reports on low-resolution clocks, which will bias the Windows population.
  </summary>
  <token key="LatencyType">
    <variant name="BeginMainFrameQueuing"
        summary="the time from when the Compositor thread posts
                 BeginMainFrame to when the task actually begins on the Main
                 thread. This is a subset of
                 CompositorLatency.*.SendBeginMainFrameToCommit."/>
    <variant name="DispatchToRenderer"
        summary="the time from when Viz dispatched the BeginFrameArgs to when
                 it is received by the client."/>
    <variant name="FrameTimeToDispatch"
        summary="the time from the targeted frame start time to when Viz
                 dispatches it to the client."/>
    <variant name="ImplThreadTotalLatency"
        summary="the total latency overhead for Compositor-only frames. Which
                 excludes BeginMainFrameQueuing."/>
    <variant name="MainThreadTotalLatency"
        summary="the total latency overhead for frames which had Main-thread
                 work."/>
  </token>
</histogram>

<histogram name="CompositorLatency.Type{Sequence}" enum="FrameReportType"
    expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Whether frame is dropped or presented meeting or missing the deadline or is
    a compositor only frame.
  </summary>
  <token key="Sequence">
    <variant name="" summary="All Sequences"/>
    <variant name=".AnyInteraction" summary="At least one active interaction"/>
    <variant name=".CanvasAnimation" summary="Main-thread canvas animation"/>
    <variant name=".CompositorAnimation" summary="Compositor-driven animation"/>
    <variant name=".JSAnimation" summary="JS-driven animation"/>
    <variant name=".MainThreadAnimation"
        summary="Main-thread driven animation"/>
    <variant name=".NoInteraction" summary="No active interaction"/>
    <variant name=".PinchZoom" summary="Pinch-to-zoom interaction"/>
    <variant name=".RAF" summary="rAF callback driven animation"/>
    <variant name=".ScrollbarScroll" summary="Scrollbar driven scrolls"/>
    <variant name=".TouchScroll" summary="Touchscreen driven interaction"/>
    <variant name=".Video" summary="Video playback"/>
    <variant name=".WheelScroll" summary="Mousewheel driven interaction"/>
  </token>
</histogram>

<histogram name="CompositorLatency{ReportType}{InteractionType}.{StageType}"
    units="microseconds" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the duration of various stages in the pipeline as a single frame goes
    through the various stages in the compositor {ReportType}.

    This metric uses base::Histogram::FactoryMicrosecondsTimeGet so only users
    with high resolution clocks will report this metric.
  </summary>
  <token key="ReportType">
    <variant name=""
        summary="reported for frames that went through all the compositor
                 stages in chromium, and was presented to the user"/>
    <variant name=".DroppedFrame"
        summary="reported for frames that the user did not see: this includes
                 frames that are dropped in various stages inside chromium,
                 or even frames that went through all stages in chromium, but
                 ultimately was not presented to the user"/>
    <variant name=".MissedDeadlineFrame"
        summary="reported for frames that went through all the compositor
                 stages in chromium, and was presented to the user, but were
                 delayed and missed their deadline"/>
  </token>
  <token key="InteractionType">
    <variant name=""/>
    <variant name=".CanvasAnimation"/>
    <variant name=".CompositorAnimation"/>
    <variant name=".JSAnimation"/>
    <variant name=".MainThreadAnimation"/>
    <variant name=".PinchZoom"/>
    <variant name=".RAF"/>
    <variant name=".ScrollbarScroll"/>
    <variant name=".SETCompositorAnimation"/>
    <variant name=".SETMainThreadAnimation"/>
    <variant name=".TouchScroll"/>
    <variant name=".WheelScroll"/>
  </token>
  <token key="StageType">
    <variant name="Activation"/>
    <variant name="BeginImplFrameToSendBeginMainFrame"/>
    <variant name="Commit"/>
    <variant name="EndActivateToSubmitCompositorFrame"/>
    <variant name="EndCommitToActivation"/>
    <variant name="SendBeginMainFrameToCommit"/>
    <variant name="SendBeginMainFrameToCommit.Animate"/>
    <variant name="SendBeginMainFrameToCommit.BeginMainSentToStarted"/>
    <variant name="SendBeginMainFrameToCommit.CompositeCommit"/>
    <variant name="SendBeginMainFrameToCommit.CompositingInputs"/>
    <variant name="SendBeginMainFrameToCommit.HandleInputEvents"/>
    <variant name="SendBeginMainFrameToCommit.LayoutUpdate"/>
    <variant name="SendBeginMainFrameToCommit.Paint"/>
    <variant name="SendBeginMainFrameToCommit.Prepaint"/>
    <variant name="SendBeginMainFrameToCommit.StyleUpdate"/>
    <variant name="SendBeginMainFrameToCommit.UpdateLayers"/>
    <variant name="SubmitCompositorFrameToPresentationCompositorFrame"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.BufferAvailableToBufferReady"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.BufferReadyToLatch"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.LatchToSwapEnd"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.ReceivedCompositorFrameToStartDraw"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.StartDrawToSwapStart"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SubmitToReceiveCompositorFrame"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SwapEndToPresentationCompositorFrame"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SwapStartToBufferAvailable"/>
    <variant
        name="SubmitCompositorFrameToPresentationCompositorFrame.SwapStartToSwapEnd"/>
    <variant name="TotalLatency"/>
  </token>
</histogram>

<histogram name="Graphics.Exo.Smoothness.BeginFrameArrivalToSubmission"
    units="microseconds" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time duration between Exo receiving a BeginFrame and submitting
    a frame for it. Reported for clients with high-resolution clocks.

    Please note that no value is reported if a BeginFrame is responded with
    DidNotProduceFrame.
  </summary>
</histogram>

<histogram name="Graphics.Exo.Smoothness.FrameArrivalToSubmission"
    units="microseconds" expires_after="2024-12-31">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Measures the time duration between Exo receiving a frame and submitting it.
    Reported for clients with high-resolution clocks.

    Please note that no value is reported if a frame is discarded by Exo.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.95pctPercentDroppedFrames_1sWindow"
    units="%" expires_after="2025-02-10">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    The percent dropped frame is calculated for each sliding window of 1 second
    length and added to a histogram, and then the 95 percentile of that
    histogram is reported as 95pctPercentDroppedFrames_1sWindow.

    The sliding windows cover the duration of page-load (From start of page-load
    until user navigates away, or closes the tab/chrome, or when app goes to
    background). Note that this means that this metric will bias toward tabs
    that are closed more quickly, and might underreport tabs that remain open
    for a long duration.

    PercentDroppedFrames is measured by tracking the number of frames which were
    not displayed on screen out of the total number of frames expected to be
    produced and displayed. In other words, the lower this number is, the
    smoother experience.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.CheckerboardingNeedRaster4.AllSequences"
    units="%" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of checkerboarded frames that contain any not fully
    rastered visible tiles, for a sequence by aggregating all its animations and
    interactions, where a sequence is a series of frames produced which contain
    at least one of the animations/interactions. Such animations and
    interactions encompass: Compositor-thread animations; Main-thread
    animations; JS animations; scrolling; and pinch-gestures.

    Checkerboarding is measured by tracking the number of times checkerboard
    frames are displayed (as opposed to the number of checkerboard frames
    produced), since the same checkerboard frame can be displayed more than
    once.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.CheckerboardingNeedRecord4.AllSequences"
    units="%" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of checkerboarded frames that contain any not fully
    recorded visible tiles, for a sequence by aggregating all its animations and
    interactions, where a sequence is a series of frames produced which contain
    at least one of the animations/interactions. Such animations and
    interactions encompass: Compositor-thread animations; Main-thread
    animations; JS animations; scrolling; and pinch-gestures.

    Checkerboarding is measured by tracking the number of times checkerboard
    frames are displayed (as opposed to the number of checkerboard frames
    produced), since the same checkerboard frame can be displayed more than
    once.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.Checkerboarding{Version}.AllSequences"
    units="%" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of checkerboarded frames for a sequence by aggregating
    all its animations and interactions, where a sequence is a series of frames
    produced which contain at least one of the animations/interactions. Such
    animations and interactions encompass: Compositor-thread animations;
    Main-thread animations; JS animations; scrolling; and pinch-gestures.

    Checkerboarding is measured by tracking the number of times checkerboard
    frames are displayed (as opposed to the number of checkerboard frames
    produced), since the same checkerboard frame can be displayed more than
    once.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.
  </summary>
  <token key="Version" variants="CheckerboardingVersion"/>
</histogram>

<histogram name="Graphics.Smoothness.Checkerboarding{Version}.{Sequence}"
    units="%" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of checkerboarded frames for a sequence by aggregating
    all {Sequence}, where a sequence is a series of frames produced which
    contain at least one of the aforementioned effects.

    Checkerboarding is measured by tracking the number of times checkerboard
    frames are displayed (as opposed to the number of checkerboard frames
    produced), since the same checkerboard frame can be displayed more than
    once.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.
  </summary>
  <token key="Version" variants="CheckerboardingVersion"/>
  <token key="Sequence" variants="AccumulatedSequences"/>
</histogram>

<histogram
    name="Graphics.Smoothness.Checkerboarding{Version}.{Thread}{Sequence}"
    units="%" expires_after="2025-01-26">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of checkerboarded frames for a sequence by aggregating
    all {Sequence}, where a sequence is a series of frames produced which
    contain at least one of the aforementioned effects.

    Checkerboarding is measured by tracking the number of times checkerboard
    frames are displayed (as opposed to the number of checkerboard frames
    produced), since the same checkerboard frame can be displayed more than
    once.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.
  </summary>
  <token key="Version" variants="CheckerboardingVersion"/>
  <token key="Thread" variants="SmoothnessThread"/>
  <token key="Sequence" variants="SmoothnessSequence"/>
</histogram>

<histogram name="Graphics.Smoothness.Jank3.AllSequences" units="%"
    expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of janks for a sequence by aggregating all its animations
    and interactions, where a sequence is a series of frames produced which
    contain at least one of the animations/interactions. Such animations and
    interactions encompass: Compositor-thread animations; Main-thread
    animations; JS animations; scrolling; and pinch-gestures.

    Jank is measured by tracking the number of abrupt increases in frame
    presentation interval, divided by the total number of frames expected to be
    produced and displayed. The lower this number is, the less the smoothness
    varies over time.

    Note that this metric is reported only when there are sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until there are enough frames to produce the metric.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.Jank3.{Sequence}" units="%"
    expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of janks for a sequence by aggregating all {Sequence},
    where a sequence is a series of frames produced which contain at least one
    of the aforementioned effects.

    Jank is measured by tracking the number of abrupt increases in frame
    presentation interval, divided by the total number of frames expected to be
    produced and displayed. The lower this number is, the less the smoothness
    varies over time.

    Note that this metric is reported only when there are sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until there are enough frames to produce the metric.
  </summary>
  <token key="Sequence" variants="AccumulatedSequences"/>
</histogram>

<histogram name="Graphics.Smoothness.Jank3.{Thread}{Sequence}" units="%"
    expires_after="2025-02-09">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of janks for a sequence by aggregating all {Sequence},
    where a sequence is a series of frames produced which contain at least one
    of the aforementioned effects.

    Jank is measured by tracking the number of abrupt increases in frame
    presentation interval, divided by the total number of frames expected to be
    produced and displayed. The lower this number is, the less the smoothness
    varies over time.

    Note that this metric is reported only when there are sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until there are enough frames to produce the metric.
  </summary>
  <token key="Thread" variants="SmoothnessThread"/>
  <token key="Sequence" variants="SmoothnessSequence"/>
</histogram>

<histogram name="Graphics.Smoothness.MaxPercentDroppedFrames_1sWindow"
    units="%" expires_after="2025-01-05">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of dropped frames for in a 1 second sliding window.

    PercentDroppedFrames is measured by tracking the number of frames which were
    not displayed on screen out of the total number of frames expected to be
    produced and displayed. In other words, the lower this number is, the
    smoother experience.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.PercentDroppedFrames3.AllSequences"
    units="%" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of dropped frames for a sequence by aggregating all its
    animations and interactions, where a sequence is a series of frames produced
    which contain at least one of the animations/interactions. Such animations
    and interactions encompass: Compositor-thread animations; Main-thread
    animations; JS animations; scrolling; and pinch-gestures.

    PercentDroppedFrames is measured by tracking the number of frames which were
    not displayed on screen out of the total number of frames expected to be
    produced and displayed. In other words, the lower this number is, the
    smoother the experience.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.

    This is a new implementation of the older
    Graphics.Smoothness.PercentDroppedFrames.AllInteractions metric.

    See http://shortn/_ItBDdHoyCf (internal only) for more details.

    This histogram is of special interest to the chrome-analysis-team@. Do not
    change its semantics or retire it without talking to them first.
  </summary>
</histogram>

<histogram name="Graphics.Smoothness.PercentDroppedFrames3.{Sequence}"
    units="%" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of dropped frames for a sequence by aggregating all
    {Sequence}, where a sequence is a series of frames produced which contain at
    least one of the aforementioned effects.

    PercentDroppedFrames is measured by tracking the number of frames which were
    not displayed on screen out of the total number of frames expected to be
    produced and displayed. In other words, the lower this number is, the
    smoother the experience.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.

    This is a new implementation of the older
    Graphics.Smoothness.PercentDroppedFrames.AllInteractions metric.
  </summary>
  <token key="Sequence" variants="AccumulatedSequences"/>
</histogram>

<histogram
    name="Graphics.Smoothness.PercentDroppedFrames3.{Sequence}.1MinAfterResume"
    units="%" expires_after="2025-02-02">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of dropped frames for a sequence by aggregating all
    {Sequence}, where a sequence is a series of frames produced which contain at
    least one of the aforementioned effects.

    PercentDroppedFrames is measured by tracking the number of frames which were
    not displayed on screen out of the total number of frames expected to be
    produced and displayed. In other words, the lower this number is, the
    smoother the experience.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.

    This metric is only recorded for 1 minute after the device is resumed.

    This is supported by ChromeOS only.
  </summary>
  <token key="Sequence" variants="AccumulatedSequences"/>
</histogram>

<histogram name="Graphics.Smoothness.PercentDroppedFrames3.{Thread}{Sequence}"
    units="%" expires_after="2025-01-19">
  <owner>[email protected]</owner>
  <owner>[email protected]</owner>
  <summary>
    Tracks the percent of dropped frames for a sequence by aggregating all
    {Sequence}, where a sequence is a series of frames produced which contain at
    least one of the aforementioned effects.

    PercentDroppedFrames is measured by tracking the number of frames which were
    not displayed on screen out of the total number of frames expected to be
    produced and displayed. In other words, the lower this number is, the
    smoother the experience.

    Note that this metric is reported only when there are a sufficient number of
    frames (&gt;= 100). If there are sequences with fewer frames, then these are
    aggregated until an additional sequence completes where there are (&gt;=
    100) frames available in total.

    This is a new implementation of the older
    Graphics.Smoothness.PercentDroppedFrames.AllInteractions metric.
  </summary>
  <token key="Thread" variants="SmoothnessThread"/>
  <token key="Sequence" variants="SmoothnessSequence"/>
</histogram>

</histograms>

</histogram-configuration>