<!--
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 Event histograms
along with a detailed description for each histogram.

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

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

<histogram-configuration>

<histograms>

<variants name="EventLatencyVersion">
  <variant name=""
      summary="This histogram will eventually be replaced by its
               TotalLatency2 equivalent which uses an improved bucketing"/>
  <variant name="2"
      summary="This histogram is similar to its TotalLatency (non-v2)
               equivalent except that it uses an improved bucketing. We will
               eventually remove the non-v2 version"/>
</variants>

<variants name="ScrollJankOperator">
  <variant name="Max" summary="maximum number of vsyncs a frames was delayed"/>
  <variant name="Sum" summary="sum of missed vsyncs across all frames"/>
</variants>

<variants name="ScrollLength">
  <variant name="" summary="all scrolls"/>
  <variant name=".Large"
      summary="large scrolls - number of presented frames more than 64"/>
  <variant name=".Medium"
      summary="medium length scrolls - number of presented frames between
               [17,64]"/>
  <variant name=".Small"
      summary="small scrolls - number of presented frames between [1,16]"/>
</variants>

<variants name="TopControlsState">
  <variant name=".NoTopControlsMoved" summary="Top controls did not change."/>
  <variant name=".TopControlsMoved" summary="Top controls changed."/>
</variants>

<histogram name="Event.AggregatedLatency.Renderer2" units="microseconds"
    expires_after="2022-04-24">
  <owner>flackr@chromium.org</owner>
  <summary>
    Time between initiation of any input event and the renderer receiving and
    starting to process it.

    Team: input-dev@chromium.org.

    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="Event.AndroidActionDown.ToolType" enum="MotionEventToolType"
    expires_after="never">
<!-- expires-never: Needed for long-term usage tracking for different types of
     pointers. -->

  <owner>mustaq@chromium.org</owner>
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Tracks the number of Android MotionEvents with ACTION_DOWN or
    ACTION_POINTER_DOWN or ACTION_BUTTON_PRESS for each ToolType (unknown,
    finger, mouse or stylus).

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.BrowserVerifiedUserActivation" enum="BooleanSuccess"
    expires_after="2021-10-17">
  <owner>liviutinta@chromium.org</owner>
  <owner>mustaq@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Records whether Browser User Activation Verification is successful or not.
    We are interested in how many times the Browser User Activation Verification
    fails vs how many times it succeeds.
  </summary>
</histogram>

<histogram
    name="Event.DownEventCount.PerInputFormFactorDestinationCombination2"
    enum="DownEventInputFormFactorDestinationCombination2"
    expires_after="2024-02-25">
  <owner>tbuckley@chromium.org</owner>
  <summary>
    The number of down events received per destination, input and form factor
    combination.

    Input is down events generated by mouse/touch/stylus. Form factor is down
    events generated by clamshell/touchviewLandscape/touchviewPortrait.
    Destination: Every down event that is targeted to each destination will be
    counted including those that don't have an effect. For example: Tapping on a
    disabled button inside the browser frame will be treated as down events on
    browser window.
  </summary>
</histogram>

<histogram name="Event.GestureCreated" enum="UIEventType"
    expires_after="2024-04-01">
  <owner>kuscher@google.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    The gesture-events recognized and dispatched by the browser gesture
    recognizer. This replaces Ash.GestureCreated, which did not record events on
    Android and Windows.

    Note: this metric was expired from 2020-03-01 to 2023-04-04.
  </summary>
</histogram>

<histogram name="Event.InputEventPrediction.Scroll.Frame{ScoreType}"
    units="pixels" expires_after="2024-03-13">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    NOTE: this metric was expired from M97 to 2023-03-14. Overshoot distance in
    pixels between a predicted scroll position and the corresponding
    interpolated real scroll position that occurred at the frame time.

    The difference between {ScoreType} and Frame{ScoreType} is the former uses
    prediction time and the later uses frame time.

    Team: input-dev@chromium.org.
  </summary>
  <token key="ScoreType">
    <variant name="OverPrediction" summary="Positive score values"/>
    <variant name="PredictionScore" summary="Score abolute value"/>
    <variant name="UnderPrediction" summary="Negative score values"/>
  </token>
</histogram>

<histogram name="Event.InputEventPrediction.Scroll.PredictionJitter"
    units="pixels" expires_after="2024-03-13">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    NOTE: this metric was expired from M97 to 2023-03-14. Euclidean distance in
    pixels between two successive variations of touch scroll deltas which are
    the difference between a predicted scroll position and its corresponding
    interpolated real position that occurred at prediction time.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.InputEventPrediction.Scroll.VisualJitter" units="pixels"
    expires_after="2024-03-13">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    NOTE: this metric was expired from M97 to 2023-03-14. Euclidean distance in
    pixels between two successive variations of touch scroll deltas which are
    the difference between a predicted scroll position and the interpolated real
    position that occurred at frame time.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.InputEventPrediction.Scroll.{ScoreType}" units="pixels"
    expires_after="2024-03-13">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    NOTE: this metric was expired from M97 to 2023-03-14. Overshoot distance in
    pixels between a predicted scroll position and the corresponding
    interpolated real scroll position that occurred at the frame time.

    Team: input-dev@chromium.org.
  </summary>
  <token key="ScoreType">
    <variant name="OverPrediction" summary="Positive score values"/>
    <variant name="PredictionScore" summary="Score abolute value"/>
    <variant name="UnderPrediction" summary="Negative score values"/>
  </token>
</histogram>

<histogram name="Event.Jank.DelayedFramesPercentage" units="%"
    expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    NOTE: The metric is deprecated and renamed to
    Event.ScrollJank.DelayedFramesPercentage.FixedWindow

    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. This metric reports the percentage of delayed
    frames within an arbitrary window of 64 frames.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
</histogram>

<histogram name="Event.Jank.MissedVsyncCount" units="counts"
    expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    NOTE: The metric is deprecated and renamed to
    Event.ScrollJank.MissedVsyncsSum.FixedWindow

    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. For janky frames, this metric counts number
    of vsyncs the frame was delayed by. The metric gets reported for a windows
    of 64 reported frames.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
</histogram>

<histogram name="Event.Jank.PredictorJankyFramePercentage" units="%"
    expires_after="2024-03-20">
  <owner>mekk@google.com</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    A frame is deemed janky if an irregular jump in screen displacement occured
    in consecutive frames, this metric is the percentage of those janky frames
    per 50 produced frames and is only emitted if a scroll has more than 50
    frames in sa sequence. This metric is used to asses the scrolling prediction
    performance as the scroll predictor should smooth out those irregular jumps.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY.
  </summary>
</histogram>

<histogram name="Event.Jank.ScrollUpdate.TotalJankyAndNonJankyDuration"
    enum="JankyBoolean" expires_after="2022-11-24">
  <owner>nuskos@google.com</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    IMPORTANT: This was deprecated and stopped being emitted due to overflow
    from the counters being emitted in Microseconds instead of milliseconds like
    it was supposed to. Please see
    Event.Jank.ScrollUpdate.TotalJankyAndNonJankyDuration2.

    Each time a ScrollUpdate event which was displayed on the screen is
    processed, an amount of samples equal to the event processing duration in
    milliseconds is emitted into the corresponding bucket.

    Thus the ratio of the two represents the average amount of time scrolling is
    janky.
  </summary>
</histogram>

<histogram name="Event.Jank.ScrollUpdate.TotalJankyAndNonJankyDuration2"
    enum="JankyBoolean" expires_after="2024-02-25">
  <owner>nuskos@google.com</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    Each time a ScrollUpdate event which was displayed on the screen is
    processed, an amount of samples equal to the event processing duration in
    milliseconds is emitted into the corresponding bucket.

    Thus the ratio of the two represents the average amount of time scrolling is
    janky.
  </summary>
</histogram>

<histogram
    name="Event.Jank.ScrollUpdate.{ScrollSpeed}.{VsyncStatus}.FrameAboveJankyThreshold2"
    units="ratio * 100" expires_after="2024-03-20">
  <owner>mekk@google.com</owner>
  <owner>woa-performance@google.com</owner>
  <summary>
    This metric is the ratio between a larger screen displacement divided by a
    following small screen displacement {ScrollSpeed}. If the larger screen
    displacement was deemed janky given the predictor performance, and is only
    emitted if there is {VsyncStatus}. This metric is used to asses the
    scrolling prediction performance as the scroll predictor should smooth out
    those irregular jumps.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY.
  </summary>
  <token key="VsyncStatus">
    <variant name="MissedVsync" summary="a missed vsync"/>
    <variant name="NoMissedVsync" summary="no missed vsync"/>
  </token>
  <token key="ScrollSpeed">
    <variant name="FastScroll"
        summary="offset by 1.2, the jank threshold for fast scrolls.
                 |d_large/d_small - 1.2|"/>
    <variant name="SlowScroll"
        summary="offset by 1.4, the jank threshold for slow scrolls.
                 |d_large/d_small - 1.4|"/>
  </token>
</histogram>

<histogram name="Event.Latency.EndToEnd.KeyPress" units="microseconds"
    expires_after="2024-02-25">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.KeyPressed.TotalLatency metric (see crbug.com/1054021).

    Time between the OS receiving a keyboard event and the resulting GPU frame
    swap. If no swap was induced by the event, no recording is made. Only
    recorded for key presses.

    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="Event.Latency.EndToEnd.TouchpadPinch2" units="microseconds"
    expires_after="2024-02-25">
  <owner>nzolghadr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.GesturePinch*.TotalLatency metrics (see crbug.com/1054021).

    Time between the OS receiving a touchpad pinch event and the resulting GPU
    frame swap. If no swap was induced by the event, no recording is made.
  </summary>
</histogram>

<histogram name="Event.Latency.HitTest" units="microseconds"
    expires_after="2023-10-22">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Duration of a non-resurive hitTest operation. The hit test is non-recursive
    when the AllowChildFrameContent flag is clear. See also
    Event.Latency.HitTestRecusrive.

    Team: paint-dev@chromium.org.

    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="Event.Latency.HitTestRecursive" units="microseconds"
    expires_after="2023-10-22">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Duration of a recursive hitTest operation. The hit test is recursive when
    the AllowChildFrameContent flag is set. See also Event.Latency.HitTest.

    Team: paint-dev@chromium.org.

    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="Event.Latency.OS2.{EventType}" units="ms"
    expires_after="2024-08-14">
  <owner>flackr@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between input event received by OS and sent to Chrome, recorded for
    each event when it is received by Chrome. Replaced Event.Latency.OS which
    was calculated incorrectly on Windows.

    Warning: On Windows, the timestamps of most events come from a clock with a
    several msec resolution so will have an abnormal distribution even when
    TimeTicks::IsHighResolution returns true. The exception is touch events
    which usually come from the high-resolution clock when
    TimeTicks::IsHighResolution returns true.
  </summary>
  <token key="EventType">
    <variant name="KEY_PRESSED"/>
    <variant name="MOUSE_PRESSED"/>
    <variant name="MOUSE_WHEEL"/>
    <variant name="TOUCH_MOVED"/>
    <variant name="TOUCH_PRESSED"/>
    <variant name="TOUCH_RELEASED"/>
  </token>
</histogram>

<histogram
    name="Event.Latency.ScrollBegin.Scrollbar.TimeToScrollUpdateSwapBegin4"
    units="microseconds" expires_after="2023-08-08">
  <owner>nzolghadr@chromium.org</owner>
  <owner>gerchiko@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.FirstGestureScrollUpdate.Scrollbar.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of an input event that resulted in a scrollbar
    scroll and the start of the frame swap on the GPU service caused by the
    generated ScrollUpdate gesture event if that ScrollUpdate is the first such
    event in a given scroll gesture event sequence. If no swap was induced by
    the event, no recording is made.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org.

    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="Event.Latency.ScrollBegin.TimeToScrollUpdateSwapBegin2"
    units="microseconds" expires_after="2023-10-22">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.FirstGestureScrollUpdate.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a wheel/touch event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made. If no
    swap was induced by the event, no recording is made.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollBegin.Touch.AverageLagPresentation"
    units="pixels" expires_after="2024-06-12">
  <owner>flackr@chromium.org</owner>
  <owner>sahir.vellani@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Measures an average distance that represents how the page sticks to the
    finger when user scrolls. Only reports touch scrolling. See
    https://docs.google.com/document/d/154jddNiKtxELBvrjLz9v6A7sA1J3iwQQzySHgtY12Oo/

    This is the lag observed in processing the Gesture Scroll Begin Event. In
    each touch interaction there is a GSB followed by multiple Gesture Scroll
    Updates, which are separately logged by
    Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.

    Note: This histogram was expired from 2022-05-01 to 2023-06-20.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollBegin.Touch.AverageLagPresentation.NoPrediction"
    units="pixels" expires_after="2024-06-12">
  <owner>flackr@chromium.org</owner>
  <owner>sahir.vellani@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Measures an average distance that represents how the page sticks to the
    finger when user scrolls if prediction was disabled. Only reports touch
    scrolling. See
    https://docs.google.com/document/d/154jddNiKtxELBvrjLz9v6A7sA1J3iwQQzySHgtY12Oo/

    This is the lag observed in processing the Gesture Scroll Begin Event. In
    each touch interaction there is a GSB followed by multiple Gesture Scroll
    Updates, which are separately logged by
    Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.

    Note: This histogram was expired from 2022-11-23 to 2023-06-20.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollBegin.Touch.TimeToScrollUpdateSwapBegin4{TopControlsState}"
    units="microseconds" expires_after="2023-06-30">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.FirstGestureScrollUpdate.Touchscreen.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a touch event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org.

    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. {TopControlsState}
  </summary>
  <token key="TopControlsState" variants="TopControlsState">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Event.Latency.ScrollBegin.Wheel.TimeToScrollUpdateSwapBegin4"
    units="microseconds" expires_after="2024-02-04">
  <owner>flackr@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.FirstGestureScrollUpdate.Wheel.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a wheel event and the start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event
    if that ScrollUpdate is the first such event in a given scroll gesture event
    sequence. If no swap was induced by the event, no recording is made.

    Team: input-dev@chromium.org.

    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="Event.Latency.ScrollInertial.Touch.TimeToScrollUpdateSwapBegin4"
    units="microseconds" expires_after="2022-07-31">
  <obsolete>
    Removed in 2022-09. Replaced by
    EventLatency.InertialGestureScrollUpdate.Touchscreen.TotalLatency.
  </obsolete>
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Time between initial creation of a ScrollUpdate gesture event generated from
    a touchscreen fling and the start of the frame swap on the GPU service
    caused by the generated ScrollUpdate gesture event. If no swap was induced
    by the event, no recording is made.

    Team: input-dev@chromium.org.

    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="Event.Latency.ScrollJank" enum="Boolean"
    expires_after="2024-02-25">
  <owner>ddrone@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Tracks janky frames while processing scroll events, which are defined as
    frames taking longer than half of vsync interval compared to previous or
    next frame.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.JankyDuration" units="ms"
    expires_after="2024-02-11">
  <owner>ddrone@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Total duration (wall time in milliseconds of potentially concurrent events)
    of LatencyInfo::GestureScrollUpdate events that are detected as janky during
    a particular scroll.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.JankyDurationPercentage" units="%"
    expires_after="2024-02-04">
  <owner>ddrone@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Percentage of duration of scroll events that are detected as janky during a
    particular scroll.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.JankyEvents" units="counts"
    expires_after="2024-02-25">
  <owner>ddrone@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Count of LatencyInfo::GestureScrollUpdate events that are detected as janky
    during a particular scroll.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollUpdate.Scrollbar.TimeToScrollUpdateSwapBegin4"
    units="microseconds" expires_after="2023-08-08">
  <owner>flackr@chromium.org</owner>
  <owner>arakeri@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.GestureScrollUpdate.Scrollbar.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a scrollbar event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event.
    If no swap was induced by the event, no recording is made. The first GSU of
    every scrolling sequence is excluded from this metric.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org.

    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="Event.Latency.ScrollUpdate.TimeToScrollUpdateSwapBegin2"
    units="microseconds" expires_after="2024-03-17">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.GestureScrollUpdate.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a wheel/touch event and start of the frame
    swap on the GPU service caused by the generated ScrollUpdate gesture event.
    If no swap was induced by the event, no recording is made. The first GSU of
    every scrolling sequence is excluded from this metric.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.TotalDuration" units="ms"
    expires_after="2024-02-25">
  <owner>ddrone@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Total duration (wall time in milliseconds of potentially concurrent events)
    of LatencyInfo::GestureScrollUpdate events during a particular scroll.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.TotalEvents" units="counts"
    expires_after="2024-03-17">
  <owner>ddrone@google.com</owner>
  <owner>chrometto-team@google.com</owner>
  <summary>
    Count of LatencyInfo::GestureScrollUpdate events during a particular scroll.
  </summary>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation"
    units="pixels" expires_after="2024-06-12">
  <owner>flackr@chromium.org</owner>
  <owner>sahir.vellani@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Measures an average distance that represents how the page sticks to the
    finger when user scrolls. Only reports touch scrolling. See
    https://docs.google.com/document/d/154jddNiKtxELBvrjLz9v6A7sA1J3iwQQzySHgtY12Oo/

    This is the lag observed in processing the Gesture Scroll Updates occurring
    in the lifetime of a scroll interaction.

    Note: This histogram was expired from 2022-12-25 to 2023-06-20.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.NoPrediction"
    units="pixels" expires_after="2024-06-12">
  <owner>flackr@chromium.org</owner>
  <owner>sahir.vellani@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Measures an average distance that represents how the page sticks to the
    finger when user scrolls if prediction was disabled. Only reports touch
    scrolling. See
    https://docs.google.com/document/d/154jddNiKtxELBvrjLz9v6A7sA1J3iwQQzySHgtY12Oo/

    This is the lag observed in processing the Gesture Scroll Updates occurring
    in the lifetime of a scroll interaction.

    Note: This histogram was expired from 2022-11-23 to 2023-06-12.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.RemainingLagPercentage"
    units="%" expires_after="2024-06-12">
  <owner>flackr@chromium.org</owner>
  <owner>sahir.vellani@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Percentage of touch lag that prediction wasn't able to remove.

    This is the ratio (Lag_with_prediction)/(Lag_without_prediction). Lag is the
    average distance between the finger and page positons during touch
    scrolling.

    0% means all the lag existing before prediction was removed. 100% means that
    prediction had no impact. Greater than 100% means that prediction introduced
    more lag.

    This metric doesn't distinguish between OverPrediction and UnderPrediction.
    A same absolute value of OverPrediction or UnderPrediction will result in
    the same RemainingLagPercentage value.

    Lag_with_prediction =
    Event.Latency.ScrollUpdate.Touch.AverageLagPresentation
    Lag_without_prediction =
    Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.NoPrediction

    Note: This histogram was expired from 2022-11-23 to 2023-06-20.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram
    name="Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.{PredictionImpact}"
    units="pixels" expires_after="2024-06-12">
  <owner>flackr@chromium.org</owner>
  <owner>sahir.vellani@microsoft.com</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Improvement of prediction in touch lag. It is defined as
    (Lag_without_prediction - Lag_with_prediction).

    Lag is the distance between the finger position and the rendered position.

    When positive, prediction improves touch performance (reduces lag). When
    negative, prediction worsens touch performance (increases lag).

    The duration of the interaction/interval is either 1s, or the time from when
    the user starts scrolling to lifting the finger, whichever is smaller.

    This metric uses directionless distances, therefore it doesn't distinguish
    between OverPrediction and UnderPrediction. A same absolute value of
    OverPrediction or UnderPrediction will result in the same PredictionImpact
    value.

    Lag_with_prediction =
    Event.Latency.ScrollUpdate.Touch.AverageLagPresentation
    Lag_without_prediction =
    Event.Latency.ScrollUpdate.Touch.AverageLagPresentation.NoPrediction

    Note: This histogram was expired from 2022-11-23 to 2023-06-20.

    Team: input-dev@chromium.org.
  </summary>
  <token key="PredictionImpact">
    <variant name="PredictionNegative" summary="Negative impact values"/>
    <variant name="PredictionPositive" summary="Positive impact values"/>
  </token>
</histogram>

<histogram
    name="Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4{TopControlsState}"
    units="microseconds" expires_after="2023-06-30">
  <owner>flackr@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.GestureScrollUpdate.Touchscreen.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a touch event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric.

    Do not modify this metric in any way without contacting
    speed-metrics-dev@chromium.org AND chrome-analysis-team@google.com.

    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. {TopControlsState}
  </summary>
  <token key="TopControlsState" variants="TopControlsState">
    <variant name=""/>
  </token>
</histogram>

<histogram name="Event.Latency.ScrollUpdate.Wheel.TimeToScrollUpdateSwapBegin4"
    units="microseconds" expires_after="2024-02-04">
  <owner>flackr@chromium.org</owner>
  <summary>
    NOTE: This metric is deprecated in favor of
    EventLatency.GestureScrollUpdate.Wheel.TotalLatency metric (see
    crbug.com/1054021).

    Time between initial creation of a wheel event and start of the frame swap
    on the GPU service caused by the generated ScrollUpdate gesture event. If no
    swap was induced by the event, no recording is made. The first GSU of every
    scrolling sequence is excluded from this metric.

    Team: input-dev@chromium.org.

    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="Event.MaxDragDistance.{ToolType}" units="dips"
    expires_after="never">
<!-- expires-never: Needed for long-term tracking of dragging vs clicking behavior. -->

  <owner>mustaq@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    The maximum Euclidean distance (in DIPs, device independent pixels) a
    single-pointer gesture travels from its starting position during the period
    the gesture has been active. The histogram is measured separately for every
    pointer type that can be used in gesture recognition: finger, and pen in
    drawing/eraser mode. The type names used here follow the corresponding
    labels in |MotionEvent.ToolType|.
  </summary>
  <token key="ToolType">
    <variant name="ERASER"/>
    <variant name="FINGER"/>
    <variant name="STYLUS"/>
  </token>
</histogram>

<histogram name="Event.PageShow.Persisted" enum="EventPageShowPersisted"
    expires_after="2023-03-26">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>fergal@chromium.org</owner>
  <summary>
    Records whether the pageshow event had its persisted flag set in renderer or
    browser. This flag is on if and only if the page is restored from
    back-forward cache. This flag is off e.g. during the page load. This is
    recorded when pageshow event fires on a main frame in renderer, or when
    browser triggers this event on a main frame. This was a boolean on M95 and
    before, is extended to an enum EventPageShoerPersisted as of M96.
  </summary>
</histogram>

<histogram name="Event.PageShow.Persisted.Termination.Status" units="status"
    expires_after="2022-12-25">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>fergal@chromium.org</owner>
  <summary>
    When we send a PageLifecycleState update that should trigger a pageshow
    event with its persisted flag set and then the renderer exits, this records
    the status of the process. This is an enum (base::TerminationStatus in
    base/process/kill.h) but the values vary by platform so we cannot use a
    regular enum metric. This is temporary debugging for
    https://crbug.com/1234634.
  </summary>
</histogram>

<histogram name="Event.PageShow.Persisted.{Event}.Time" units="ms"
    expires_after="2022-10-01">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>fergal@chromium.org</owner>
  <summary>
    When we send a PageLifecycleState update that should trigger a pageshow
    event with its persisted flag set and have not yet received an ack, we log
    how long it takes for certain events to occur. This is temporary debugging
    for https://crbug.com/1234634.
  </summary>
  <token key="Event">
    <variant name="Termination.Normal" summary="renderer exited normally"/>
    <variant name="Termination.Unexpected"
        summary="renderer exited unexpectedly"/>
    <variant name="ViewDestroyed" summary="renderer view host was destroyed"/>
  </token>
</histogram>

<histogram name="Event.PassiveListeners" enum="EventResultType"
    expires_after="2024-03-17">
  <owner>dtapuska@chromium.org</owner>
  <summary>
    The result of handling of MouseWheel, TouchStart, TouchMove, TouchEnd events
    in the renderer.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.ScrollJank.DelayedFramesPercentage.FixedWindow"
    units="%" expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. This metric reports the percentage of delayed
    frames within a window of size 64.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
</histogram>

<histogram name="Event.ScrollJank.DelayedFramesPercentage.PerScroll{Length}"
    units="%" expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. This metric reports the percentage of delayed
    frames within a scroll. This metric gets reported for {Length}.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
  <token key="Length" variants="ScrollLength"/>
</histogram>

<histogram name="Event.ScrollJank.MissedVsyncs.PerFrame" units="counts"
    expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. This metric counts number of vsyncs the frame
    was delayed by(which could be zero). The metric gets reported for every
    frame.

    Please see Event.ScrollJank.MissedVsyncs* for other related histograms
    aggregated over a fixed window and emitted once per window.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
</histogram>

<histogram name="Event.ScrollJank.MissedVsyncs{Operator}.FixedWindow"
    units="counts" expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. This metric reports the {Operator} in window
    of size 64. Metric emits zeros as well i.e. the case when no frames were
    delayed.

    Please see Event.ScrollJank.MissedVsyncs.PerFrame for unaggregated version
    of this histogram.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
  <token key="Operator" variants="ScrollJankOperator"/>
</histogram>

<histogram name="Event.ScrollJank.MissedVsyncs{Operator}.PerScroll{Length}"
    units="counts" expires_after="2024-03-20">
  <owner>kartarsingh@google.com</owner>
  <owner>mekk@google.com</owner>
  <owner>woa-performance-team@google.com</owner>
  <summary>
    A frame is deemed janky during a scroll if there was no presented frame in
    the previous vsync, and the current frame contains input that was not
    presented during the missed frame. Missed input is determined by comparing
    the timestamp of the earliest input of the current frame, to that of the
    last input of the previously presented frame. If the delta of the timestamps
    is less than a vsync + vsync/2, then the input is considered to have been
    intended for the missed frame. This metric reports the {Operator} in scroll.
    Metric emits zeros as well i.e. the case when no frames were delayed. The
    metric gets reported for {Length}.

    Please see Event.ScrollJank.MissedVsyncs.PerFrame for unaggregated version
    of this histogram.

    For more details about this metric, please check
    http://doc/1Y0u0Tq5eUZff75nYUzQVw6JxmbZAW9m64pJidmnGWsY
  </summary>
  <token key="Operator" variants="ScrollJankOperator"/>
  <token key="Length" variants="ScrollLength"/>
</histogram>

<histogram name="Event.SingleTapType" enum="TapDelayType" expires_after="M97">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    On non-mobile sites, gesture taps are delayed to prevent double taps from
    sending a click event. This stat counts the number of taps that are delayed
    by the double-tap delay versus those that are sent immediately on mobile
    sites.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.Touch.FilteredAtPassthroughQueue"
    enum="EventPreFilterResult" expires_after="2020-03-22">
  <owner>charliea@chromium.org</owner>
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Whether a given touch event is filtered by the passthrough touch event queue
    or not. If the event was filtered, a reason is given. Potential reasons for
    filtering include the page not having any registered touch handlers and the
    renderer process not responding to previous touch events.

    Team: input-dev@chromium.org
  </summary>
</histogram>

<histogram name="Event.Touch.GestureTarget" enum="BrowserGestureActionType"
    expires_after="2020-06-28">
  <owner>kuscher@google.com</owner>
  <owner>rbyers@chromium.org</owner>
  <summary>
    The gesture-events recognized and dispatched for UI components owned by the
    browser. This histogram was created as part of separating gesture events
    between the browser and Ash (crbug.com/826476). The enums are extracted from
    Ash.GestureTarget.
  </summary>
</histogram>

<histogram name="Event.Touch.TimedOutOnDesktopSite" enum="BooleanTimedOut"
    expires_after="2023-10-31">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    On non-mobile-optimized (desktop) sites, whether the ack response from the
    renderer for any event in a contiguous touch sequence exceeds the
    desktop-specific timeout threshold.

    Warning: This histogram has incomplete data. It expired on 2021-08-15 and
    then got re-enabled on M110.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.Touch.TimedOutOnMobileSite" enum="BooleanTimedOut"
    expires_after="2023-10-31">
  <owner>flackr@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    On mobile-optimized sites, whether the ack response from the renderer for
    any event in a contiguous touch sequence exceeds the mobile-specific timeout
    threshold.

    Warning: This histogram has incomplete data. It expired on 2021-08-15 and
    then got re-enabled on M110.

    Team: input-dev@chromium.org.
  </summary>
</histogram>

<histogram name="Event.TouchSelection.Duration" units="ms" expires_after="M77">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Duration of touch selection sequence which finished with the user selecting
    one of the text manipulation actions, such as copy, cut, or paste. The
    duration is measured from the moment the text selection handles are shown,
    and until the action is executed.
  </summary>
</histogram>

<histogram name="Event.TouchSelection.EndedWithAction" enum="BooleanSuccess"
    expires_after="M77">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Whether the touch selection sequence ended with the user selecting one of
    the text manipulation actions, such as copy, cut, or paste. after startup).
    Sequences ending with such action are considered successful.
  </summary>
</histogram>

<histogram name="Event.TouchSelection.WasDraggedDuration" units="ms"
    expires_after="M81">
  <owner>nzolghadr@chromium.org</owner>
  <summary>
    Duration of touch selection sequence which involved dragging a text
    selection handle. The duration is measured from the moment the text
    selection handles are shown, and until they are dismissed.
  </summary>
</histogram>

<histogram name="Event.UserActivation.TriggerFor{ActivationGatedApiType}"
    enum="UserActivationTriggerEnum" expires_after="2023-09-30">
  <owner>mustaq@chromium.org</owner>
  <owner>input-dev@chromium.org</owner>
  <summary>
    Tracks the notification-type for the user activation that resulted in a
    successful call for an activation-gated API (of type sticky, transient or
    consuming).
  </summary>
  <token key="ActivationGatedApiType">
    <variant name="Consuming"/>
    <variant name="Sticky"/>
    <variant name="Transient"/>
  </token>
</histogram>

<histogram name="Event.WaylandDragDrop.IncomingDataTransferTime" units="ms"
    expires_after="M90">
  <owner>rjkroege@chromium.org</owner>
  <owner>adunaev@igalia.com</owner>
  <summary>
    Delay between the drag coming into the window and the window is actually
    notified.
  </summary>
</histogram>

<histogram name="EventLatency.GestureScrollUpdate.Touchscreen.TotalLatency"
    units="microseconds" expires_after="never">
<!-- expires-never: guiding metric (internal: go/chrome-browser-guiding-metrics) -->

  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <owner>chrome-analysis-team@google.com</owner>
  <summary>
    When a user performs a scroll using touchscreen, a sequence of touch-move
    events are generated leading to a sequence of gesture-scroll-update events.
    This metric measures total latency of those gesture-scroll-update events
    excluding the first one in the sequence and those that are inertial (i.e.
    generated as a result of a user fling). Total latency means the time from
    when the touch-move causing a gesture-scroll-update is generated until when
    the changes caused by the event are successfully presented on the screen.

    This histogram will eventually be replaced by its TotalLatency2 equivalent
    which uses an improved bucketing.

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

<histogram name="EventLatency.GestureScrollUpdate.Touchscreen.TotalLatency2"
    units="microseconds" expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    When a user performs a scroll using touchscreen, a sequence of touch-move
    events are generated leading to a sequence of gesture-scroll-update events.
    This metric measures total latency of those gesture-scroll-update events
    excluding the first one in the sequence and those that are inertial (i.e.
    generated as a result of a user fling). Total latency means the time from
    when the touch-move causing a gesture-scroll-update is generated until when
    the changes caused by the event are successfully presented on the screen.

    This histogram is similar to its TotalLatency (non-v2) equivalent except
    that it uses an improved bucketing. We will eventually remove the non-v2
    version.

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

<histogram
    name="EventLatency.GestureScrollUpdate.{NonTouchscreenScrollInputType}.TotalLatency{Version}"
    units="microseconds" expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Tracks total latency of {NonTouchscreenScrollInputType}
    gesture-scroll-update events that are non-inertial (i.e. not generated due
    to a user fling) and not the first one in a scroll sequence, from when the
    user input causing the event is performed until the frame caused by the
    event is submitted by the GPU service and presented successfully on the
    screen.

    {Version}.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="NonTouchscreenScrollInputType">
    <variant name="Autoscroll" summary="autoscroll"/>
    <variant name="Scrollbar" summary="scrollbar"/>
    <variant name="Wheel" summary="mouse wheel or touchpad"/>
  </token>
  <token key="Version" variants="EventLatencyVersion"/>
</histogram>

<histogram name="EventLatency.TotalLatency" units="microseconds"
    expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Tracks total latency of all event types, from when the user input causing
    the event is performed until the frame caused by the event is submitted by
    the GPU service and presented successfully on the screen.

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

<histogram
    name="EventLatency.{NonGsuScrollEventType}.{ScrollInputType}.TotalLatency{Version}"
    units="microseconds" expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Tracks total latency of {ScrollInputType} {NonGsuScrollEventType}, from when
    the user input causing the event is performed until the frame caused by the
    event is submitted by the GPU service and presented successfully on the
    screen.

    {Version}.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="NonGsuScrollEventType">
    <variant name="FirstGestureScrollUpdate"
        summary="gesture-scroll-update events that are the first one in a
                 scroll sequence"/>
    <variant name="GestureScrollBegin"
        summary="gesture-scroll-begin event. These are rarely handled, as
                 most user initiated scrolls will start with
                 FirstGestureScrollUpdate. Which was added to match the
                 legacy
                 Event.Latency.ScrollUpdate.Touch.TimeToScrollUpdateSwapBegin4.
                 This tracks GestureScrollBegin"/>
    <variant name="GestureScrollEnd" summary="gesture-scroll-end events"/>
    <variant name="InertialGestureScrollUpdate"
        summary="gesture-scroll-update events that are inertial (i.e.
                 generated due to a user fling)"/>
  </token>
  <token key="ScrollInputType">
    <variant name="Autoscroll" summary="autoscroll"/>
    <variant name="Scrollbar" summary="scrollbar"/>
    <variant name="Touchscreen" summary="touchscreen"/>
    <variant name="Wheel" summary="mouse wheel or touchpad"/>
  </token>
  <token key="Version" variants="EventLatencyVersion"/>
</histogram>

<histogram name="EventLatency.{NonScrollPinchEventType}.TotalLatency"
    units="microseconds" expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Tracks total latency of {NonScrollPinchEventType}, from when the user input
    causing the event is performed generated until the frame caused by the event
    is submitted by the GPU service and presented successfully on the screen.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="NonScrollPinchEventType">
    <variant name="GestureDoubleTap" summary="gesture-double-tap events"/>
    <variant name="GestureLongPress" summary="gesture-long-press events"/>
    <variant name="GestureLongTap" summary="gesture-long-tap events"/>
    <variant name="GestureShowPress" summary="gesture-show-press events"/>
    <variant name="GestureTap" summary="gesture-tap events"/>
    <variant name="GestureTapCancel" summary="gesture-tap-cancel events"/>
    <variant name="GestureTapDown" summary="gesture-tap-down events"/>
    <variant name="GestureTapUnconfirmed"
        summary="gesture-tap-unconfirmed events"/>
    <variant name="GestureTwoFingerTap"
        summary="gesture-two-finger-tap events"/>
    <variant name="KeyPressed" summary="key-pressed events"/>
    <variant name="KeyReleased" summary="key-released events"/>
    <variant name="MouseDragged" summary="mouse-dragged events"/>
    <variant name="MouseMoved" summary="mouse-moved events"/>
    <variant name="MousePressed" summary="mouse-pressed events"/>
    <variant name="MouseReleased" summary="mouse-released events"/>
    <variant name="MouseWheel" summary="mouse-wheel events"/>
    <variant name="TouchMoved" summary="touch-moved events"/>
    <variant name="TouchPressed" summary="touch-pressed events"/>
    <variant name="TouchReleased" summary="touch-released events"/>
  </token>
</histogram>

<histogram name="EventLatency.{PinchEventType}.{PinchInputType}.TotalLatency"
    units="microseconds" expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Tracks total latency of {PinchInputType} {PinchEventType}, from when the
    user input causing the event is performed until the frame caused by the
    event is submitted by the GPU service and presented successfully on the
    screen.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="PinchEventType">
    <variant name="GesturePinchBegin" summary="gesture-pinch-begin events"/>
    <variant name="GesturePinchEnd" summary="gesture-pinch-end events"/>
    <variant name="GesturePinchUpdate"
        summary="gesture-pinch-update events in a scroll sequence"/>
  </token>
  <token key="PinchInputType">
    <variant name="Touchpad" summary="touchpad"/>
    <variant name="Touchscreen" summary="touchscreen"/>
  </token>
</histogram>

<histogram name="EventLatency.{ScrollEventType}.TotalLatency{Version}"
    units="microseconds" expires_after="2024-03-17">
  <owner>jonross@chromium.org</owner>
  <owner>graphics-dev@chromium.org</owner>
  <summary>
    Tracks total latency of {ScrollEventType}, from when the user input causing
    the event is performed generated until the frame caused by the event is
    submitted by the GPU service and presented successfully on the screen.

    {Version}.

    This histogram only records metrics on machines with high-resolution clocks.
  </summary>
  <token key="ScrollEventType">
    <variant name="FirstGestureScrollUpdate"
        summary="gesture-scroll-update events that are the first one in a
                 scroll sequence"/>
    <variant name="GestureScrollBegin" summary="gesture-scroll-begin events"/>
    <variant name="GestureScrollEnd" summary="gesture-scroll-end events"/>
    <variant name="GestureScrollUpdate"
        summary="gesture-scroll-update events that are non-inertial (i.e. not
                 generated due to a user fling) and not the first one in a
                 scroll sequence"/>
    <variant name="InertialGestureScrollUpdate"
        summary="gesture-scroll-update events that are inertial (i.e.
                 generated due to a user fling)"/>
  </token>
  <token key="Version" variants="EventLatencyVersion"/>
</histogram>

</histograms>

</histogram-configuration>
