<!--
Copyright 2017 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 Chrome UKM events
along with a detailed description for each.

See the following doc for details on how to add or remove entries in this file:
https://chromium.googlesource.com/chromium/src.git/+/main/services/metrics/ukm_api.md

Events may be marked with the attribute singular="True" to indicate that
the event will only occur once per source, and multiple entries will just
be describing additional metrics about the same event.
-->

<ukm-configuration>

<event name="AbandonedSRPNavigation" singular="True">
  <owner>rakina@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics recorded each time a SRP navigation/page load is abandoned (e.g. the
    navigation got cancelled, or the user backgrounded the app while the page
    load is not finished yet, etc. See AbandonedPageLoadMetricsObserver for more
    details).
  </summary>
  <metric name="AbandonReason">
    <summary>
      The reason the navigation/page load gets abandoned.
    </summary>
  </metric>
  <metric name="AbandonTimingFromLastMilestone">
    <summary>
      The time when the navigation/page load is abandoned, relative to the last
      milestone.
    </summary>
  </metric>
  <metric name="AbandonTimingFromNavigationStart">
    <summary>
      The time when the navigation/page load is abandoned, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="AFTEndTime">
    <summary>
      The timestamp of the AFT End event for the page load, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="AFTStartTime">
    <summary>
      The timestamp of the AFT Start event for the page load, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="BodyChunkEndTime">
    <summary>
      The timestamp of the body chunk end event for the page load, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="BodyChunkStartTime">
    <summary>
      The timestamp of the body chunk start event for the page load, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="CommitReceivedTime">
    <summary>
      The time when the CommitNavigation IPC for the navigation is received in
      the renderer process, relative to navigation start.
    </summary>
  </metric>
  <metric name="CommitSentTime">
    <summary>
      The time when the CommitNavigation IPC for the navigation is sent from the
      browser process, relative to navigation start.
    </summary>
  </metric>
  <metric name="DidCommitTime">
    <summary>
      The time when the DidCommit IPC for the navigation is received, relative
      to navigation start.
    </summary>
  </metric>
  <metric name="DidRequestNonSRP">
    <summary>
      Whether the navigation involves non-SRP URL (which later redirected to
      SRP).
    </summary>
  </metric>
  <metric name="DOMContentLoadedTime">
    <summary>
      The timestamp of when the &quot;DOMContentLoaded&quot; event is fired for
      the page load, relative to navigation start.
    </summary>
  </metric>
  <metric name="FirstContentfulPaintTime">
    <summary>
      The timestamp of the first contentful paint for the page load, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="FirstRedirectedRequestStartTime">
    <summary>
      The time when the first network request that got redirected for the
      navigation started, relative to navigation start.
    </summary>
  </metric>
  <metric name="FirstRedirectResponseReceived">
    <summary>
      Whether the first redirect response is received yet.
    </summary>
  </metric>
  <metric name="HeaderChunkEndTime">
    <summary>
      The timestamp of the header chunk end event for the page load, relative to
      navigation start.

      Note that this event is randomly sampled based on the JavaScript in the
      page, recorded at the frequency of 1%.
    </summary>
  </metric>
  <metric name="HeaderChunkStartTime">
    <summary>
      The timestamp of the header chunk start event for the page load, relative
      to navigation start.
    </summary>
  </metric>
  <metric name="LargestContentfulPaintTime">
    <summary>
      The timestamp of the largest contentful paint for the page load, relative
      to navigation start.
    </summary>
  </metric>
  <metric name="LastMilestoneBeforeAbandon">
    <summary>
      The last milestone before the navigation is abandoned.
    </summary>
  </metric>
  <metric name="LoaderStartTime">
    <summary>
      The time when the URLLoader for the navigation started, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="LoadEventStartedTime">
    <summary>
      The timestamp of when the &quot;load&quot; event is fired for the page
      load, relative to navigation start.
    </summary>
  </metric>
  <metric name="NonRedirectedRequestStartTime">
    <summary>
      The time when the final network request that didn't got redirected for the
      navigation started, relative to navigation start.
    </summary>
  </metric>
  <metric name="NonRedirectResponseReceived">
    <summary>
      Whether the non-redirect/final response is received yet.
    </summary>
  </metric>
  <metric name="ParseStartTime">
    <summary>
      The time when the parsing of the HTTP response body started, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="PreviousBackgroundedTime">
    <summary>
      If we've experienced backgrounding while the navigation/page load is
      running before this abandonment event happened, this will have the time
      when the backgrounding happened, relative to navigation start.
    </summary>
  </metric>
  <metric name="PreviousHiddenTime">
    <summary>
      If we've experienced hiding while the navigation/page load is running
      before this abandonment event happened, this will have the time when the
      hiding happened, relative to navigation start.
    </summary>
  </metric>
  <metric name="RendererProcessInitTime">
    <summary>
      The time when the final renderer process for the navigation is
      initialized, relative to navigation start.
    </summary>
  </metric>
  <metric name="RTT">
    <summary>
      The network connection RTT when the abandonment happens, in milliseconds.
      This is useful to see if the navigation happens on a slow network.
    </summary>
  </metric>
</event>

<event name="AboutThisSiteStatus">
  <owner>olesiamarukhnno@google.com</owner>
  <summary>
    Recorded on each page info bubble open when &quot;About this site&quot; data
    is fetched.
  </summary>
  <metric name="Status" enum="AboutThisSiteStatus">
    <summary>
      The status of the &quot;About this site&quot; info, including if the data
      is available and whether the proto is valid. See
      |page_info::about_this_site_validation::AboutThisSiteStatus| for enum
      elements.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="AbusiveExperienceHeuristic.JavaScriptDialog">
  <owner>yaoxia@chromium.org</owner>
  <metric name="DismissalCause">
    <summary>
      An enum that specifies the dismissal reason for JavaScript popup dialog
      that can be triggered by window.alert(), window.confirm() or
      window.prompt(). See JavaScriptDialogTabHelper::DismissalCause for the
      enum elements.
    </summary>
  </metric>
</event>

<event name="AbusiveExperienceHeuristic.TabUnder">
  <owner>csharrison@chromium.org</owner>
  <metric name="DidTabUnder">
    <summary>
      True if the page attempted a tab-under navigation.
    </summary>
  </metric>
</event>

<event name="AbusiveExperienceHeuristic.WindowOpen">
  <owner>yaoxia@chromium.org</owner>
  <summary>
    Recorded whenever window.open() is called when AdTagging is enabled.
  </summary>
  <metric name="FromAdScript">
    <summary>
      True if the page called window.open() with an ad script in the stack.
    </summary>
  </metric>
  <metric name="FromAdSubframe">
    <summary>
      True if the page called window.open() from an ad subframe.
    </summary>
  </metric>
</event>

<event name="Accessibility.Canvas">
  <owner>rhalavati@google.com</owner>
  <summary>
    Recorded once for any visible canvas, or offscreen canvas which pushes its
    rendered output directly into a placeholder element in the DOM.
  </summary>
  <metric name="HasKeyboardListener" enum="Boolean">
    <summary>
      Records whether the canvas listens to keyboard events or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasMouseListener" enum="Boolean">
    <summary>
      Records whether the canvas listens to mouse events or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasText" enum="Boolean">
    <summary>
      Records whether the canvas drew any text or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsOffscreen" enum="Boolean">
    <summary>
      Records whether the canvas is off-screen or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NeedsAccessibilitySupport" enum="Boolean">
    <summary>
      Records whether the canvas is heuristically estimated to need
      accessibility support. Note that this value does not exactly represent the
      heuristic result when accessibility is not enabled because some of the
      properties are not computed by the accessibility layer.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="RenderingContext" enum="CanvasRenderingAPI">
    <summary>
      Type of the rendering contexts created for the canvas.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ImageDescriptions">
  <owner>dtseng@chromium.org</owner>
  <owner>nektar@chromium.org</owner>
  <summary>
    Tracks automatic image descriptions provided to blind users.
  </summary>
  <metric name="Description" enum="Boolean">
    <summary>
      Whether the image description included a description.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ImageAlreadyHasLabel" enum="Boolean">
    <summary>
      Whether the image already had label text before it was augmented with an
      additional description.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="OCR" enum="Boolean">
    <summary>
      Whether the image description included OCR text.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.PageZoom">
  <owner>aldietz@google.com</owner>
  <owner>mschillaci@google.com</owner>
  <owner>chrome-a11y-core@google.com</owner>
  <summary>
    Tracks usage of Page Zoom on Chrome for Android. Recorded each time the
    slider is dismissed if the user changed the zoom level on this page before
    dismissal.
  </summary>
  <metric name="SliderZoomValue">
    <summary>
      For users who changed the individual zoom level on this page, tracks what
      zoom level has been set on the page at slider dismissal. There may be
      multiple instances where the slider is opened on the same page, so there
      may be multiple values logged per page. The value will be an integer
      between 25 and 500, inclusive, bucketed in intervals of 5.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ReadAnything">
  <owner>abigailbklein@google.com</owner>
  <summary>
    Records the time taken to distill a web page.
  </summary>
  <metric name="MergedDistillationTime.Failure">
    <summary>
      The amount of time (ms) required to distill a web page with the merged
      algorithm if distillation failed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MergedDistillationTime.Success">
    <summary>
      The amount of time (ms) required to distill a web page with the merged
      algorithm if distillation succeeded.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="RulesDistillationTime.Failure">
    <summary>
      The amount of time (ms) required to distill a web page with the rules
      based algorithm if distillation failed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="RulesDistillationTime.Success">
    <summary>
      The amount of time (ms) required to distill a web page with the rules
      based algorithm if distillation succeeded.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ReadAnything.Distillation">
  <owner>lwinston@google.com</owner>
  <owner>kristislee@google.com</owner>
  <summary>
    Records a distillation success / failure after a new page has been opened
    with reading mode.
  </summary>
  <metric name="DistillationStatus" enum="ReadAnythingDistillationStatus">
    <summary>
      The status of the distillation
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ReadAnything.DistillationQuality">
  <owner>alfredohiguera@google.com</owner>
  <summary>
    Records content quality metrics for a page, including text similarity
    (RougeL), structural integrity, and formatting preservation. This event is
    recorded when the distillation of a page is completed.
  </summary>
  <metric name="FormatScore">
    <summary>
      Evaluates the preservation of formatting elements (bold, italic,
      blockquotes, and code) in the distilled HTML compared to the accessibility
      tree. Value is a percentage (0-100).
    </summary>
  </metric>
  <metric name="LinkDensityRatio">
    <summary>
      The ratio of link density in the distilled HTML compared to the link
      density in the original accessibility tree. Value is a percentage (0-100).
    </summary>
  </metric>
  <metric name="RougeLF1">
    <summary>
      The ROUGE-L F1 score of the distilled text compared to the original text
      extracted from the AXTree, measuring sequence overlap of words. Value is a
      percentage (0-100).
    </summary>
  </metric>
  <metric name="RougeLF2">
    <summary>
      The ROUGE-L F2 score of the distilled text compared to the original text
      extracted from the AXTree. Value is a percentage (0-100).
    </summary>
  </metric>
  <metric name="RougeLPrecision">
    <summary>
      The ROUGE-L precision score of the distilled text compared to the original
      text extracted from the AXTree. Value is a percentage (0-100).
    </summary>
  </metric>
  <metric name="RougeLRecall">
    <summary>
      The ROUGE-L recall score of the distilled text compared to the original
      text extracted from the AXTree. Value is a percentage (0-100).
    </summary>
  </metric>
  <metric name="StructScore">
    <summary>
      Evaluates the preservation of structural elements (headings and lists) in
      the distilled HTML compared to the accessibility tree. Value is a
      percentage (0-100).
    </summary>
  </metric>
</event>

<event name="Accessibility.ReadAnything.EmptyState">
  <owner>abigailbklein@google.com</owner>
  <summary>
    Recorded when an empty state is shown in Read Anything. The empty state is
    shown whenever distillation fails. When this happens, the user can
    &quot;select to distill&quot;, meaning they can manually select text in the
    main web page they would like to see in reading mode.
  </summary>
  <metric name="TotalNumSelections">
    <summary>
      Total number of selections made.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ReadAnything.OmniboxEntryPoint">
  <owner>lwinston@google.com</owner>
  <owner>kristislee@google.com</owner>
  <owner>komo-eng@google.com</owner>
  <summary>
    Recorded when the user interacts with or is shown the Read Anything omnibox
    entry point.
  </summary>
  <metric name="Shown" enum="Boolean">
    <summary>
      Whether the omnibox chip is shown.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Triggered" enum="Boolean">
    <summary>
      Whether the chip was triggered (via mouse or keyboard) to open Reading
      mode.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ReadAnything.OmniboxEntryPointDistillation">
  <owner>lwinston@google.com</owner>
  <owner>kristislee@google.com</owner>
  <owner>komo-eng@google.com</owner>
  <summary>
    Recorded when distillation completes after the Read Anything omnibox entry
    point was used to open reading mode.
  </summary>
  <metric name="DistillationStatus" enum="ReadAnythingDistillationStatus">
    <summary>
      The distillation status in reading mode after the omnibox entry point was
      used to open reading mode.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ReadAnything.SidePanel">
  <owner>gusmartin@google.com</owner>
  <owner>lwinston@google.com</owner>
  <owner>komo-eng@google.com</owner>
  <summary>
    Records Read Anything side panel events
  </summary>
  <metric name="Closed" enum="Boolean">
    <summary>
      A flag set to true when the Read Anything side panel is closed for a given
      source ID.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="EntryPoint" enum="SidePanelOpenTrigger">
    <summary>
      Records the UI entry point that the user clicked to open the Read Anything
      side panel.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Shown" enum="Boolean">
    <summary>
      A flag set to true when the Read Anything side panel is shown for a given
      source ID.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.Renderer">
  <owner>lucasradaelli@google.com</owner>
  <owner>nektar@chromium.org</owner>
  <summary>
    Tracks the amount of time sending accessibility events from web renderers.
  </summary>
  <metric name="CpuTime.SendPendingAccessibilityEvents">
    <summary>
      The amount of time spent in
      RenderAccessibilityImpl.SendPendingAccessibilityEvents
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Accessibility.ScreenAI">
  <owner>abigailbklein@google.com</owner>
  <owner>rhalavati@google.com</owner>
  <owner>kyungjunlee@google.com</owner>
  <summary>
    Records the time taken to distill a web page.
  </summary>
  <metric name="Screen2xDistillationTime.Failure">
    <summary>
      The amount of time (ms) required to distill a web page if distillation
      failed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Screen2xDistillationTime.Success">
    <summary>
      The amount of time (ms) required to distill a web page if distillation
      succeeded.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Actor.AttemptOtpFilling">
  <owner>salmaabdelaziz@google.com</owner>
  <owner>dembski@google.com</owner>
  <summary>
    Metrics recorded when the Actor executes the AttemptOtpFilling tool on a
    webpage to attempt to fill an OTP.
  </summary>
  <metric name="PredictedOtpType" enum="AttemptOtpFillingPredictedOtpType">
    <summary>
      Records the OTP source type (SMS, Email, Authenticator App, Unknown)
      predicted by the Actor for the current main frame URL.
    </summary>
  </metric>
</event>

<event name="Actor.Login">
  <owner>npm@google.com</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Metrics recorded for an actor login request. Recorded once per request when
    it completes or reaches a significant milestone.
  </summary>
  <metric name="AccountAutoSelected">
    <summary>
      Recorded when the account used to login is automatically selected due to a
      previous user choice to always allow logging in with that account.
    </summary>
  </metric>
  <metric name="AccountTypesShown">
    <summary>
      An enum of the result from a query to get credentials.
    </summary>
  </metric>
  <metric name="DeduplicationOccurred">
    <summary>
      Recorded when there was some deduplication performed in order to show the
      accounts. Recorded at most once per actor request to show accounts to sign
      in.
    </summary>
  </metric>
  <metric name="FederatedContinuationShown">
    <summary>
      Recorded when the FedCM continuation API is invoked during an actor
      autologin flow.
    </summary>
  </metric>
  <metric name="FederatedHangingFedCmRequestExists">
    <summary>
      Recorded when there is a hanging FedCM request during an actor login
      request.
    </summary>
  </metric>
  <metric name="FederatedLoginResult" enum="ActorLoginFederatedLoginResult">
    <summary>
      An enum with the final result from a federated actor login request.
    </summary>
  </metric>
  <metric name="FederatedLoginStatus">
    <summary>
      Enum recorded when there is an identity provider requested by the
      embedder.
    </summary>
  </metric>
  <metric name="GetCredentialsCompletedToAccountChosen">
    <summary>
      Returns the time (ms) from when a &quot;get credentials&quot; request
      completes until an account is chosen.
    </summary>
  </metric>
  <metric name="GetCredentialsLatency">
    <summary>
      Returns the time (ms) from actor login request to when the &quot;get
      credentials&quot; request is completed.
    </summary>
  </metric>
  <metric name="NumAccountsShown">
    <summary>
      The number of accounts shown to the user during an actor login request.
    </summary>
  </metric>
  <metric name="SelectedAccountType">
    <summary>
      An enum of the type of account chosen by the user to login during an actor
      login request.
    </summary>
  </metric>
</event>

<event name="Actor.OriginGating">
  <owner>dylancutler@google.com</owner>
  <owner>chrome-ai-security@google.com</owner>
  <summary>
    Metrics related to actor Origin Gating, a security feature controlling which
    origins actors may interact with.
  </summary>
  <metric name="EngineState" enum="ActorEngineState">
    <summary>
      The ExecutionEngine::State when this metric is emitted. We want to see
      where in the actor tool use lifecycle that these navigation confirmations
      occur most frequently.
    </summary>
  </metric>
  <metric name="ServerConfirmationResult" enum="ActorServerConfirmationResult">
    <summary>
      The result of confirming with the server if the actor may interact with
      the origin of a URL that Chrome detects the actor navigating to. If the
      result is kNotRequired then the origin was already previously evaluated.
    </summary>
  </metric>
</event>

<event name="AdFrameLoad">
  <owner>johnidel@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Records metrics associated with a single ad frame for a page load. An ad
    frame includes itself and all of its child frames. Only recorded for frames
    with non-zero bytes. Recorded when a page is destroyed or when the app is
    backgrounded on mobile.
  </summary>
  <metric name="CpuTime.PeakWindowedPercent">
    <summary>
      The peak percentage of CPU utilization attributed to the frame in any 30
      second window prior to user activation. Frames that exist for less than 30
      seconds still use 30 seconds as the denominator for the calculation.
    </summary>
  </metric>
  <metric name="CpuTime.PreActivation">
    <summary>
      Wall time of tasks attributed to the frame after the frame received user
      activation. Measured in millseconds.
    </summary>
  </metric>
  <metric name="CpuTime.Total">
    <summary>
      Total wall time of tasks attributed to the frame. Measured in
      milliseconds.
    </summary>
  </metric>
  <metric name="FrameDepth">
    <summary>
      The depth of this frame's frame tree. There is no set limit on a frame's
      maximum depth.
    </summary>
  </metric>
  <metric name="Loading.CacheBytes2">
    <summary>
      Bytes loaded from the cache for all resources loaded within the frame.
      This includes bytes loaded from both the HTTP cache and memory cache. This
      is rounded down to the nearest exponential bucket (with a bucket ratio of
      1.3).
    </summary>
  </metric>
  <metric name="Loading.ImageBytes">
    <summary>
      Network bytes loaded for resources with an image mime type within the
      frame. Includes header bytes. This is rounded down to the nearest
      exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Loading.JavascriptBytes">
    <summary>
      Network bytes loaded for resources with a javascript mime type within the
      frame. Includes header bytes. This is rounded down to the nearest
      exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Loading.NetworkBytes">
    <summary>
      Network bytes loaded for all resources within the frame. Includes header
      bytes. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Loading.NumResources">
    <summary>
      Total number of resources loaded by the frame, including incomplete
      resources.
    </summary>
  </metric>
  <metric name="Loading.VideoBytes">
    <summary>
      Network bytes loaded for resources with a video/ mime type within the
      frame. Includes header bytes. This is rounded down to the nearest
      exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Status.CrossOrigin">
    <summary>
      An enum representing whether the frame was Cross-Origin or Same-Origin to
      its parent frame. See FrameData::OriginStatus.
    </summary>
  </metric>
  <metric name="Status.Media">
    <summary>
      An enum representing whether media was played in the frame. See
      FrameData::MediaStatus.
    </summary>
  </metric>
  <metric name="Status.UserActivation">
    <summary>
      An enum representing whether the frame received user activation. See
      FrameData::UserActivationStatus.
    </summary>
  </metric>
  <metric name="Timing.FirstContentfulPaint">
    <summary>
      Number of milliseconds before FirstContentfulpaint was reached in the
      frame. This is relative to subframe navigation start.
    </summary>
  </metric>
  <metric name="Timing.Interactive">
    <summary>
      Number of millseconds before Time-To-Interactive was reached in the frame.
      This is relative to subframe navigation start.
    </summary>
  </metric>
  <metric name="Visibility.FrameHeight">
    <summary>
      Last known height of the iframe in pixels. Not reported accurately when
      &quot;Visibility.Hidden&quot; is true. This is rounded down to the nearest
      exponential bucket (with a bucket ratio of 1.15).
    </summary>
  </metric>
  <metric name="Visibility.FrameWidth">
    <summary>
      Last known width of the iframe in pixels. Not reported accurately when
      &quot;Visibility.Hidden&quot; is true. This is rounded down to the nearest
      exponential bucket (with a bucket ratio of 1.15).
    </summary>
  </metric>
  <metric name="Visibility.Hidden">
    <summary>
      A 0 or 1 values representing whether the frame had a display=none styling
      set. Records the last known value.
    </summary>
  </metric>
</event>

<event name="AdPageLoad" singular="True">
  <owner>johnidel@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Recorded when a page has loaded non-zero ad bytes, and the page is being
    destroyed/navigated.
  </summary>
  <metric name="AdBytes">
    <summary>
      Amount of network bytes used to load ad resource on the page. Includes
      resources that did not finish, and top-level ads. Measured in kilobytes.
    </summary>
  </metric>
  <metric name="AdCpuTime">
    <summary>
      Amount of CPU wall time inside of ad iframes over the duration of a page
      load, while the page is in the foreground. Measured in milliseconds.
    </summary>
  </metric>
  <metric name="AdJavascriptBytes">
    <summary>
      Amount of network bytes used to load ad resources with a supported
      javascript mime type on the page. Measured in kilobytes.
    </summary>
  </metric>
  <metric name="AdVideoBytes">
    <summary>
      Amount of network bytes used to load ad resources with a video mime type
      on the page. Measured in kilobytes.
    </summary>
  </metric>
  <metric name="MainframeAdBytes">
    <summary>
      Amount of network bytes used to load ad resources in the main frame.
      Includes resources that did not finish but does not include resources in
      subframes. Measured in bytes. This is rounded to the nearest exponential
      bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="MaxAdDensityByArea">
    <summary>
      The estimated maximum density of ads on a page by area. Calculated as the
      area of ads on the page * 100 / page area. This counts each overlapping
      area once, it may be inaccurate due to updates and calculations being
      throttled.
    </summary>
  </metric>
  <metric name="MaxAdDensityByHeight">
    <summary>
      The estimated maximum density of ads on a page by height. Calculated as
      the combined height of ads on the page * 100 / page height. This counts
      each overlapping area once, it may be inaccurate due to updates and
      calculations being throttled.
    </summary>
  </metric>
  <metric name="TotalBytes">
    <summary>
      Amount of network bytes used to load resources on the page. Includes
      resources that did not finish. Measured in kilobytes.
    </summary>
  </metric>
</event>

<event name="AdPageLoadCustomSampling3" singular="True">
  <owner>yaoxia@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Recorded when the page is being destroyed/navigated away or when the app
    enters the background on mobile. This is separate from the `AdPageLoad`
    event to allow it to be recorded on all pages (i.e. not only pages that have
    loaded non-zero ad byte), and to allow a potentially different sampling.
    Both iframe and img ads are covered.
  </summary>
  <metric name="AverageViewportAdDensity">
    <summary>
      The estimated average viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the average of the densities accumulated over the page load time
      rounded to the nearest integer.
    </summary>
  </metric>
  <metric name="KurtosisViewportAdDensity">
    <summary>
      The estimated kurtosis of the viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the kurtosis of the densities accumulated over the page load time
      rounded to the nearest exponential bucket integer with bucket spacing 1.3.
      For negative values, the bucketing will be taken on its magnitude part.
    </summary>
  </metric>
  <metric name="SkewnessViewportAdDensity">
    <summary>
      The estimated skewness of the viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the skewness of the densities accumulated over the page load time
      rounded to the nearest exponential bucket integer with bucket spacing 1.3.
      For negative values, the bucketing will be taken on its magnitude part.
    </summary>
  </metric>
  <metric name="VarianceViewportAdDensity">
    <summary>
      The estimated variance of the viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the variance of the densities accumulated over the page load time
      rounded to the nearest exponential bucket integer with bucket spacing 1.3.
      For negative values, the bucketing will be taken on its magnitude part.
    </summary>
  </metric>
</event>

<event name="AdPageLoadCustomSampling4" singular="True">
  <owner>yaoxia@chromium.org</owner>
  <owner>johnidel@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Recorded when the page is being destroyed/navigated away or when the app
    enters the background on mobile. This is separate from the `AdPageLoad`
    event to allow it to be recorded on all pages (i.e. not only pages that have
    loaded non-zero ad byte), and to allow a potentially different sampling. For
    all metrics in this event: 1) all detected ad types (e.g., iframes, imgs)
    are included, and 2) ads obscured by non-ad content are excluded.
  </summary>
  <metric name="AverageViewportAdCountX100">
    <summary>
      The estimated average viewport ad count accumulated over the page load
      time, multiplied by 100 and rounded to the nearest exponential bucket
      integer with bucket spacing 1.15. This allows for 2 decimal places of
      precision.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="AverageViewportAdDensity">
    <summary>
      The estimated average viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the average of the densities accumulated over the page load time
      rounded to the nearest integer.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KurtosisViewportAdDensity">
    <summary>
      The estimated kurtosis of the viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the kurtosis of the densities accumulated over the page load time
      rounded to the nearest exponential bucket integer with bucket spacing 1.3.
      For negative values, the bucketing will be taken on its magnitude part.
    </summary>
  </metric>
  <metric name="SkewnessViewportAdDensity">
    <summary>
      The estimated skewness of the viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the skewness of the densities accumulated over the page load time
      rounded to the nearest exponential bucket integer with bucket spacing 1.3.
      For negative values, the bucketing will be taken on its magnitude part.
    </summary>
  </metric>
  <metric name="VarianceViewportAdDensity">
    <summary>
      The estimated variance of the viewport ad density. Each density value is
      calculated as the area of (iframe and img) ads within the viewport * 100 /
      viewport area, where each overlapping area is counted once. And this
      returns the variance of the densities accumulated over the page load time
      rounded to the nearest exponential bucket integer with bucket spacing 1.3.
      For negative values, the bucketing will be taken on its magnitude part.
    </summary>
  </metric>
</event>

<event name="AdsInterestGroup.AuctionLatency.V2">
  <owner>morlovich@chromium.org</owner>
  <owner>chrome-ads-core@google.com</owner>
  <summary>
    Captures latency-relevant metrics associated with a single FLEDGE auction.
    Many of these metrics are latency measurements, aggregated (mean/max) for
    parts of the auction flow that happen multiple times in an auction, e.g.
    calls to GenerateBid. Others are potentially latency-impacting measures of
    the auction, e.g. the number of InterestGroups, buyers, component auctions,
    bids that were scored either together or separately for the enforced and
    non-enforced KAnon modes. Finally, some of these metrics look at points in
    the auction flow where multiple inputs come together to assess which of
    these inputs most frequently appears on the latency critical path.
  </summary>
  <metric name="BidGenerationPhaseEndTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the last call to
      BidderWorklet::DeliverBidCallbackOnUserThread (the end of the
      BidGenerationPhase). The BidGenerationPhase represents the time during
      which ad-tech provided generateBid JavaScript functions are being
      executed. This is one of a series of metrics representing the duration of
      each phase of the auction, where the phases may overlap or have space
      between them. This is bucketed in linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="BidGenerationPhaseStartTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the first call to BidderWorklet::GenerateBidIfReady
      (specifically where that call corresponds to a bidder worklet for which
      all of its GenerateBid dependencies have been satisfied and it's about to
      call the ad-tech provided generateBid JavaScript function; the start of
      the BidGenerationPhase). The BidGenerationPhase represents the time during
      which ad-tech provided generateBid JavaScript functions are being
      executed. This is one of a series of metrics representing the duration of
      each phase of the auction, where the phases may overlap or have space
      between them. This is bucketed in linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="BidSignalsFetchPhaseEndTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the last call to BidderWorklet::GenerateBidIfReady
      (the end of the BidSignalsFetchPhase). The BidSignalsFetchPhase represents
      the time during which any bidder worklet is waiting for one or more of the
      GenerateBid dependencies, notably bidding signals, in anticipation of
      calling an ad-tech provided generateBid JavaScript function. This is one
      of a series of metrics representing the duration of each phase of the
      auction, where the phases may overlap or have space between them. This is
      bucketed in linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="BidSignalsFetchPhaseStartTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the first call to BidderWorklet::BeginGenerateBid (the
      start of the BidSignalsFetchPhase). The BidSignalsFetchPhase represents
      the time during which any bidder worklet is waiting for one or more of the
      GenerateBid dependencies, notably bidding signals, in anticipation of
      calling an ad-tech provided generateBid JavaScript function. This is one
      of a series of metrics representing the duration of each phase of the
      auction, where the phases may overlap or have space between them. This is
      bucketed in linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="EndToEndLatencyInMillis">
    <summary>
      Time in ms between AdAuctionServiceImpl::RunAdAuction and
      AdAuctionServiceImpl::OnAuctionComplete. Roughly equivalent to UMA metric,
      Ads.InterestGroup.Auction.AuctionWithWinnerTime.
    </summary>
  </metric>
  <metric name="KAnonymityBidMode" enum="KAnonymityBidMode">
    <summary>
      Indicates the KAnonymityBidMode used for this auction.
    </summary>
  </metric>
  <metric name="LoadInterestGroupPhaseEndTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the last call to
      AuctionRunner::OnLoadInterestGroupsComplete (the end of the
      LoadInterestGroupPhase). This is one of a series of metrics representing
      the duration of each phase of the auction, where the phases may overlap or
      have space between them. Unlike other phase metrics, this phase has no
      associated StartTime metric, since this phase begins at the start of the
      auction. This is bucketed in linear buckets of 10 ms. This metric is
      identical to LoadInterestGroupPhaseLatencyInMillis except that this metric
      uses linear bucketing.
    </summary>
  </metric>
  <metric name="LoadInterestGroupPhaseLatencyInMillis">
    <summary>
      The latency in milliseconds between the start of the auction (the
      AuctionRunner constructor), and the call to
      AuctionRunner::OnLoadInterestGroupsComplete. This is related to UMA
      metric, Ads.InterestGroup.Auction.LoadGroupsTime, except that, in a
      multi-seller auction, the UMA metric is recorded once per component
      auction and then again for the top-level auction, whereas this metric is
      recorded only once, for the top-level auction. This metric also isn't
      limited to those cases where there were InterestGroups to load, since we
      can independently filter this based on the value of NumInterestGroups.
    </summary>
  </metric>
  <metric name="MaxAdditionalBidDecodeLatencyInMillis">
    <summary>
      Max latency of the time spent decoding each additional bid. This only
      includes additional bids that were successfully decoded, so those negative
      targeted or sent for scoring, and not those that encountered any error
      while being decoded, e.g. invalid base64, JSON parsing errors, etc.
    </summary>
  </metric>
  <metric name="MaxBidForOneInterestGroupLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this records
      the max latency in millis between BuyerHelper::StartGeneratingBids and
      BuyerHelper::OnGenerateBidComplete, counting each BidState once. As such,
      this includes starting the BidderWorklet in that latency. This latency
      window is intentionally terminated in OnGenerateBidComplete, and not in
      OnGenerateBidCompleteInternal, so that this *excludes* bids filtered
      during reprioritization, as well as those that failed because of some
      fatal error, except that we explicitly *include* those that timed out.
    </summary>
  </metric>
  <metric name="MaxComponentAuctionLatencyInMillis">
    <summary>
      Only for multi-seller auctions, this is the highest latency of the bidding
      and scoring phase, observed across all of the component auctions. This
      latency is measured as the time between the call to
      StartBiddingAndScoringPhase and the call to OnComponentAuctionComplete.
      This metric only has a value for entries that represent multi-seller
      auctions, as indicated by a value for the NumSellersWithBidders metric of
      two or greater.
    </summary>
  </metric>
  <metric name="MaxConfigPromisesResolvedCriticalPathLatencyInMillis">
    <summary>
      Max latency between the start of the BiddingAndScoring phase and when
      config promises are resolved. In a single-seller auction, this is only
      recorded if the auction has config promises; in a multi-seller auction,
      this is only recorded for component auctions and the top-level auction for
      those that have config promises. In auctions for which the config promises
      are resolved before the bidding and auction phase, a critical path latency
      of zero is recorded. This shows how long additional bids would have had to
      wait for the config promises to be resolved, since they couldn't be
      processed until the BiddingAndScoring phase anyway.
    </summary>
  </metric>
  <metric name="MaxConfigPromisesResolvedLatencyInMillis">
    <summary>
      Max latency between the auction start time and when config promises are
      resolved. In a single-seller auction, this is only recorded if the auction
      has config promises; in a multi-seller auction, this is only recorded for
      component auctions and the top-level auction for those that have config
      promises. This is not the same as how long the auction needed to wait for
      a config promise, since other work happened simultaneously. That's better
      captured by the GenerateBid critical path metrics and the
      ConfigPromisesResolved critical path metrics.
    </summary>
  </metric>
  <metric name="MaxGenerateBidCodeReadyLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that GenerateBid waited for the Script and/or WASM
      load. If both Script and WASM were requested, this is the latency of the
      slower of the two to complete.
    </summary>
  </metric>
  <metric name="MaxGenerateBidConfigPromisesLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that GenerateBid waited for the fulfillment of the
      config promises.
    </summary>
  </metric>
  <metric name="MaxGenerateBidDirectFromSellerSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that GenerateBid waited for the download of the
      DirectFromSellerSignals. This combines the PerBuyerSignals and
      AuctionSignals, and as such, this is the latency of the slower of the two
      to complete.
    </summary>
  </metric>
  <metric name="MaxGenerateBidTrustedBiddingSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that GenerateBid waited for the download of the
      TrustedBiddingSignals. This includes *all* TrustedBiddingSignals for that
      buyer, because of how those all need to be available in order to
      reprioritize InterestGroups and apply per-buyer group limits.
    </summary>
  </metric>
  <metric name="MaxGenerateSingleBidLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this records
      the max latency in millis of calls to GenerateSingleBid. This is related
      to UMA metric, Ads.InterestGroup.Auction.GenerateBidTime, except that it's
      aggregated across all GenerateSingleBid calls for this auction. Like the
      UMA metric, this measures each distinct call to GenerateSingleBid, for
      which there could be two for a given InterestGroup, one that satisfies the
      kAnon threshold, and one that doesn't.
    </summary>
  </metric>
  <metric name="MaxScoreAdCodeReadyLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that ScoreAd waited for the Script load.
    </summary>
  </metric>
  <metric name="MaxScoreAdDirectFromSellerSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that ScoreAd waited for the download of the
      DirectFromSellerSignals. This combines the SellerSignals and
      AuctionSignals, and as such, this is the latency of the slower of the two
      to complete.
    </summary>
  </metric>
  <metric name="MaxScoreAdFlowLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this
      records, across all of the ads scored, the max latency in millis between
      InterestGroupAuction::ScoreBidIfReady (the second call to it, which in
      turn calls SellerWorklet::ScoreAd) and
      InterestGroupAuction::OnScoreAdComplete.
    </summary>
  </metric>
  <metric name="MaxScoreAdLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this records
      the max latency in millis of calls to V8State::ScoreAd. This is related to
      UMA metric, Ads.InterestGroup.Auction.ScoreAdTime, except that it's
      aggregated across all GenerateSingleBid calls for this auction.
    </summary>
  </metric>
  <metric name="MaxScoreAdTrustedScoringSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the max time in millis that ScoreAd waited for the download of the
      TrustedScoringSignals. This includes *all* TrustedScoringSignals for that
      buyer, because of how those all need to be available in order to
      reprioritize InterestGroups and apply per-buyer group limits.
    </summary>
  </metric>
  <metric name="MeanAdditionalBidDecodeLatencyInMillis">
    <summary>
      Mean latency of the time spent decoding each additional bid. This only
      includes additional bids that were successfully decoded, so those negative
      targeted or sent for scoring, and not those that encountered any error
      while being decoded, e.g. invalid base64, JSON parsing errors, etc.
    </summary>
  </metric>
  <metric name="MeanBidForOneInterestGroupLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this records
      the mean latency in millis between BuyerHelper::StartGeneratingBids and
      BuyerHelper::OnGenerateBidComplete, counting each BidState once. As such,
      this includes starting the BidderWorklet in that latency. This latency
      window is intentionally terminated in OnGenerateBidComplete, and not in
      OnGenerateBidCompleteInternal, so that this *excludes* bids filtered
      during reprioritization, as well as those that failed because of some
      fatal error, except that we explicitly *include* those that timed out.
    </summary>
  </metric>
  <metric name="MeanComponentAuctionLatencyInMillis">
    <summary>
      Only for multi-seller auctions, this is the mean latency of the bidding
      and scoring phase, aggregated across each of the component auctions. This
      latency is measured as the time between the call to
      StartBiddingAndScoringPhase and the call to OnComponentAuctionComplete.
      This metric only has a value for entries that represent multi-seller
      auctions, as indicated by a value for the NumSellersWithBidders metric of
      two or greater.
    </summary>
  </metric>
  <metric name="MeanConfigPromisesResolvedCriticalPathLatencyInMillis">
    <summary>
      Mean latency between the start of the BiddingAndScoring phase and when
      config promises are resolved. In a single-seller auction, this is only
      recorded if the auction has config promises; in a multi-seller auction,
      this is only recorded for component auctions and the top-level auction for
      those that have config promises. In auctions for which the config promises
      are resolved before the bidding and auction phase, a critical path latency
      of zero is recorded. This shows how long additional bids would have had to
      wait for the config promises to be resolved, since they couldn't be
      processed until the BiddingAndScoring phase anyway.
    </summary>
  </metric>
  <metric name="MeanConfigPromisesResolvedLatencyInMillis">
    <summary>
      Mean latency between the auction start time and when config promises are
      resolved. In a single-seller auction, this is only recorded if the auction
      has config promises; in a multi-seller auction, this is only recorded for
      component auctions and the top-level auction for those that have config
      promises. This is not the same as how long the auction needed to wait for
      a config promise, since other work happened simultaneously. That's better
      captured by the GenerateBid critical path metrics and the
      ConfigPromisesResolved critical path metrics.
    </summary>
  </metric>
  <metric name="MeanGenerateBidCodeReadyCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other
      GenerateBid dependencies were satisfied that GenerateBid was blocked
      waiting for the Script and/or WASM load. This combines Script and WASM
      loads.
    </summary>
  </metric>
  <metric name="MeanGenerateBidCodeReadyLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that GenerateBid waited for the Script and/or WASM
      load. If both Script and WASM were requested, this is the latency of the
      slower of the two to complete.
    </summary>
  </metric>
  <metric name="MeanGenerateBidConfigPromisesCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other
      GenerateBid dependencies were satisfied that GenerateBid was blocked
      waiting for the fulfillment of the config promises.
    </summary>
  </metric>
  <metric name="MeanGenerateBidConfigPromisesLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that GenerateBid waited for the fulfillment of the
      config promises.
    </summary>
  </metric>
  <metric
      name="MeanGenerateBidDirectFromSellerSignalsCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other
      GenerateBid dependencies were satisfied that GenerateBid was blocked
      waiting for the download of the DirectFromSellerSignals. This combines the
      PerBuyerSignals and AuctionSignals since they should arrive at roughly the
      same time.
    </summary>
  </metric>
  <metric name="MeanGenerateBidDirectFromSellerSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that GenerateBid waited for the download of the
      DirectFromSellerSignals. This combines the PerBuyerSignals and
      AuctionSignals, and as such, this is the latency of the slower of the two
      to complete.
    </summary>
  </metric>
  <metric
      name="MeanGenerateBidTrustedBiddingSignalsCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other
      GenerateBid dependencies were satisfied that GenerateBid was blocked
      waiting for the download of the TrustedBiddingSignals. This includes *all*
      TrustedBiddingSignals for that buyer, because of how those all need to be
      available in order to reprioritize InterestGroups and apply per-buyer
      group limits.
    </summary>
  </metric>
  <metric name="MeanGenerateBidTrustedBiddingSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that GenerateBid waited for the download of the
      TrustedBiddingSignals. This includes *all* TrustedBiddingSignals for that
      buyer, because of how those all need to be available in order to
      reprioritize InterestGroups and apply per-buyer group limits.
    </summary>
  </metric>
  <metric name="MeanGenerateSingleBidLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this records
      the mean latency in millis of calls to GenerateSingleBid. This is related
      to UMA metric, Ads.InterestGroup.Auction.GenerateBidTime, except that it's
      aggregated across all GenerateSingleBid calls for this auction. Like the
      UMA metric, this measures each distinct call to GenerateSingleBid, for
      which there could be two for a given InterestGroup, one that satisfies the
      kAnon threshold, and one that doesn't.
    </summary>
  </metric>
  <metric name="MeanScoreAdCodeReadyCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other ScoreAd
      dependencies were satisfied that ScoreAd was blocked waiting for the
      Script load.
    </summary>
  </metric>
  <metric name="MeanScoreAdCodeReadyLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that ScoreAd waited for the Script load.
    </summary>
  </metric>
  <metric name="MeanScoreAdDirectFromSellerSignalsCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other ScoreAd
      dependencies were satisfied that ScoreAd was blocked waiting for the
      download of the DirectFromSellerSignals. This combines the SellerSignals
      and AuctionSignals since they should arrive at roughly the same time.
    </summary>
  </metric>
  <metric name="MeanScoreAdDirectFromSellerSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that ScoreAd waited for the download of the
      DirectFromSellerSignals. This combines the SellerSignals and
      AuctionSignals, and as such, this is the latency of the slower of the two
      to complete.
    </summary>
  </metric>
  <metric name="MeanScoreAdFlowLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this
      records, across all of the ads scored, the mean latency in millis between
      InterestGroupAuction::ScoreBidIfReady (the second call to it, which in
      turn calls SellerWorklet::ScoreAd) and
      InterestGroupAuction::OnScoreAdComplete.
    </summary>
  </metric>
  <metric name="MeanScoreAdLatencyInMillis">
    <summary>
      Aggregated across all components for a multi-seller auctions, this records
      the mean latency in millis of calls to V8State::ScoreAd. This is related
      to UMA metric, Ads.InterestGroup.Auction.ScoreAdTime, except that it's
      aggregated across all GenerateSingleBid calls for this auction.
    </summary>
  </metric>
  <metric name="MeanScoreAdTrustedScoringSignalsCriticalPathLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean critical path latency in millis, the time after all other ScoreAd
      dependencies were satisfied that ScoreAd was blocked waiting for the
      download of the TrustedScoringSignals. This includes *all*
      TrustedScoringSignals for that buyer, because of how those all need to be
      available in order to reprioritize InterestGroups and apply per-buyer
      group limits.
    </summary>
  </metric>
  <metric name="MeanScoreAdTrustedScoringSignalsLatencyInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time in millis that ScoreAd waited for the download of the
      TrustedScoringSignals. This includes *all* TrustedScoringSignals for that
      buyer, because of how those all need to be available in order to
      reprioritize InterestGroups and apply per-buyer group limits.
    </summary>
  </metric>
  <metric name="MeanTimeBidsQueuedWaitingForConfigPromisesInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time that bids that were ready for scoring before the config
      promises were fulfilled were blocked waiting on the config promises. For
      multi-seller auctions, this only includes bids in the component auctions,
      and not rescoring of bids in the top-level auction.
    </summary>
  </metric>
  <metric name="MeanTimeBidsQueuedWaitingForSellerWorkletInMillis">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the mean time that bids that were ready for scoring before the seller
      worklet became available were blocked waiting on the seller worklet. For
      multi-seller auctions, this only includes bids in the component auctions,
      and not rescoring of bids in the top-level auction.
    </summary>
  </metric>
  <metric name="MeanTimeTopLevelBidsQueuedWaitingForConfigPromisesInMillis">
    <summary>
      Only recorded for multi-seller auctions, this records the mean time that
      top-level bids that were ready for rescoring before the config promises
      were fulfilled were blocked waiting on the config promises.
    </summary>
  </metric>
  <metric name="MeanTimeTopLevelBidsQueuedWaitingForSellerWorkletInMillis">
    <summary>
      Only recorded for multi-seller auctions, this records the mean time that
      top-level bids that were ready for rescoring before the seller worklet
      became available were blocked waiting on the seller worklet.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsNegativeTargeted">
    <summary>
      Number of additional bids intentionally suppressed because at least one of
      the additional bid's specified negative interest groups was present. This
      is not an error condition; this is the intentional behavior of negative
      targeting. Still so, these additional bids are not scored, and do not
      participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToBuyerNotAllowed">
    <summary>
      Number of additional bids rejected because the additional bid's owner was
      not allowed to bid in that auction by IsInterestGroupAPIAllowed. These
      additional bids are not scored, and do not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToCurrencyMismatch">
    <summary>
      Number of additional bids rejected because the additional bid specified a
      currency that didn't match the currency associated with that buyer. These
      additional bids are not scored, and do not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToDecodeError">
    <summary>
      Number of additional bids rejected because the additional bid from inside
      the signed additional bid was not structured as expected (encountered an
      error in DecodeAdditionalBid). This includes additional bids whose
      replay-prevention fields - auctionNonce, seller and topLevelSeller - are
      missing or don't match those of the auction. This also includes additional
      bids whose owner was not found in the auction's interestGroupBuyers. These
      additional bids are not scored, and do not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToInvalidBase64">
    <summary>
      Number of additional bids rejected because the signed additional bid in
      the Ad-Auction-Additional-Bid response header was not a valid base64
      string, and so could not be base64-decoded to JSON. These additional bids
      are not scored, and do not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToJsonParseError">
    <summary>
      Number of additional bids rejected because the additional bid from inside
      the signed additional bid was invalid JSON, and so failed to parse. These
      additional bids are not scored, and do not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToSignedBidDecodeError">
    <summary>
      Number of additional bids rejected because the signed additional bid JSON
      was not structured as expected (encountered an error in
      DecodeSignedAdditionalBid). These additional bids are not scored, and do
      not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsRejectedDueToSignedBidJsonParseError">
    <summary>
      Number of additional bids rejected because the signed additional bid was
      invalid JSON, and so failed to parse. These additional bids are not
      scored, and do not participate in the auction.
    </summary>
  </metric>
  <metric name="NumAdditionalBidsSentForScoring">
    <summary>
      Number of additional bids scored. These additional bids participate in the
      auction alongside other additional bids and bids created by calls to
      generateBid().
    </summary>
  </metric>
  <metric name="NumAuctionsWithConfigPromises">
    <summary>
      In a single-seller auction, this is either zero if the auction doesn't
      have any config promises or one if it does. This could also be inferred
      from NumConfigPromises, which would be zero or non-zero respectively in
      those cases. In a multi-seller auction, this is the number of component
      auctions that have any config promises, which is different from
      NumConfigPromises, in that each component auction may independently have
      any number of config promises.
    </summary>
  </metric>
  <metric name="NumBidderWorklets">
    <summary>
      The number of distinct BidderWorklets. Interest groups with the same owner
      can only share worklets if they have the same bidding script URL and KV
      server URL. As such, we might observe a non-standard setup in which, for
      example, a buyer has used a different bidding script URL for each
      InterestGroup, causing performance issues because of the fragmentation of
      BidderWorklets. BidderWorklets are shared across component auctions, and
      this measure counts the number of distinct BidderWorklets used within the
      scope of the scope of an entire auction, either single- or multi-seller.
      This may imply that the number of BidderWorklets created in the context of
      this auction is actually less than this number, because of reuse. However,
      it also means that this metric can be compared against the
      NumDistinctOwnersWithInterestGroups metric, which (unlike
      NumOwnersWithInterestGroups) counts each buyer involved in a multi-seller
      auction once, even if that buyer participates in multiple components.
    </summary>
  </metric>
  <metric name="NumBidsAbortedByBidderWorkletFatalError">
    <summary>
      Total number of bids aborted because the BidderWorklet encountered a fatal
      error, such as a crash, a JS fetch error, or any other fatal error -
      excluding timeouts, which are counted by the metric below - aggregated
      across all Owners and component auctions.
    </summary>
  </metric>
  <metric name="NumBidsAbortedByBuyerCumulativeTimeout">
    <summary>
      Total number of InterestGroups aborted because the per-buyer cumulative
      timeout was reached, aggregated across all Owners and component auctions.
    </summary>
  </metric>
  <metric name="NumBidsFilteredByPerBuyerLimits">
    <summary>
      Total number of InterestGroups filtered as per-buyer limits are applied,
      aggregated across all Owners and component auctions.
    </summary>
  </metric>
  <metric name="NumBidsFilteredDuringInterestGroupLoad">
    <summary>
      Total number of InterestGroups filtered based on priority during the
      loading of InterestGroups, aggregated across all Owners and component
      auctions. This specifically excludes InterestGroups filtered during load
      for other reasons, such as failing to satisfy requested seller
      capabilities.
    </summary>
  </metric>
  <metric name="NumBidsFilteredDuringReprioritization">
    <summary>
      Total number of InterestGroups filtered during bid reprioritization, which
      happens once bidding signals are available, aggregated across all Owners
      and component auctions. Related to UMA metric,
      Ads.InterestGroup.Auction.BidFiltered, except that it's aggregated. To
      determine the fraction of bids filtered, compare this against the
      NumInterestGroups metric.
    </summary>
  </metric>
  <metric name="NumBidsQueuedWaitingForConfigPromises">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the total number of bids that were ready for scoring before the config
      promises were fulfilled. For multi-seller auctions, this only includes
      bids in the component auctions, and not rescoring of bids in the top-level
      auction.
    </summary>
  </metric>
  <metric name="NumBidsQueuedWaitingForSellerWorklet">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the total number of bids that were ready for scoring before the seller
      worklet became available. For multi-seller auctions, this only includes
      bids in the component auctions, and not rescoring of bids in the top-level
      auction.
    </summary>
  </metric>
  <metric name="NumConfigPromises">
    <summary>
      The total number of config promises for this auction. For a multi-seller
      auction, this includes promises from both the top-level auction and all
      component auctions within.
    </summary>
  </metric>
  <metric name="NumDistinctOwnersWithInterestGroups">
    <summary>
      The number of buyers with InterestGroups participating in an auction,
      aggregated across all component auctions. This number excludes buyers with
      no ads or no script URL, and also those filtered because the priority for
      all InterestGroups calculated in the BuyerHelper constructor was negative.
      Unlike NumOwnersWithInterestGroups, it only counts each buyer once, even
      if it appears in multiple component auctions of a multi-seller auction.
      Also unlike NumOwnersWithInterestGroups, this metric has a value even if
      there are no bidders eligible to participate in this auction, though, in
      this case, that value is likely to be zero.
    </summary>
  </metric>
  <metric name="NumGenerateBidCodeReadyOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which GenerateBid was blocked waiting for the
      Script and/or WASM load.
    </summary>
  </metric>
  <metric name="NumGenerateBidConfigPromisesOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which GenerateBid was blocked waiting for the
      fulfillment of the config promises.
    </summary>
  </metric>
  <metric name="NumGenerateBidDirectFromSellerSignalsOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which GenerateBid was blocked waiting for the
      download of the DirectFromSellerSignals. This combines the PerBuyerSignals
      and AuctionSignals since they should arrive at roughly the same time.
    </summary>
  </metric>
  <metric name="NumGenerateBidTrustedBiddingSignalsOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which GenerateBid was blocked waiting for the
      download of the TrustedBiddingSignals. This includes *all*
      TrustedBiddingSignals for that buyer, because of how those all need to be
      available in order to reprioritize InterestGroups and apply per-buyer
      group limits.
    </summary>
  </metric>
  <metric name="NumInterestGroups">
    <summary>
      Total number of InterestGroups aggregated across all owners and component
      auctions, equivalent to UMA metric,
      Ads.InterestGroup.Auction.NumInterestGroups. This is the number of
      InterestGroups loaded, before per-buyer limits are applied. Excluded from
      this (and all other metrics counting InterestGroups) are InterestGroups
      that are incapable of participating in an auction, e.g. those with no
      bidding logic URLs, or with no ads. No value is defined for this metric if
      there are no bidders eligible to participate in this auction.
    </summary>
  </metric>
  <metric name="NumInterestGroupsWithNoBids">
    <summary>
      Number of instances in which the BidderWorklet doesn't bid, maybe because
      it failed to load or crashed. Because there's no bid, ScoreAd won't be
      called for these.
    </summary>
  </metric>
  <metric name="NumInterestGroupsWithOnlyNonKAnonBid">
    <summary>
      Number of instances in which the BidderWorklet only generates one bid. If
      the KAnonymityBidMode is Simulate or Enforce, this means that the
      InterestGroup's top generated bid didn't satisfy the kAnonymity threshold,
      and no separate bid could be generated that did satisfy the kAnonymity
      threshold. If the KAnonymityBidMode is None, this just means that a bid
      was successfully generated. For each of these, ScoreAd will be called
      once.
    </summary>
  </metric>
  <metric name="NumInterestGroupsWithOtherMultiBid">
    <summary>
      Number of instances in which an InterestGroup generated a complicated
      sequence of multiple bids that doesn't match any of the other
      'NumInterestGroupsWith...' cases.
    </summary>
  </metric>
  <metric name="NumInterestGroupsWithSameBidForKAnonAndNonKAnon">
    <summary>
      Number of instances in which an InterestGroup's top generated bid did
      satisfy the kAnonymity threshold, and so no separate bid was needed. For
      each of these, ScoreAd will be called once. If the KAnonymityBidMode is
      None, this metric will be 0, because there won't be a separate kAnon bid.
    </summary>
  </metric>
  <metric name="NumInterestGroupsWithSeparateBidsForKAnonAndNonKAnon">
    <summary>
      Number of instances in which an InterestGroup's top generated bid didn't
      satisfy the kAnonymity threshold, and a separate bid was generated that
      did satisfy the kAnonymity threshold. For each of these, ScoreAd will be
      called twice, once for each of these bids, which has latency and
      performance implications. If the KAnonymityBidMode is None, this metric
      will be 0, because there won't be a separate kAnon bid.
    </summary>
  </metric>
  <metric name="NumNegativeInterestGroups">
    <summary>
      Total number of negative targeting interest groups aggregated across all
      owners and component auctions, equivalent to UMA metric,
      Ads.InterestGroup.Auction.NumNegativeInterestGroups. This is the number of
      negative targeting interest groups loaded into the
      AdAuctionNegativeTargeter, regardless of which of these, if any, are later
      referenced by additional bids. No value is defined for this metric if the
      auction may not have additional bids, i.e. the additionalBids promise was
      not provided on the auction config. However, a value is defined for this
      metric even if no additional bids are provided to the auction, i.e. no
      additional bids appear in Ad-Auction-Additional-Bid response headers.
    </summary>
  </metric>
  <metric name="NumNegativeInterestGroupsIgnoredDueToInvalidSignature">
    <summary>
      Number of negative interest groups ignored because they had no matching
      valid signature on the signed additional bid. By ignoring this negative
      interest group, the additional bid may participate in the auction where
      the intent was for it be suppressed by negative targeting. This
      &quot;failing open&quot; ensures that only the owner of the negative
      interest group, who created the additionalBidKey, is allowed to negatively
      target the interest group, and that nobody else can learn whether the
      interest group is present on the device.
    </summary>
  </metric>
  <metric name="NumNegativeInterestGroupsIgnoredDueToJoiningOriginMismatch">
    <summary>
      Number of negative interest groups ignored because they had a joining
      origin different from that specified on the additional bid. By ignoring
      this negative interest group, the additional bid may participate in the
      auction where the intent was for it be suppressed by negative targeting.
      This &quot;failing open&quot; ensures that negative targeting can only use
      targeting data from a single origin.
    </summary>
  </metric>
  <metric name="NumOwnersWithInterestGroups">
    <summary>
      The number of buyers with InterestGroups participating in an auction,
      aggregated across all component auctions. Equivalent to UMA metric,
      Ads.InterestGroup.Auction.NumInterestGroups. This number excludes buyers
      with no ads or no script URL, and also those filtered because the priority
      for all InterestGroups calculated in the BuyerHelper constructor was
      negative. However, it counts a buyer repeatedly for each component auction
      that buyer participates in. No value is defined for this metric if there
      are no bidders eligible to participate in this auction.
    </summary>
  </metric>
  <metric name="NumOwnersWithoutInterestGroups">
    <summary>
      The number of owner origins listed in an auction configuration that were
      excluded from taking part in a FLEDGE auction because they have no
      eligible interest groups. Equivalent to the UMA histogram named
      Ads.InterestGroup.Auction.NumOwnersWithoutInterestGroups. This does not
      count owners that were filtered due to user settings. For multi-seller
      auctions, this is the sum of all such excluded owners across all component
      auctions. This double-counts owners that participate in multiple component
      auctions. Recorded after all interest groups participating in an auction
      have been retrieved from storage at the start of an auction. This is
      related to the sibling histogram named
      &quot;NumOwnersWithInterestGroups&quot;.
    </summary>
  </metric>
  <metric name="NumScoreAdCodeReadyOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which ScoreAd was blocked waiting for the
      Script load.
    </summary>
  </metric>
  <metric name="NumScoreAdDirectFromSellerSignalsOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which ScoreAd was blocked waiting for the
      download of the DirectFromSellerSignals. This combines the SellerSignals
      and AuctionSignals since they should arrive at roughly the same time.
    </summary>
  </metric>
  <metric name="NumScoreAdTrustedScoringSignalsOnCriticalPath">
    <summary>
      Aggregated across all components for multi-seller auctions, this records
      the number of occurrences in which ScoreAd was blocked waiting for the
      download of the TrustedScoringSignals.
    </summary>
  </metric>
  <metric name="NumSellersWithBidders">
    <summary>
      This is either the number of component auctions *plus one* for a
      multi-seller auction, or 1 for a single-seller auction. Equivalent to UMA
      metric, Ads.InterestGroup.Auction.NumSellersWithBidders. No value is
      defined for this metric if there are no bidders eligible to participate in
      this auction.
    </summary>
  </metric>
  <metric name="NumTopLevelBidsQueuedWaitingForConfigPromises">
    <summary>
      Only recorded for multi-seller auctions, this records the number of bids
      that were ready for rescoring before the config promises were fulfilled.
    </summary>
  </metric>
  <metric name="NumTopLevelBidsQueuedWaitingForSellerWorklet">
    <summary>
      Only recorded for multi-seller auctions, this records the number of bids
      that were ready for rescoring before the seller worklet became available.
    </summary>
  </metric>
  <metric name="Result" enum="AuctionResult">
    <summary>
      How the auction concluded, whether that's successfully selecting an ad to
      be shown, or finding no InterestGroups to load, or getting no bids that
      outbid the contextual bid, or any other outcome.
    </summary>
  </metric>
  <metric name="ScoreSignalsFetchPhaseEndTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the last call to SellerWorklet::ScoreAdIfReady (the
      end of the ScoreSignalsFetchPhase). The ScoreSignalsFetchPhase represents
      the time during which any seller worklet is waiting for one or more of the
      ScoreAd dependencies, notably scoring signals, in anticipation of calling
      an ad-tech provided scoreAd JavaScript function. This is one of a series
      of metrics representing the duration of each phase of the auction, where
      the phases may overlap or have space between them. This is bucketed in
      linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="ScoreSignalsFetchPhaseStartTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the first call to SellerWorklet::ScoreAd (the start of
      the ScoreSignalsFetchPhase). The ScoreSignalsFetchPhase represents the
      time during which any seller worklet is waiting for one or more of the
      ScoreAd dependencies, notably scoring signals, in anticipation of calling
      an ad-tech provided scoreAd JavaScript function. This is one of a series
      of metrics representing the duration of each phase of the auction, where
      the phases may overlap or have space between them. This is bucketed in
      linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="ScoringPhaseEndTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the last call to
      SellerWorklet::DeliverScoreAdCallbackOnUserThread (the end of the
      ScoringPhase). The ScoringPhase represents the time during which ad-tech
      provided scoreAd JavaScript functions are being executed. This is one of a
      series of metrics representing the duration of each phase of the auction,
      where the phases may overlap or have space between them. This is bucketed
      in linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="ScoringPhaseStartTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the first call to SellerWorklet::ScoreAdIfReady
      (specifically where that call corresponds to a seller worklet for which
      all of its ScoreAd dependencies have been satisfied and it's about to call
      the ad-tech provided scoreAd JavaScript function; the start of the
      ScoringPhase). The ScoringPhase represents the time during which ad-tech
      provided scoreAd JavaScript functions are being executed. This is one of a
      series of metrics representing the duration of each phase of the auction,
      where the phases may overlap or have space between them. This is bucketed
      in linear buckets of 10 ms.
    </summary>
  </metric>
  <metric name="WorkletCreationPhaseEndTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the last call to DebuggableAuctionWorklet::OnHavePid
      (the end of the WorkletCreationPhase). The WorkletCreationPhase represents
      the time during which worklets are being started, and will extend
      throughout the auction if the maximum number of processes is reached for
      bidder and/or seller worklets. This is one of a series of metrics
      representing the duration of each phase of the auction, where the phases
      may overlap or have space between them. This is bucketed in linear buckets
      of 10 ms.
    </summary>
  </metric>
  <metric name="WorkletCreationPhaseStartTimeInMillis">
    <summary>
      The time in milliseconds between the AuctionRunner constructor (the start
      of the auction) and the first call to
      InterestGroupAuction::Request*Worklet (the start of the
      WorkletCreationPhase). The WorkletCreationPhase represents the time during
      which worklets are being started, and will extend throughout the auction
      if the maximum number of processes is reached for bidder and/or seller
      worklets. This is one of a series of metrics representing the duration of
      each phase of the auction, where the phases may overlap or have space
      between them. This is bucketed in linear buckets of 10 ms.
    </summary>
  </metric>
</event>

<event name="AdsIntervention.LastIntervention" singular="True">
  <owner>yaoxia@google.com</owner>
  <owner>chrome-ads-core@google.com</owner>
  <summary>
    Recorded after computing the subresource filter activation for a page at
    process response time during navigation. This is only recorded when there
    has previously been an ads intervention triggered on the page within the
    site data's lifetime (currently 7 days). Clearing site data will reset
    intervention information.
  </summary>
  <metric name="InterventionStatus" enum="AdsInterventionStatus">
    <summary>
      Records the status of the ads intervention, whether the intervention lead
      to subresource filter activation, measured during page load.
    </summary>
  </metric>
  <metric name="InterventionType" enum="AdsViolations">
    <summary>
      Records the last measured intervention recorded for the page, measured
      during page load.
    </summary>
  </metric>
</event>

<event name="AmpPageLoad" singular="True">
  <owner>sullivan@chromium.org</owner>
  <metric name="MainFrameAmpPageLoad">
    <summary>
      True if the page loaded in the main frame is an AMP document (has an amp
      attribute in the html element). Will not be recorded for non-AMP frames.
      Note that most AMP documents are loaded in a subframe from a reader like
      Google Search; this metric measures sites that are using AMP as a
      site-wide framework and not a reader experience.
    </summary>
  </metric>
  <metric name="SubFrame.InteractiveTiming.FirstInputDelay4">
    <summary>
      Measures First Input Delay, the duration between the hardware timestamp
      and the start of event processing on the main thread for the first
      meaningful input per navigation, in the AMP subframe. See
      https://goo.gl/tr1oTZ for a detailed explanation. In milliseconds.
    </summary>
  </metric>
  <metric name="SubFrame.InteractiveTiming.NumInteractions">
    <summary>
      The number of distinct user interactions in an AMP subframe. See
      definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric
      name="SubFrame.InteractiveTiming.UserInteractionLatency.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of an
      AMP subframe, in ms. For this metric, we measure the latency of user
      interactions by Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
  </metric>
  <metric
      name="SubFrame.InteractiveTiming.WorstUserInteractionLatency.MaxEventDuration2">
    <summary>
      The maximum value of high percentile of user interaction latency above
      budget of a page load in AMP subframes, in ms. For this metric, we measure
      the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
  </metric>
  <metric name="SubFrame.LayoutInstability.CumulativeShiftScore">
    <summary>
      Deprecated as of 04/23. It is still reported, but most users should use
      AmpPageLoad.SubFrame.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms.

      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred during the session, in the AMP subframe. This metric's integral
      value is 100x the fractional cumulative layout shift score described in
      the explainer.
    </summary>
  </metric>
  <metric
      name="SubFrame.LayoutInstability.CumulativeShiftScore.BeforeInputOrScroll">
    <summary>
      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred in the AMP subframe, before any user input or document scroll.
      This metric's integral value is 100x the fractional cumulative layout
      shift score described in the explainer.
    </summary>
  </metric>
  <metric
      name="SubFrame.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window, in the AMP subframe. The gap between two
      consecutive shifts in a window is not bigger than 1000ms and the maximum
      window size is 5000ms. This metric's integral value is 100x the fractional
      cumulative layout shift score described in the explainer.
    </summary>
  </metric>
  <metric name="SubFrame.MainFrameToSubFrameNavigationDelta">
    <summary>
      Measures the time in milliseconds from the navigation in the main frame to
      the navigation in the AMP subframe. Will be negative in cases where the
      AMP subframe was prerendered. Will be positive in cases where the main
      frame was a non-same-document navigation. Should be near-zero when the
      main frame navigation is a same-document navigation and the AMP subframe
      was not prerendered.
    </summary>
  </metric>
  <metric name="SubFrame.PaintTiming.NavigationToFirstContentfulPaint">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints content, in the AMP subframe.
      A contentful paint includes a paint of text, image, SVG, or canvas.
    </summary>
  </metric>
  <metric name="SubFrame.PaintTiming.NavigationToFirstPaint">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the first paint is performed, in the AMP subframe.
    </summary>
  </metric>
  <metric name="SubFrame.PaintTiming.NavigationToLargestContentfulPaint2">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints the experimental largest
      content (text or image) within viewport, in the AMP subframe. See
      http://bit.ly/largest_contentful_paint_explainer for more details. Differs
      from SubFrame.PaintTiming.NavigationToLargestContentfulPaint in that
      removed content is still considered a valid candidate.
    </summary>
  </metric>
  <metric name="SubFrameAmpPageLoad">
    <summary>
      True if the page loaded in any subframe is an AMP document (has an amp
      attribute in the html element). Will not be recorded for non-AMP frames.
      Note that most AMP documents are loaded in a subframe from a reader like
      Google Search; this metric measures usage of such readers.
    </summary>
  </metric>
</event>

<event name="Android.AssistContent.PageContextRequest">
  <owner>ssid@google.com</owner>
  <owner>salg@google.com</owner>
  <summary>
    This event is recorded when page context provider is queried by the
    Assistant app.
  </summary>
  <metric name="PageContextRequested" enum="Boolean">
    <summary>
      Whether the page context was requested based on the structured Assist data
      provided.
    </summary>
  </metric>
</event>

<event name="Android.AssistContent.Request">
  <owner>ssid@google.com</owner>
  <owner>salg@google.com</owner>
  <summary>
    This event is recorded when AssistContent was requested by Android OS.
  </summary>
  <metric name="WebPageStructuredDataAttached" enum="Boolean">
    <summary>
      Whether structured data is attached to the AssistContent.
    </summary>
  </metric>
</event>

<event name="Android.DarkTheme.AutoDarkMode">
  <owner>nemco@google.com</owner>
  <owner>wenyufu@chromium.org</owner>
  <summary>
    Recorded when the user changes auto-dark theming for a site through the app
    menu.
  </summary>
  <metric name="DisabledByUser" enum="Boolean">
    <summary>
      A boolean signaling that auto-dark theming has been disabled.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Android.MultiWindowChangeActivity">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records when the activity enter or exit Android N+ multi-window mode.
  </summary>
  <metric name="ActivityType" enum="AndroidMultiWindowActivityType">
    <summary>
      Enter or exit the multi-window mode.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Android.MultiWindowState">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records the multi window state when the activity is shown.
  </summary>
  <metric name="WindowState" enum="AndroidMultiWindowState">
    <summary>
      The state of the multi-window mode, single or multi-window.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Android.NonDefaultRdsPageLoad">
  <owner>shuyng@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <summary>
    Records on each page load when the User Agent is overridden with site
    exception.
  </summary>
  <metric name="UserAgentType" enum="UserAgentRequestType">
    <summary>
      An enum that records the type of user agent.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Android.ScreenRotation">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records when a user rotates the device triggering a screen orientation
    change.
  </summary>
  <metric name="TargetDeviceOrientation" enum="DeviceOrientation2">
    <summary>
      The orientation of the device rotated to.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Android.UserRequestedUserAgentChange">
  <owner>gangwu@chromium.org</owner>
  <owner>fgorski@chromium.org</owner>
  <summary>
    Records when a user pressed 'Request Desktop Site' in the app menu.
  </summary>
  <metric name="UserAgentType" enum="UserAgentRequestType">
    <summary>
      An enum that records the type of user agent.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="AppListAppClickData">
  <owner>pdyson@chromium.org</owner>
  <summary>
    AppListAppClickData events contain click history metrics for an app. These
    events are recorded when an app is launched from the launcher on ChromeOS,
    but may be for an app different from the app launched. See event
    AppListAppLaunch for more detail on the keys used.
  </summary>
  <metric name="AppLaunchId">
    <summary>
      The ID of the app launch event.
    </summary>
  </metric>
  <metric name="AppType">
    <summary>
      The type of app. 1: CHROME, 2: PLAY, 3: PWA/Bookmark app.
    </summary>
  </metric>
  <metric name="ClickRank">
    <summary>
      Rank apps by total number of clicks. The app with the most clicks has rank
      1.
    </summary>
  </metric>
  <metric name="ClicksEachHour00">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 12:00am and 1:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour01">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 1:00am and 2:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour02">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 2:00am and 3:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour03">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 3:00am and 4:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour04">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 4:00am and 5:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour05">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 5:00am and 6:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour06">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 6:00am and 7:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour07">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 7:00am and 8:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour08">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 8:00am and 9:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour09">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 9:00am and 10:00am. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour10">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 10:00am and 11:00am. Bucketing: values above 20 rounded down to
      the nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour11">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 11:00am and 12:00pm. Bucketing: values above 20 rounded down to
      the nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour12">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 12:00pm and 1:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour13">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 1:00pm and 2:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour14">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 2:00pm and 3:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour15">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 3:00pm and 4:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour16">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 4:00pm and 5:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour17">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 5:00pm and 6:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour18">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 6:00pm and 7:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour19">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 7:00pm and 8:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour20">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 8:00pm and 9:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour21">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 9:00pm and 10:00pm. Bucketing: values above 20 rounded down to the
      nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour22">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 10:00pm and 11:00pm. Bucketing: values above 20 rounded down to
      the nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksEachHour23">
    <summary>
      The number of clicks on this app in the current session that occurred
      between 11:00pm and 12:00am. Bucketing: values above 20 rounded down to
      the nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksLast24Hours">
    <summary>
      The number of clicks on this app in the last 24 hours. Accurate to 15
      minutes. Bucketing: values above 20 rounded down to the nearest 10.
      Maximum value of 200.
    </summary>
  </metric>
  <metric name="ClicksLastHour">
    <summary>
      The number of clicks on this app in the last hour. Accurate to one minute.
      Bucketing: values above 20 rounded down to the nearest 10. Maximum value
      of 200.
    </summary>
  </metric>
  <metric name="LastLaunchedFrom">
    <summary>
      Where the app was last launched from. 1: GRID, 2: SUGGESTED, 3: SHELF.
    </summary>
  </metric>
  <metric name="MostRecentlyUsedIndex">
    <summary>
      Index recording when in the sequence of app launch clicks the app was last
      clicked on. 0: most recent app clicked on, 1: app clicked immediately
      before the most recent, etc.
    </summary>
  </metric>
  <metric name="SequenceNumber">
    <summary>
      The sequence number of the AppListAppLaunch event that corresponds to this
      AppListAppClickData event. There will be six AppListAppClickData events
      for each sequence number.
    </summary>
  </metric>
  <metric name="TimeSinceLastClick">
    <summary>
      Time since this app was last clicked on to launch. In seconds, bucketed:
      [1, 59] to the nearest second, [60, 599] to the nearest minute, [600,
      1199] to the nearest 5 minutes, [1200, 3599] to the nearest 10 minutes,
      [3600, 17999] to the nearest 30 minutes, [18000, 86400] to the nearest
      hour.
    </summary>
  </metric>
  <metric name="TotalClicks">
    <summary>
      Total number of clicks launching this app in this session. Bucketing:
      values above 20 rounded down to the nearest 10. Maximum value of 200.
    </summary>
  </metric>
</event>

<event name="AppListAppLaunch">
  <owner>pdyson@chromium.org</owner>
  <summary>
    Recorded when an app is launched from the launcher on ChromeOS. This can be
    from the suggestion chip, or from the grid of apps. The UKM metrics are not
    keyed by navigational urls. Instead, for Chrome apps the keys are based upon
    the app id, for Play apps the keys are based upon a hash of the package name
    and for PWAs the keys are the urls associated with the PWA.
  </summary>
  <metric name="AllClicksLast24Hours">
    <summary>
      Total number of clicks launching logged apps in the last 24 hours.
      Accurate to the nearest 15 minutes. Bucketing: values above 20 rounded
      down to the nearest 10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="AllClicksLastHour">
    <summary>
      Total number of clicks launching logged apps in the last hour. Accurate to
      the nearest minute. Bucketing: values above 20 rounded down to the nearest
      10. Maximum value of 200.
    </summary>
  </metric>
  <metric name="AppType">
    <summary>
      The type of app. 1: CHROME, 2: PLAY, 3: PWA/Bookmark app.
    </summary>
  </metric>
  <metric name="ClickMethod">
    <summary>
      Click method. 1: MOUSE, 2: TOUCH, 3: SYTLUS, 4: KEYBOARD.
    </summary>
  </metric>
  <metric name="DayOfWeek">
    <summary>
      An enum representing the day of the week that the data was logged in the
      local time zone. Sunday = 0.
    </summary>
  </metric>
  <metric name="DeviceMode">
    <summary>
      The mode of the device. 1: CLOSED_LID (Lid is closed), 2: LAPTOP (Lid is
      open, tablet mode off or unsupported) , 3: TABLET (Lid is open, tablet
      mode on or no lid at all).
    </summary>
  </metric>
  <metric name="DeviceType">
    <summary>
      The type of the device. 1: TABLET, 2: LAPTOP.
    </summary>
  </metric>
  <metric name="HourOfDay">
    <summary>
      The hour of the day when the data is logged. Hours since midnight in the
      local time zone.
    </summary>
  </metric>
  <metric name="LaunchedFrom">
    <summary>
      Where the app was launched from. 1: GRID, 2: SUGGESTED, 3: SHELF.
    </summary>
  </metric>
  <metric name="PositionIndex">
    <summary>
      The position of the app within the grid/suggested apps/shelf. 0 is the
      first position.
    </summary>
  </metric>
  <metric name="TotalHours">
    <summary>
      Number of hours in the current session up to this event. Bucketing:
      exponential buckets, increasing in size by 25%, rounded to the nearest
      integer. i.e. 0, 1, 2, 3, 4, 5, 6, 7, 9, 12, 15, 18, 23, 28, 36, 44...
    </summary>
  </metric>
</event>

<event name="AtMemory.SearchQuery">
  <owner>rahimis@google.com</owner>
  <owner>ireneuszszulc@google.com</owner>
  <summary>
    Describes an AtMemory search query and the users response to the results.
    Recorded when the UI containing the results is destroyed (due to a new
    search query or the overall UI closing).
  </summary>
  <metric name="AcceptedSuggestionDataSources"
      enum="AutofillAtMemoryAcceptedSuggestionDataSourcesBitmask">
    <summary>
      A bitmask of the data sources that provided an entry. Currently, the
      sources are local Autofill, Gmail, Calendar, and Photos.
    </summary>
  </metric>
  <metric name="AcceptedSuggestionDataType" enum="MemoryDataType">
    <summary>
      The accepted data type.
    </summary>
  </metric>
  <metric name="AcceptedSuggestionIndex">
    <summary>
      Records the 0-based index (position) of the selected suggestion from the
      first-level list. In case of selected sub-suggestion from a fly-out menu,
      this records the position of the top-level suggestion.
    </summary>
  </metric>
  <metric name="AcceptedSuggestionSecondaryIndex">
    <summary>
      Records the 0-based index (position) of the selected secondary attribute
      from the fly-out menu when a suggestion is accepted. -1 means the user
      accepted the top-level primary attribute directly without selecting from
      the fly-out menu. 0, 1, 2... means the user opened the fly-out menu and
      accepted the secondary attribute at that 0-based position.
    </summary>
  </metric>
  <metric name="QueryCompleted" enum="AutofillAtMemoryQueryCompletedStatus">
    <summary>
      Describes the return value of the search query.
    </summary>
  </metric>
  <metric name="QueryLatencyMs">
    <summary>
      Time in milliseconds between when a query was submitted and the query
      response received.
    </summary>
  </metric>
  <metric name="SuggestionAccepted" enum="Boolean">
    <summary>
      Whether a search result in response to this query was accepted.
    </summary>
  </metric>
  <metric name="SuggestionFilled" enum="Boolean">
    <summary>
      Whether a suggestion was autofilled after it was accepted.
    </summary>
  </metric>
  <metric name="UiSessionId">
    <summary>
      A randomly generated identifier that connects multiple
      AtMemory.SearchQuery to the same AtMemory.UiSession. Unique only for the
      duration that a popup is showing.
    </summary>
  </metric>
  <metric name="UiSessionOrder">
    <summary>
      A 0-based index that stores the order in which different
      AtMemory.SearchQuery entries are emitted.
    </summary>
  </metric>
</event>

<event name="AtMemory.UiSession">
  <owner>rahimis@google.com</owner>
  <owner>ireneuszszulc@google.com</owner>
  <summary>
    Contains information about an AtMemory UI session. A UI session corresponds
    to showing the Autofill popup (from initial show to hide) on Desktop or the
    AtMemory bottomsheet on Android. The metric is recorded when the AtMemory UI
    is closed.
  </summary>
  <metric name="FieldSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a form control (e.g.
      a HTML input element). This should be globally unique and suitable for
      distinguishing fields. Two different users would have different values.
      For the same user, the same field in the same form in two different tabs
      would have two different values.
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The field signature of the field that AtMemory was triggered on (value
      taken modulo 1021).
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The form signature of the field that AtMemory was triggered on (value
      taken modulo 1021).
    </summary>
  </metric>
  <metric name="QuerySubmitted" enum="Boolean">
    <summary>
      Whether a search query was submitted.
    </summary>
  </metric>
  <metric name="SearchBarDisplayed" enum="AutofillAtMemoryTriggerSource">
    <summary>
      Tracks how the suggestion UI was triggered.
    </summary>
  </metric>
  <metric name="SuggestionAccepted" enum="Boolean">
    <summary>
      Whether at least one search result was accepted during the entire session.
    </summary>
  </metric>
  <metric name="SuggestionFilled" enum="Boolean">
    <summary>
      Whether a suggestion was filled.
    </summary>
  </metric>
  <metric name="UiSessionId">
    <summary>
      A randomly generated identifier that connects multiple
      AtMemory.SearchQuery to the same AtMemory.UiSession.
    </summary>
  </metric>
</event>

<event name="Autofill.AiAmountExtraction.ApcFetchResult" singular="true">
  <owner>jamessun@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Records whether the Annotated Page Content (APC) fetch was successful. APC
    fetching is triggered at the start of the AI-based amount extraction process
    to generate the structured page data that will subsequently be analyzed by
    the model to retrieve the checkout amount. Recorded once per page load when
    the APC fetch attempt completes.
  </summary>
  <metric name="ApcFetchResult" enum="BooleanSuccess">
    <summary>
      The result of the APC fetch.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.AiAmountExtraction.Result" singular="true">
  <owner>jamessun@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Records the final result of the AI-based checkout amount extraction process.
    Recorded once per page load, either when the model execution completes
    (successfully, with failure, or with invalid data) or when the client-side
    timeout is reached.
  </summary>
  <metric name="FailureLatencyInMillis">
    <summary>
      Records duration in milliseconds from when the AI amount extraction is
      initialized to when an empty response is received from the model.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvalidResponseLatencyInMillis">
    <summary>
      Records duration in milliseconds from when the AI amount extraction is
      initialized to when an invalid response is received from the model.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvalidResponseReason"
      enum="AiAmountExtractionInvalidResponseReason">
    <summary>
      The reason the AI amount extraction response was invalid.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Result" enum="AiAmountExtractionResult">
    <summary>
      The result of the AI amount extraction.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SuccessLatencyInMillis">
    <summary>
      Records duration in milliseconds from when the AI amount extraction is
      initialized to when a non-empty valid response is received from the model.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.AmountExtractionComplete" singular="true">
  <owner>jamessun@google.com</owner>
  <owner>longsheng@google.com</owner>
  <summary>
    Records the result of the amount extraction process. This process is to
    search for the final checkout amount from the merchants' checkout page and
    respond to the browser process. This event starts from the moment amount
    extraction is initiated in the browser process to when a response is
    received. Logged when the search is finished.
  </summary>
  <metric name="FailureLatencyInMillis">
    <summary>
      Records duration in milliseconds from when the amount extraction is
      triggered to when an empty result of the search is returned to the browser
      process.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Result" enum="AmountExtractionResult">
    <summary>
      An enum that records the result of the amount extraction: success, failure
      or timeout.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SuccessLatencyInMillis">
    <summary>
      Records duration in milliseconds from when the amount extraction is
      triggered to when a non-empty result of the search is returned to the
      browser process.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.AtAtPressed">
  <owner>schwering@google.com</owner>
  <owner>autofill-internal@google.com</owner>
  <summary>
    Recorded whenever the user hits &quot;@&quot; twice in quick succession.
  </summary>
  <metric name="FieldSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a form control (e.g.
      a HTML input element). This should be globally unique and suitable for
      distinguishing fields. Two different users would have different values.
      For the same user, the same field in the same form in two different tabs
      would have two different values.
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The field signature of the field where the &quot;@@&quot; sequence was
      typed (value taken modulo 1021).
    </summary>
  </metric>
  <metric name="FormControlType" enum="AutofillFormControlType2">
    <summary>
      The form control type of the field where &quot;@@&quot; was typed.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The form signature of the form where &quot;@@&quot; was typed (value taken
      modulo 1021).
    </summary>
  </metric>
</event>

<event name="Autofill.Bnpl.AiAmountExtraction.AmountInIssuerRange">
  <owner>jamessun@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Records whether the AI-based checkout amount is within the issuer's
    transaction range. Recorded once per page load when AI amount extraction
    completes.
  </summary>
  <metric name="Issuer" enum="BnplIssuerId">
    <summary>
      The ID of the BNPL issuer.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsWithinRange" enum="Boolean">
    <summary>
      True if the amount is within the issuer's supported range, False
      otherwise.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.BnplSuggestionAccepted" singular="true">
  <owner>wilsonlow@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Recorded when a BNPL autofill suggestion was accepted on the current page.
  </summary>
  <metric name="Accepted" enum="Boolean">
    <summary>
      Only ever set to true, thus serving as a counter.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.BnplSuggestionShown" singular="true">
  <owner>wilsonlow@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Recorded when a BNPL suggestion was added to the payments autofill dropdown
    and shown to the user.
  </summary>
  <metric name="Shown" enum="Boolean">
    <summary>
      Only ever set to true, thus serving as a counter.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.CardUploadDecision">
  <owner>sebsg@chromium.org</owner>
  <metric name="UploadDecision">
    <summary>
      Whether the upload was proposed to the user or the reasons why it was not.
      The value is a bitmask of |CardUploadDecisionMetric|.
    </summary>
  </metric>
</event>

<event name="Autofill.CreditCardFill">
  <owner>schwering@google.com</owner>
  <summary>
    Recorded when a credit card form is autofilled.
  </summary>
  <metric name="Fillable.BeforeSecurity.Bitmask"
      enum="AutofillCreditCardSeamlessnessBitmask">
    <summary>
      Logs the field types which Autofill would have filled if the credit card
      on file was complete and there was no security policy.
    </summary>
  </metric>
  <metric name="Fillable.BeforeSecurity.Qualitative"
      enum="CreditCardSeamlessFill">
    <summary>
      Logs a qualitative summary of the field types which Autofill would have
      filled if the credit card on file was complete and there was no security
      policy.
    </summary>
  </metric>
  <metric name="Fillable.BeforeSecurity.Visible.Bitmask"
      enum="AutofillCreditCardSeamlessnessBitmask">
    <summary>
      Logs the field types which Autofill would have filled into visible fields
      if the credit card on file was complete and there was no security policy.
    </summary>
  </metric>
  <metric name="Fillable.BeforeSecurity.Visible.Qualitative"
      enum="CreditCardSeamlessFill">
    <summary>
      Logs a qualitative summary of the field types which Autofill would have
      filled into visible fields if the credit card on file was complete and
      there was no security policy.
    </summary>
  </metric>
  <metric name="Filled.AfterSecurity.Bitmask"
      enum="AutofillCreditCardSeamlessnessBitmask">
    <summary>
      Logs the field types which Autofill actually filled.
    </summary>
  </metric>
  <metric name="Filled.AfterSecurity.Qualitative" enum="CreditCardSeamlessFill">
    <summary>
      Logs a qualitative summary of the field types which Autofill actually
      filled.
    </summary>
  </metric>
  <metric name="Filled.AfterSecurity.Visible.Bitmask"
      enum="AutofillCreditCardSeamlessnessBitmask">
    <summary>
      Logs the field types which Autofill actually filled into visible fields.
    </summary>
  </metric>
  <metric name="Filled.AfterSecurity.Visible.Qualitative"
      enum="CreditCardSeamlessFill">
    <summary>
      Logs a qualitative summary of the field types which Autofill actually
      filled into visible fields.
    </summary>
  </metric>
  <metric name="Filled.BeforeSecurity.Bitmask"
      enum="AutofillCreditCardSeamlessnessBitmask">
    <summary>
      Logs the field types which Autofill would have filled if there was no
      security policy.
    </summary>
  </metric>
  <metric name="Filled.BeforeSecurity.Qualitative"
      enum="CreditCardSeamlessFill">
    <summary>
      Logs a qualitative summary of the field types which Autofill would have
      filled if there was no security policy.
    </summary>
  </metric>
  <metric name="Filled.BeforeSecurity.Visible.Bitmask"
      enum="AutofillCreditCardSeamlessnessBitmask">
    <summary>
      Logs the field types which Autofill would have filled into visible fields
      if there was no security policy.
    </summary>
  </metric>
  <metric name="Filled.BeforeSecurity.Visible.Qualitative"
      enum="CreditCardSeamlessFill">
    <summary>
      Logs a qualitative summary of the field types which Autofill would have
      filled into visible fields if there was no security policy.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      An approximately 10-bit hash of the form's actual signature.
    </summary>
  </metric>
  <metric name="SharedAutofill" enum="Boolean">
    <summary>
      Disabled policy-controlled feature &quot;autofill&quot; prevented a
      cross-origin credit-card field from being filled. With
      &quot;autofill&quot;, a frame can allow a child-frame to be autofilled
      across origin.
    </summary>
  </metric>
</event>

<event name="Autofill.EditedAutofilledFieldAtSubmission">
  <owner>koerber@google.com</owner>
  <owner>battre@google.com</owner>
  <summary>
    Records when a user edits a value that was filled by autofill.
  </summary>
  <metric name="FieldSignature">
    <summary>
      The signature of the field (mod 1021). This is the hash identifier used to
      denote this field for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
  <metric name="OverallType" enum="AutofillFieldType">
    <summary>
      Field's first overall `FieldType`. See `AutofillType::GetTypes()`.
    </summary>
  </metric>
  <metric name="OverallType2" enum="AutofillFieldType">
    <summary>
      Field's second overall `FieldType`. See `AutofillType::GetTypes()`.
    </summary>
  </metric>
  <metric name="OverallType3" enum="AutofillFieldType">
    <summary>
      Field's third overall `FieldType`. See `AutofillType::GetTypes()`.
    </summary>
  </metric>
  <metric name="OverallType4" enum="AutofillFieldType">
    <summary>
      Field's fourth overall `FieldType`. See `AutofillType::GetTypes()`.
    </summary>
  </metric>
</event>

<event name="Autofill.FieldFillStatus">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Recorded when Chrome validates field type predictions (on submit, on leaving
    a form, on receiving a form with autocomplete attributes).
  </summary>
  <metric name="FieldSignature">
    <summary>
      The signature of the field (mod 1021). This is the hash identifier used to
      denote this field for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
  <metric name="IsAutofilled">
    <summary>
      The field is currently autofilled.
    </summary>
  </metric>
  <metric name="MillisecondsSinceFormParsed">
    <summary>
      Time since form parse.
    </summary>
  </metric>
  <metric name="PredictionSource">
    <summary>
      The system which generated the prediction: heuristics, server, overall.
    </summary>
  </metric>
  <metric name="ValidationEvent">
    <summary>
      The event which triggered the validation: Submission, Left Form, Form has
      Autocomplete attributes.
    </summary>
  </metric>
  <metric name="WasPreviouslyAutofilled">
    <summary>
      The field was autofilled and subsequently edited.
    </summary>
  </metric>
</event>

<event name="Autofill.FieldTypeValidation">
  <owner>rogerm@chromium.org</owner>
  <summary>
    Recorded when Chrome validates field type predictions (on submit, on leaving
    a form, on receiving a form with autocomplete attributes).
  </summary>
  <metric name="ActualType" enum="AutofillFieldType">
    <summary>
      The observed type of the field. See: autofill::FieldType
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The signature of the field
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form.
    </summary>
  </metric>
  <metric name="MillisecondsSinceFormParsed">
    <summary>
      Time since form parse.
    </summary>
  </metric>
  <metric name="PredictedType" enum="AutofillFieldType">
    <summary>
      The predicted type of the field. See: autofill::FieldType
    </summary>
  </metric>
  <metric name="PredictionSource" enum="AutofillPredictionSource">
    <summary>
      The system which generated the prediction: heuristics, server, overall.
    </summary>
  </metric>
  <metric name="ValidationEvent" enum="AutofillQualitiyMetricType">
    <summary>
      The event which triggered the validation: Submission, Left Form, Form has
      Autocomplete attributes.
    </summary>
  </metric>
</event>

<event name="Autofill.FormEvent">
  <owner>osaul@google.com</owner>
  <summary>
    Recorded when user interacted with autofill.
  </summary>
  <metric name="AutofillFormEvent">
    <summary>
      Logs autofill form events funnel. See |FormEvent|.
    </summary>
  </metric>
  <metric name="FormTypes">
    <summary>
      Type of form. Stored as bitvector. A set ith bit implies enum
      FormTypeNameForLogging's ith type was detected. Multiple types are
      possible.
    </summary>
  </metric>
  <metric name="MillisecondsSinceFormParsed">
    <summary>
      Time since form parse.
    </summary>
  </metric>
</event>

<event name="Autofill.FormFillSuccessIOS">
  <owner>kazinova@google.com</owner>
  <summary>
    Records whether the form was successfully filled by Autofill on iOS. The
    metric is used to measure silent renderer fails when the filling request is
    executed successfully but the results reported in a callback are empty.
  </summary>
  <metric name="FormFillSuccess" enum="Boolean">
    <summary>
      A boolean indicating success or failure.
    </summary>
  </metric>
</event>

<event name="Autofill.InteractedWithForm">
  <owner>osaul@google.com</owner>
  <summary>
    Recorded when we parse a form to log form metadata and autofill settings
    that apply to all subsequent events for this form.
  </summary>
  <metric name="FormSignature">
    <summary>
      FormSignature is approximately 10 bit hash of form structure.
    </summary>
  </metric>
  <metric name="FormTypes">
    <summary>
      Type of form. Stored as bitvector. A set ith bit implies enum FormType's
      ith type was detected. Multiple types are possible.
    </summary>
  </metric>
  <metric name="IsForCreditCard">
    <summary>
      True for credit card forms, false for address/profile forms.
    </summary>
  </metric>
  <metric name="LocalRecordTypeCount">
    <summary>
      Number of local credit cards or local autofill profiles.
    </summary>
  </metric>
  <metric name="ServerRecordTypeCount">
    <summary>
      Number of masked and full server credit cards or server autofill profiles.
    </summary>
  </metric>
</event>

<event name="Autofill.KeyMetrics">
  <owner>battre@chromium.org</owner>
  <owner>kolos@chromium.org</owner>
  <owner>nepper@chromium.org</owner>
  <summary>
    These metrics are a clone of Autofill's UMA key metrics to measure Autofill
    quality. They are recorded on navigation if a form was submitted before.
  </summary>
  <metric name="AutofillFills">
    <summary>
      Number of Autofill fills invoked by the user on the current form.
    </summary>
  </metric>
  <metric name="FillingAcceptance">
    <summary>
      Has value 1 if user accepted the suggestion to fill values on a submitted
      form, 0 otherwise. This is counted as 1 if the user accepted such a
      suggestion at any time, regardless whether other suggestions were ignored
      or whether the accepted suggestion was reverted afterwards. Only recorded
      if suggestions were shown to the user.
    </summary>
  </metric>
  <metric name="FillingAssistance">
    <summary>
      Has value 1 if the user filled any fields via Autofill on a submitted
      form, 0 otherwise.

      If the user reverts the filling, the form is still counted as filled.

      This metric is different from FillingAcceptance in the sense that the
      latter is only recorded if the user has actually seen a prompt to fill
      data.
    </summary>
  </metric>
  <metric name="FillingCorrectness">
    <summary>
      Has value 1 for submitted and autofilled forms if user edited at least one
      filled value before submitting the form, 0 otherwise. Only recorded if any
      suggestion was filled.
    </summary>
  </metric>
  <metric name="FillingReadiness">
    <summary>
      Has value 1 for submitted forms when Chromium had any address or payments
      data to fill, 0 otherwise.

      It does not matter whether the user actually requested to fill the data.
      It does not matter either whether the data available for filling
      corresponded to the submitted data.
    </summary>
  </metric>
  <metric name="FormElementUserModifications">
    <summary>
      Number of times a user focused on a form element and changed its value.
      Consecutive value changes on the same form element are not counted,
      neither are JS invoked changes. Also, re-focusing a form element and
      changing its value is only counted if another form element's value was
      changed in the meantime.
    </summary>
  </metric>
  <metric name="FormTypes">
    <summary>
      Type of form. Stored as bitvector. A set ith bit implies enum
      FormTypeNameForLogging's ith type was detected. Multiple types are
      possible.
    </summary>
  </metric>
</event>

<event name="Autofill.PayLaterTabSelected" singular="true">
  <owner>yishuil@google.com</owner>
  <owner>wilsonlow@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Recorded when a user selects the Pay Later tab from the payments autofill
    dropdown.
  </summary>
  <metric name="Selected" enum="Boolean">
    <summary>
      Only ever set to true, thus serving as a counter.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.PayLaterTabShown" singular="true">
  <owner>yishuil@google.com</owner>
  <owner>wilsonlow@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Recorded when the Pay Later tab was shown in the payments autofill dropdown.
  </summary>
  <metric name="Shown" enum="Boolean">
    <summary>
      Only ever set to true, thus serving as a counter.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.PayLaterTabSuggestionAccepted" singular="true">
  <owner>yishuil@google.com</owner>
  <owner>wilsonlow@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    Recorded when a BNPL suggestion from the Pay Later tab was accepted by
    users.
  </summary>
  <metric name="Accepted" enum="Boolean">
    <summary>
      Only ever set to true, thus serving as a counter.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Autofill.SuggestionFilled">
  <owner>osaul@google.com</owner>
  <summary>
    Recorded when user selects a suggestion and we fill the form with that
    suggestion.
  </summary>
  <metric name="FieldSignature">
    <summary>
      The signature of the field
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form.
    </summary>
  </metric>
  <metric name="IsForCreditCard">
    <summary>
      True for credit card forms, false for address/profile forms.
    </summary>
  </metric>
  <metric name="MillisecondsSinceFormParsed">
    <summary>
      Time since form parse.
    </summary>
  </metric>
  <metric name="RecordType">
    <summary>
      Whether the suggestion was from a local card/autofill profile or from a
      server card/autofill profile.
    </summary>
  </metric>
</event>

<event name="Autofill.SuggestionsShown">
  <owner>osaul@google.com</owner>
  <summary>
    Recorded when a suggestion is shown to user.
  </summary>
  <metric name="FieldSignature">
    <summary>
      The signature of the field
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form.
    </summary>
  </metric>
  <metric name="HeuristicType">
    <summary>
      Field's |FieldType| based on heuristics. See
      |AutofillField.heuristic_type()|.
    </summary>
  </metric>
  <metric name="HtmlFieldType">
    <summary>
      Field's autocomplete field type hint. See |AutofillField.html_type()|.
    </summary>
  </metric>
  <metric name="MillisecondsSinceFormParsed">
    <summary>
      Time since form parse.
    </summary>
  </metric>
  <metric name="ServerType">
    <summary>
      Field's |FieldType| returned by server. See |AutofillField.server_type()|.
    </summary>
  </metric>
</event>

<event name="Autofill.TextFieldDidChange">
  <owner>osaul@google.com</owner>
  <summary>
    Recorded when user edits a text field. The text field may have been
    autofilled.
  </summary>
  <metric name="FieldSignature">
    <summary>
      The signature of the field
    </summary>
  </metric>
  <metric name="FieldTypeGroup">
    <summary>
      Field's first `FieldTypeGroup`. See `AutofillType::GetGroups()`.
    </summary>
  </metric>
  <metric name="FieldTypeGroup2">
    <summary>
      Field's second `FieldTypeGroup`. See `AutofillType::GetGroups()`.
    </summary>
  </metric>
  <metric name="FieldTypeGroup3">
    <summary>
      Field's third `FieldTypeGroup`. See `AutofillType::GetGroups()`.
    </summary>
  </metric>
  <metric name="FieldTypeGroup4">
    <summary>
      Field's fourth `FieldTypeGroup`. See `AutofillType::GetGroups()`.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form.
    </summary>
  </metric>
  <metric name="HeuristicType">
    <summary>
      Field's |FieldType| based on heuristics. See
      |AutofillField.heuristic_type()|.
    </summary>
  </metric>
  <metric name="HtmlFieldMode">
    <summary>
      Whether the field's autocomplete hint specified 'billing' or 'shipping'.
      See |AutofillField.html_mode()|.
    </summary>
  </metric>
  <metric name="HtmlFieldType">
    <summary>
      Field's autocomplete field type hint. See |AutofillField.html_type()|.
    </summary>
  </metric>
  <metric name="IsAutofilled">
    <summary>
      True if the field was autofilled. See |AutofillField.is_autofilled|.
    </summary>
  </metric>
  <metric name="IsEmpty">
    <summary>
      True if the field was empty. See |AutofillField.IsEmpty()|.
    </summary>
  </metric>
  <metric name="MillisecondsSinceFormParsed">
    <summary>
      Time since form parse.
    </summary>
  </metric>
  <metric name="ServerType">
    <summary>
      Field's |FieldType| returned by server. See |AutofillField.server_type()|.
    </summary>
  </metric>
</event>

<event name="Autofill2.AddressProfileImport">
  <owner>vidhanj@google.com</owner>
  <owner>koerber@google.com</owner>
  <owner>chrome-autofill-alerts@google.com</owner>
  <summary>
    Recorded after a form submission that either resulted in a save prompt for
    addresses or in a silent update of an already existing profile.
  </summary>
  <metric name="AutocompleteUnrecognizedImport" enum="Boolean">
    <summary>
      Logs if data was imported from a field that has autocomplete=UNRECOGNIZED.
    </summary>
  </metric>
  <metric name="DuplicationRank">
    <summary>
      Minimum number of fields whose removal makes the import candidate a
      duplicate of any existing profile. If the duplication rank is 1, the
      import candidate can be called a quasi-duplicate of an existing profile.
      Only recorded for new profiles and if a stored profile existed.
    </summary>
  </metric>
  <metric name="ImportType" enum="AutofillProfileImportType">
    <summary>
      Logs the import type of the storage prompt. An import type can be either
      the import of a new profile, an update of an existing profile that results
      in a confirmation dialog, or a silent update that only changes the
      structure of an already stored address but does not affect any
      settings-visible stored data.
    </summary>
  </metric>
  <metric name="NumberOfEditedFields">
    <summary>
      Logs the count for the number of fields that have been edited by the user
      in the storage dialog before the storage was confirmed.
    </summary>
  </metric>
  <metric name="PhoneNumberStatus" enum="AutofillPhoneImportValidity">
    <summary>
      Logs the phone number validity status based on whether the phone number
      was imported in the profile or not or removed beforehand.
    </summary>
  </metric>
  <metric name="UserDecision" enum="AutofillProfileImportDecision">
    <summary>
      Logs the user decision based on the storage prompt.
    </summary>
  </metric>
  <metric name="UserHasExistingProfile" enum="Boolean">
    <summary>
      True if the user had already saved an address profile, false otherwise.
    </summary>
  </metric>
</event>

<event name="Autofill2.FieldInfo">
  <owner>battre@chromium.org</owner>
  <owner>chrome-autofill-team@google.com</owner>
  <summary>
    All information about a specific field, recorded at form submission or form
    destruction time (whatever comes first). (As of M132) Info are recorded only
    for fields that have at most `autofill::kMaxLogEventsPerField` events.
  </summary>
  <metric name="AutocompleteState" enum="AutofillAutocompleteState">
    <summary>
      The field's autocomplete attribute value, the values are from
      |AutofillMetrics::AutocompleteState|.
    </summary>
  </metric>
  <metric name="AutofillSkippedStatus">
    <summary>
      Whether filling the field was skipped during autofill, and if it was
      skipped, what the skipping reasons were. Recorded as a DenseSet of
      |FieldFillingSkipReason|.
    </summary>
  </metric>
  <metric name="AutofillStatusVector">
    <summary>
      A bit vector of autofill statuses for a field, listed in
      |AutofillMetrics::AutofillStatus|. The first bit represents whether the
      field is focusable, the second means whether the field was focused....
      These autofill statuses will not be stored in UKM individually. We create
      functions to read the individual autofill status from a bit vector in
      queries. go/zmwtc
    </summary>
  </metric>
  <metric name="FieldLogEventCount">
    <summary>
      The total number of all the field log events created for this field.
    </summary>
  </metric>
  <metric name="FieldSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a form control (e.g.
      a HTML input element). This should be globally unique and suitable for
      distinguishing fields. Two different users would have different values.
      For the same user, the same field in the same form in two different tabs
      would have two different values.
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The signature of the field, a 10 bit hash value (0-1021) of the field name
      and field type used to denote this field for query and voting purposes.
    </summary>
  </metric>
  <metric name="FormControlType2" enum="AutofillFormControlType2">
    <summary>
      A form control type of a web form-associated element. We only list the
      ones that are handled by Autofill, see |autofill::FormControlType|.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. This is used to link the fields to a form in
      Autofill2.FormSummary.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form, which is a 10-bit hash of the form's domain,
      name and all the supported form fields (including empty names).
    </summary>
  </metric>
  <metric name="HeuristicType" enum="AutofillFieldType">
    <summary>
      The type of the field predicted the regular expressions. The types are
      from |autofill::FieldType|.
    </summary>
  </metric>
  <metric name="HtmlFieldMode" enum="AutocompleteHtmlFieldMode">
    <summary>
      The mode according to the autocomplete attribute of a field. Only set if a
      field has a valid autocomplete attribute. Currently this is used to
      specify if the field is part of the billing or shipping address. See
      autofill::mojom::HtmlFieldMode.
    </summary>
  </metric>
  <metric name="HtmlFieldType" enum="AutocompleteHtmlFieldType">
    <summary>
      The field type specified in the autocomplete attribute of the field. Only
      set if a field has a valid autocomplete attribute. See
      autofill::mojom::HtmlFieldType.
    </summary>
  </metric>
  <metric name="MlModelType" enum="AutofillFieldType">
    <summary>
      The type of the field predicted by the ML model after consolidation with
      regex heuristics (the ML model is not allowed to override the regex
      heuristics in some cases). The types are from |autofill::FieldType|.
    </summary>
  </metric>
  <metric name="OverallType" enum="AutofillFieldType">
    <summary>
      The final field type from the list of |autofill::FieldType| that we choose
      after rationalization, which is used to determine the autofill suggestion
      when the user triggers autofilling.
    </summary>
  </metric>
  <metric name="RankInFieldSignatureGroup">
    <summary>
      If multiple fields have the same signature, this indicates the position
      within this set of fields. This allows us to understand problems related
      to duplicated field signatures.
    </summary>
  </metric>
  <metric name="SectionId">
    <summary>
      A single HTML form can consist of multiple sections. A section is a set of
      fields that are filled together. For example a single form can contain a
      shipping and a billing address. Each of those corresponds to one section.
      The sections are mapped to consecutive natural numbers starting at 1. The
      section IDs are unique per form.
    </summary>
  </metric>
  <metric name="ServerPredictionSource1" enum="AutofillServerPredictionSource">
    <summary>
      The major source of predictions from the Autofill crowdsourced server, see
      AutofillQueryResponse::FormSuggestion::FieldSuggestion::FieldPrediction::Source.
    </summary>
  </metric>
  <metric name="ServerPredictionSource2" enum="AutofillServerPredictionSource">
    <summary>
      The additional source of predictions from the Autofill crowdsourced server
      if there is an additional prediction, see
      AutofillQueryResponse::FormSuggestion::FieldSuggestion::FieldPrediction::Source.
    </summary>
  </metric>
  <metric name="ServerType1" enum="AutofillFieldType">
    <summary>
      The type of the field predicted from the Autofill crowdsourced server from
      majority voting (and some more complex stuff). The types are from
      |autofill::FieldType|.
    </summary>
  </metric>
  <metric name="ServerType2" enum="AutofillFieldType">
    <summary>
      The additional type of the field predicted from the Autofill crowdsourced
      server if there is an additional prediction. The types are from
      |autofill::FieldType|.
    </summary>
  </metric>
  <metric name="ServerTypeIsOverride" enum="Boolean">
    <summary>
      This is an annotation for server predicted field types which indicates
      that a manual override defines the server type. This allows us to assess
      the impact of server overrides and detect possible problems with it.
    </summary>
  </metric>
  <metric name="TypeChangedByRationalization" enum="Boolean">
    <summary>
      Whether the field's type was changed by running the rationalization.
    </summary>
  </metric>
</event>

<event name="Autofill2.FieldInfoAfterSubmission">
  <owner>battre@chromium.org</owner>
  <owner>chrome-autofill-team@google.com</owner>
  <summary>
    Information about a specific field, recorded after form submission.
  </summary>
  <metric name="FieldSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a form control (e.g.
      a HTML input element). This should be globally unique and suitable for
      distinguishing fields. Two different users would have different values.
      For the same user, the same field in the same form in two different tabs
      would have two different values. FormSessionIdentifier and
      FieldSessionIdentifier together are used to link to the field in
      Autofill2.FieldInfo.
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The signature of the field, a 10 bit hash value (0-1021) of the field name
      and field type used to denote this field for query and voting purposes.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. FormSessionIdentifier and FieldSessionIdentifier
      together are used to link to the field in Autofill2.FieldInfo.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form, which is a 10-bit hash of the form's domain,
      name and all the supported form fields (including empty names).
    </summary>
  </metric>
  <metric name="MillisecondsFromFormParsedUntilSubmission">
    <summary>
      The time interval from form parse to form submission in ms in exponential
      buckets from |GetSemanticBucketMinForDurationTiming()|.
    </summary>
  </metric>
  <metric name="RankInFieldSignatureGroup">
    <summary>
      If multiple fields have the same signature, this indicates the position
      within this set of fields. This allows us to understand problems related
      to duplicated field signatures.
    </summary>
  </metric>
  <metric name="SubmissionSource" enum="AutofillSubmissionSource">
    <summary>
      The source of form submission. The source is from
      autofill::mojom::SubmissionSource.
    </summary>
  </metric>
  <metric name="SubmittedType1" enum="AutofillFieldType">
    <summary>
      The first possible field submitted type is determined by comparing the
      submitted value in the field with the stored user profiles. We will have
      at most three possible field submitted types. The types are from
      |autofill::FieldType|.
    </summary>
  </metric>
  <metric name="SubmittedType2" enum="AutofillFieldType">
    <summary>
      The second possible field submitted type is determined by comparing the
      submitted value in the field with the stored user profiles. We will have
      at most three possible field submitted types. The types are from
      |autofill::FieldType|.
    </summary>
  </metric>
  <metric name="SubmittedType3" enum="AutofillFieldType">
    <summary>
      The third possible field submitted type is determined by comparing the
      submitted value in the field with the stored user profiles. We will have
      at most three possible field submitted types. The types are from
      |autofill::FieldType|.
    </summary>
  </metric>
</event>

<event name="Autofill2.FocusedComplexForm">
  <owner>battre@chromium.org</owner>
  <owner>chrome-autofill-team@google.com</owner>
  <summary>
    Tracks metrics of forms of type FormTypeNameForLogging::kPostalAddress and
    FormTypeNameForLogging::kCreditCard - if at least one field was focused
    whose type did not belong to FormType::kUnknownFormType. Autofocus on page
    load, focus-by-pressing-the-tab-key and focus-by-tapping/clicking count as
    focus events. The event name contains the term &quot;complex forms&quot;
    because only forms of type FormTypeNameForLogging::kPostalAddress and
    FormTypeNameForLogging::kCreditCard are logged (to save space and
    bandwidth). The event is recorded when the form object is deallocated.
  </summary>
  <metric name="AutofillDataQueried">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that at least one field of the `FormType` was focused via a tap or click
      such that the field was eligible for an autofill if data existed.
    </summary>
  </metric>
  <metric name="Autofilled">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that at least one field of type `FormType` was autofilled at least once
      (if the autofill is reverted or modified, this is ignored).
    </summary>
  </metric>
  <metric name="DayInAblationWindow">
    <summary>
      For an ablation experiment we define a grid of 14-day windows. The
      ablation state is determined by a hash value of a user-seed (random
      number), the main frame origin, the ablation window. If, for example, an
      ablation window lasts 14 days, this can be a value between 0 and 13. It
      indicates whether the user is in the begining or at the end of an ablation
      window.
    </summary>
  </metric>
  <metric name="EditedAfterAutofill">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that at least one field of type `FormType` was autofilled and later
      modified by the user.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. This is used to link the fields in this form in
      Autofill2.FieldInfo and more details in Autofill2.FormSummary.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form. See components/autofill/core/common/signatures.cc for
      more details.
    </summary>
  </metric>
  <metric name="FormTypes">
    <summary>
      Bit vector with the following bits from FormTypeNameForLogging: -
      kUnknownFormType (1&lt;&lt;0), - kAddressForm (1&lt;&lt;1), -
      kCreditCardForm (1&lt;&lt;2) (A form with any field classified as a CC
      field), - kPasswordForm (1&lt;&lt;3), - kStandaloneCvcForm (1&lt;&lt;4), -
      kEmailOnlyForm (1&lt;&lt;5), - kPostalAddressForm (1&lt;&lt;6), Note that
      a form needs to be a kCreditCardForm or kPostalAddressForm to be logged.
    </summary>
  </metric>
  <metric name="HadNonEmptyValueAtSubmission">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that at least one field of type `FormType` was non-empty at submission
      time.
    </summary>
  </metric>
  <metric name="IsAblationStudyInDryRunMode">
    <summary>
      If 1, the ablation study is in dry run mode, meaning that clients are
      diverted into ablation and control groups, but they observe no behavioral
      change.
    </summary>
  </metric>
  <metric name="IsInAblationGroupOfAblation">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that that for this form and the respective form type, the user was in the
      ablation group, meaning that the user did not get the autofill UI,
      regardless whether they had data available for filling.
    </summary>
  </metric>
  <metric name="IsInAblationGroupOfConditionalAblation">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that that for this form and the respective form type, the user was in the
      conditional ablation group, meaning that the user had data that could be
      filled, but the filling was suppressed due to the ablation.
    </summary>
  </metric>
  <metric name="IsInControlGroupOfAblation">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that that for this form and the respective form type, the user was in the
      ablation control group. This is the corresponding control group to
      IsInAblationGroupOfAblation. Autofill is not disabled but metrics are
      recorded.
    </summary>
  </metric>
  <metric name="IsInControlGroupOfConditionalAblation">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that that for this form and the respective form type, the user was in the
      conditional ablation control group. This is the corresponding control
      group to IsInAblationGroupOfConditionalAblation. Autofill is not disabled
      but metrics are recorded.
    </summary>
  </metric>
  <metric name="MillisecondsFromFirstInteractionUntilSubmission">
    <summary>
      The time interval from first interaction on the form to form submission in
      ms in buckets from |GetSemanticBucketMinForAutofillDurationTiming()|. An
      interaction is defined as modifying the value of any field in the form.
    </summary>
  </metric>
  <metric name="SuggestionsAvailable">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that for at least one field of type `FormType` a suggestion was queried
      and available for the user. A bit is unset if no suggestions were queried
      for a form type.
    </summary>
  </metric>
  <metric name="UserModified">
    <summary>
      A bit-vector with bits set according to `FormType`. A set bit indicates
      that at least one field of the `FormType` was modified by the user (typed
      text, pasted text or autofilled).
    </summary>
  </metric>
  <metric name="WasSubmitted" enum="Boolean">
    <summary>
      Whether the form was submitted.
    </summary>
  </metric>
</event>

<event name="Autofill2.FormSummary">
  <owner>battre@chromium.org</owner>
  <owner>chrome-autofill-team@google.com</owner>
  <summary>
    Information recorded for a HTML form element on the HTML page, recorded at
    form submission or form destruction time (whatever comes first).
  </summary>
  <metric name="AutofillFormEvents">
    <summary>
      A bit vector of some autofill form events that records a funnel of this
      autofill form. The autofill form events are from an enum list specifying
      the possible status of the autofill forms, such as if a dropdown with
      suggestions was shown, if the user interacted with a field in the form.
      Some of the events are triggered separately for address and credit card
      forms, e.g. if all the fillable fields in the credit card forms were
      filled. New form events can be added over time and a form can have
      multiple form events. This bit vector stored only events 0..63.
    </summary>
  </metric>
  <metric name="AutofillFormEvents2">
    <summary>
      A bit vector of some autofill form events that records a funnel of this
      autofill form. This contains the entries 64...127 shifted right by 64
      bits.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. This is used to link the fields in this form in
      Autofill2.FieldInfo.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form, which is a 10-bit hash of the form's domain,
      name and all the supported form fields (including empty names).
    </summary>
  </metric>
  <metric name="MillisecondsFromFirstInteratctionUntilSubmission">
    <summary>
      The time interval from first interaction on the form to form submission in
      ms in exponential buckets from |GetSemanticBucketMinForDurationTiming()|.
      An interaction is defined as modifying the value of any field in the form.
    </summary>
  </metric>
  <metric name="MillisecondsFromFormParsedUntilSubmission">
    <summary>
      The time interval from form parse to form submission in ms in exponential
      buckets from |GetSemanticBucketMinForDurationTiming()|.
    </summary>
  </metric>
  <metric name="SampleRate">
    <summary>
      A sampling rate is a precomputed positive integer and is applied to each
      form and adaptive to the popularity of forms. The most popular forms are
      classified into a `very popular` category and maybe apply a 1:100 sampling
      while the less popular forms have a sampling of 1:1. If the sampling is
      1:X, this sample rate value stores the `X`.
    </summary>
  </metric>
  <metric name="WasSubmitted" enum="Boolean">
    <summary>
      Whether the form was submitted.
    </summary>
  </metric>
</event>

<event name="Autofill2.SuggestionAccepted">
  <owner>jihadghanna@google.com</owner>
  <summary>
    Recorded when the user accepts a suggestion on some trigger field. This
    includes only suggestions going through the Autofill codebase, meaning that
    password suggestions are excluded.
  </summary>
  <metric name="AcceptedIndex">
    <summary>
      The index of the accepted suggestion in the list of shown suggestions.
    </summary>
  </metric>
  <metric name="FieldSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a form control (e.g.
      a HTML input element). This should be globally unique and suitable for
      distinguishing fields. Two different users would have different values.
      For the same user, the same field in the same form in two different tabs
      would have two different values.
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The signature of the field.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form.
    </summary>
  </metric>
  <metric name="OverallType" enum="AutofillFieldType">
    <summary>
      FieldType of the trigger field where the suggestions where accepted. For
      fields that have multiple field types, one of them is chosen arbitrarily.
    </summary>
  </metric>
  <metric name="PriorValueLength">
    <summary>
      Length of the value in the field before accepting the suggestion.
    </summary>
  </metric>
  <metric name="SuggestionType" enum="SuggestionType">
    <summary>
      The type of the accepted suggestion.
    </summary>
  </metric>
</event>

<event name="AutofillAi.FieldEvent">
  <owner>jihadghanna@google.com</owner>
  <owner>jkeitel@google.com</owner>
  <owner>schwering@google.com</owner>
  <summary>
    Records when a user edits a value that was filled by an Autofill AI
    suggestion.
  </summary>
  <metric name="AiFieldType">
    <summary>
      The first server AI type of the field as classified by Autofill's ML
      model.
    </summary>
  </metric>
  <metric name="AiFieldType2">
    <summary>
      The second server AI type of the field as classified by Autofill's ML
      model.
    </summary>
  </metric>
  <metric name="AiFieldType3">
    <summary>
      The third server AI type of the field as classified by Autofill's ML
      model.
    </summary>
  </metric>
  <metric name="AiFieldType4">
    <summary>
      The fourth server AI type of the field as classified by Autofill's ML
      model.
    </summary>
  </metric>
  <metric name="EntityType">
    <summary>
      The type of entity for which the current metric record is being logged
      (E.g. Passport, Driver's License, etc.).
    </summary>
  </metric>
  <metric name="EventType">
    <summary>
      Type of the event being recorded, see `AutofillAiUkmLogger::EventType` for
      more details.
    </summary>
  </metric>
  <metric name="FieldSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a form control (e.g.
      a HTML input element). This should be globally unique and suitable for
      distinguishing fields. Two different users would have different values.
      For the same user, the same field in the same form in two different tabs
      would have two different values.
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The signature of the field (mod 1021). This is the hash identifier used to
      denote this field for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
  <metric name="FieldType">
    <summary>
      The first `FieldType` as classified by Autofill. See
      `AutofillType::GetAutofillAiTypes()`.
    </summary>
  </metric>
  <metric name="FieldType2">
    <summary>
      The second `FieldType` as classified by Autofill. See
      `AutofillType::GetAutofillAiTypes()`.
    </summary>
  </metric>
  <metric name="FieldType3">
    <summary>
      The third `FieldType` as classified by Autofill. See
      `AutofillType::GetAutofillAiTypes()`.
    </summary>
  </metric>
  <metric name="FieldType4">
    <summary>
      The fourth `FieldType` as classified by Autofill. See
      `AutofillType::GetAutofillAiTypes()`.
    </summary>
  </metric>
  <metric name="FormatStringSource">
    <summary>
      The source of the format string of the field, see `FormatStringSource` in
      components/autofill/core/browser/autofill_field.h for more info.
    </summary>
  </metric>
  <metric name="FormSessionEventOrder">
    <summary>
      The order of the event in the sequence of event sharing the same
      FormSessionIdentifier.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. This is used to link the fields to a form in
      AutofillAi.KeyMetrics.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
</event>

<event name="AutofillAi.KeyMetrics">
  <owner>jihadghanna@google.com</owner>
  <owner>jkeitel@google.com</owner>
  <owner>schwering@google.com</owner>
  <summary>
    These metrics are a clone of Autofill's UMA key metrics to measure Autofill
    quality. They are recorded on navigation if a form was submitted before,
    only if the submitted form had Autofill AI prediction.
  </summary>
  <metric name="AutofillAiFilledFieldCount">
    <summary>
      The number of fields at form submission that are autofilled and that were
      autofilled by AutofillAi. Fields filled with any other source will be
      excluded from this count.
    </summary>
  </metric>
  <metric name="AutofillFilledFieldCount">
    <summary>
      The number of fields at form submission that are autofilled. This will
      include fields that are autofilled by any source except Autocomplete,
      including AutofillAi.
    </summary>
  </metric>
  <metric name="EntityType">
    <summary>
      The type of entity for which the current metric record is being logged
      (E.g. Passport, Driver's License, etc.).
    </summary>
  </metric>
  <metric name="FillingAcceptance">
    <summary>
      Has value 1 if user accepted the suggestion to fill values on a submitted
      form, 0 otherwise. This is counted as 1 if the user accepted such a
      suggestion at any time, regardless whether other suggestions were ignored
      or whether the accepted suggestion was reverted afterwards. Only recorded
      if suggestions were shown to the user.
    </summary>
  </metric>
  <metric name="FillingAssistance">
    <summary>
      Has value 1 if the user filled any fields via Autofill on a submitted
      form, 0 otherwise.

      If the user reverts the filling, the form is still counted as filled.

      This metric is different from FillingAcceptance in the sense that the
      latter is only recorded if the user has actually seen a prompt to fill
      data.
    </summary>
  </metric>
  <metric name="FillingCorrectness">
    <summary>
      Has value 1 for submitted and autofilled forms if user edited at least one
      filled value before submitting the form, 0 otherwise. Only recorded if any
      suggestion was filled.
    </summary>
  </metric>
  <metric name="FillingReadiness">
    <summary>
      Has value 1 for submitted forms when Chromium had any address or payments
      data to fill, 0 otherwise.

      It does not matter whether the user actually requested to fill the data.
      It does not matter either whether the data available for filling
      corresponded to the submitted data.
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. This is used to link the fields to a form in
      AutofillAi.FieldInfo.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form for query and voting purposes. See
      components/autofill/core/common/signatures.cc for more details.
    </summary>
  </metric>
  <metric name="OptInStatus">
    <summary>
      Has value 1 if the user is opted in into Autofill AI suggestions and
      filling and 0 otherwise.
    </summary>
  </metric>
  <metric name="PerfectFilling">
    <summary>
      Has value 1 if the user didn't edit any field manually at submission time
      and 0 otherwise.
    </summary>
  </metric>
</event>

<event name="AutofillAi.UserPromptMetrics">
  <owner>jihadghanna@google.com</owner>
  <owner>jkeitel@google.com</owner>
  <owner>brunobraga@google.com</owner>
  <summary>
    Records when an AutofillAi prompt is shown to the user, such as saving or
    updating entities.
  </summary>
  <metric name="EntityType">
    <summary>
      The type of entity for which the current metric record is being logged
      (E.g. Passport, Driver's License, etc.).
    </summary>
  </metric>
  <metric name="FormSessionIdentifier">
    <summary>
      A random variable assigned to a specific instance of a HTML form in a
      specific renderer. This should be globally unique and suitable for
      counting distinct forms. Two different users would have different values.
      A single user loading the same form in two different tabs would have two
      different values. This is used to link the fields to a form in
      AutofillAi.KeyMetrics.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form. See components/autofill/core/common/signatures.cc for
      more details.
    </summary>
  </metric>
  <metric name="PromptType">
    <summary>
      Describes the type of prompt shown to the user. This could be for example
      a save or update entity prompt.
    </summary>
  </metric>
  <metric name="Result">
    <summary>
      The decision made by the user after being shown a prompt. This could be
      for example, accepted, declined or ignored.
    </summary>
  </metric>
  <metric name="StorageType">
    <summary>
      Describes to which storage the data will be saved if the user accepts the
      prompt, such locally or in the wallet server.
    </summary>
  </metric>
</event>

<event name="BackForwardCacheDisabledForRenderFrameHostReason">
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    Recorded at a history commit for each reason passed to
    BackForwardCache::DisableForRenderFrameHost. The source IDs match with the
    source IDs of HistoryNavigation events.
  </summary>
  <metric name="Reason2"
      enum="BackForwardCacheDisabledForRenderFrameHostReason2">
    <summary>
      For history navigations, records the reason passed to
      BackForwardCache::DisableForRenderFrameHost calls. The reason is specified
      as a 48-bit int representing the source (blink or an embedder) and a
      source-specific 16-bit int representing the reason specific to that
      source.

      The metric is recorded when a history navigation commits and emits a
      sample for each reason. One history navigation can emit multiple reasons,
      and these reasons are recorded as multiple events with the same source ID
      based on the navigation ID.
    </summary>
  </metric>
</event>

<event name="BackForwardCacheDisallowActivationReason">
  <owner>hajimehoshi@chromium.org</owner>
  <owner>fergal@chromium.org</owner>
  <summary>
    Recorded at a history commit for each reason passed to
    RenderFrameHost::IsInactiveAndDisallowActivation. The source IDs match with
    the source IDs of HistoryNavigation events.
  </summary>
  <metric name="Reason" enum="InactiveFrameDisallowActivationReason">
    <summary>
      For history navigations, records the reason passed to
      RenderFrameHost::IsInactiveAndDisallowActivation.

      The metric is recorded when a history navigation commits and emits a
      sample for each reason. One history navigation can emit multiple reasons,
      and these reasons are recorded as multiple events with the same source ID
      based on the navigation ID.
    </summary>
  </metric>
</event>

<event name="BackgroundFetch">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    A BackgroundFetch event is logged before a background fetch is started from
    a document context.
  </summary>
  <metric name="DeniedDueToPermissions">
    <summary>
      Boolean for whether the background fetch was denied due to permission.
      This includes only the content setting permission.
    </summary>
  </metric>
  <metric name="DownloadTotal">
    <summary>
      The value of downloadTotal provided with the background fetch. This is the
      number of bytes that the developer expects to be downloaded with the
      background fetch. This number is exponentially bucketed for privacy
      reasons, and uses the UKM GetExponentialBucketMin method with a value of
      2.0 for spacing.
    </summary>
  </metric>
  <metric name="HasTitle">
    <summary>
      Boolean for whether a title was provided with the background fetch.
    </summary>
  </metric>
  <metric name="NumIcons">
    <summary>
      Count of icons provided with the background fetch.
    </summary>
  </metric>
  <metric name="NumRequestsInFetch">
    <summary>
      Number of requests in the background fetch. This number is exponentially
      bucketed for privacy reasons, and uses the UKM GetExponentialBucketMin
      method with a value of 2.0 for spacing.
    </summary>
  </metric>
  <metric name="RatioOfIdealToChosenIconSize">
    <summary>
      Ratio of the ideal icon to the chosen icon size, times hundred. This will
      be set to -1 if either ideal icon size is 0, or if none of the provided
      icons are suitable.
    </summary>
  </metric>
</event>

<event name="BackgroundFetchDeletingRegistration">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    A BackgroundFetchDeletingRegistration event is logged when a background
    fetch job is being deleted.
  </summary>
  <metric name="UserInitiatedAbort">
    <summary>
      Boolean for whether the background fetch job was cancelled from the UI.
    </summary>
  </metric>
</event>

<event name="BackgroundSyncCompleted">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Logged when a Background Sync one-shot registration is completed.
  </summary>
  <metric name="MaxAttempts">
    <summary>
      Integer value of the maximum number of allowed retries.
    </summary>
  </metric>
  <metric name="NumAttempts">
    <summary>
      Integer value of the number of retries / sync events dispatched.
    </summary>
  </metric>
  <metric name="Status">
    <summary>
      The enum value of the completion status, defined in
      blink::ServiceWorkerStatusCode.
    </summary>
  </metric>
</event>

<event name="BackgroundSyncRegistered">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Logged when a one-shot Background Sync registration is created.
  </summary>
  <metric name="CanFire">
    <summary>
      Boolean for whether a sync event can be immediately dispatched for this
      registration.
    </summary>
  </metric>
  <metric name="IsReregistered">
    <summary>
      Boolean for whether this is a duplicate registration.
    </summary>
  </metric>
</event>

<event name="Badging">
  <owner>phillis@chromium.org</owner>
  <owner>cmumford@chromium.org</owner>
  <summary>
    Metrics that measure the use of Badging API
  </summary>
  <metric name="UpdateAppBadge" enum="UpdateAppBadgeTypes">
    <summary>
      Logged when navigator.setAppBadge or navigator.clearAppBadge is called.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Blink.ContentManagementSystem.Versions" singular="True">
  <owner>felixarntz@google.com</owner>
  <owner>nrosenthal@chromium.org</owner>
  <summary>
    Metrics stating the detected major+minor version of known content management
    systems when detected. This event is recorded when the page is loaded. For
    interoperability with the framework detection above, this reports each
    content management system individually instead of a single number. The
    version numbers here are a bit mask: 0xMMmm (Major+minor), e.g. version 16.3
    would be 0x1003
  </summary>
  <metric name="DrupalVersion">
    <summary>
      A bitmask (0xMMmm) representing the Drupal version
    </summary>
  </metric>
  <metric name="WordPressVersion">
    <summary>
      A bitmask (0xMMmm) representing the WordPress version
    </summary>
  </metric>
</event>

<event name="Blink.EmailVerificationProtocol">
  <owner>npm@google.com</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records metrics for the Email Verification Protocol (EVP) flow. Surfaced
    once per EVP request attempt when the request flow finishes.
  </summary>
  <metric name="Autofill.FlowResult" enum="EvpAutofillFlowResult">
    <summary>
      Records the outcomes and failure reasons of the high-level Email
      Verification Protocol (EVP) flow from autofill side. Recorded once per
      autofill attempt when the verification flow finishes.
    </summary>
  </metric>
  <metric name="PermissionUi.Status" enum="EvpPermissionUiStatus">
    <summary>
      Records the outcome and dismissal reasons of the Email Verification
      Permission UI. Recorded once per permission UI showing when it is
      dismissed or accepted.
    </summary>
  </metric>
  <metric name="Status.IsVerifiable" enum="EvpRequestStatus">
    <summary>
      Records the status of the IsVerifiable stage of an Email Verification
      Protocol (EVP) request. Recorded once per request when the IsVerifiable
      check completes.
    </summary>
  </metric>
  <metric name="Status.Verify" enum="EvpRequestStatus">
    <summary>
      Records the status of the Verify stage of an Email Verification Protocol
      (EVP) request. Recorded once per request when the Verify operation
      completes.
    </summary>
  </metric>
  <metric name="Timing.IsVerifiable">
    <summary>
      Records the time taken (in milliseconds) from the start of checking if an
      email is verifiable until the pre-prompt background verification check
      completes.
    </summary>
  </metric>
  <metric name="Timing.Verify">
    <summary>
      Records the time taken (in milliseconds) from the start of the token
      verification call until the post-prompt token verification and fetch
      completes.
    </summary>
  </metric>
</event>

<event name="Blink.EmailVerificationProtocol.FormSubmission">
  <owner>npm@google.com</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records metrics for the Email Verification Protocol (EVP) when a form
    containing a verified email verification token is submitted.
  </summary>
  <metric name="Autofill.FormSubmitted" enum="BooleanHit">
    <summary>
      Records when a form containing a verified email verification token is
      submitted. Recorded once when the form submission occurs after successful
      email verification.
    </summary>
  </metric>
</event>

<event name="Blink.FedCm">
  <owner>yigu@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records performance metrics for FedCM (Federated Credential Management) API.
    Recorded when a FedCmMetrics object is destroyed, typically when cleaning up
    a RequestImpl object which is created and associated with a call to the
    FedCM API.
  </summary>
  <metric name="AccountLabel.NumMatchingAccounts" enum="FedCmNumAccounts">
    <summary>
      Records the number of accounts that match an account label. Records at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="AccountsDialogShown2">
    <summary>
      Records the number of times an accounts dialog is shown per API call.
      Records at the time the API call is completed. This is in units of
      dialogs.
    </summary>
  </metric>
  <metric name="AccountSelectionScrollPosition">
    <summary>
      Records the page scroll (y-axis) position upon account selection. Records
      once per user selecting an account by clicking on a FedCM dialog.
      Bucketized exponentially with a standard bucket spacing of 1.15. Records
      at the time the API call is completed. This is in units of pixels.
    </summary>
  </metric>
  <metric name="AccountsRequestSent2">
    <summary>
      Records the number of requests sent to the accounts endpoint per API call.
      Records at the time the API call is completed. This is in units of
      requests.
    </summary>
  </metric>
  <metric name="AccountsSize.Raw">
    <summary>
      Records the size of the accounts received from the IdP before applying any
      filters. Records one sample per accounts fetch if there's at least one
      account returned. The units is number of accounts (using exponential
      bucketing).
    </summary>
  </metric>
  <metric name="AccountsSize.ReadyToShow">
    <summary>
      Records the size of the accounts received from the IdP after applying the
      filters. Records one sample per accounts fetch if there's at least one
      account left after filtering. The units is number of accounts (using
      exponential bucketing).
    </summary>
  </metric>
  <metric name="AutoReauthn.BlockedByContentSettings" enum="Boolean">
    <summary>
      Records whether the FedCM auto re-authn call is blocked because the auto
      re-authn content settings permission is disabled. Records at most one
      sample per FedCM API with auto re-authn enabled: some failures could occur
      before this metric is recorded. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="AutoReauthn.BlockedByEmbargo" enum="Boolean">
    <summary>
      Records whether the FedCM auto re-authn call is blocked because the auto
      re-authn is under embargo, i.e. due to cooldown. Records at most one
      sample per FedCM API with auto re-authn enabled: some failures could occur
      before this metric is recorded. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="AutoReauthn.BlockedByEmbedder" enum="Boolean">
    <summary>
      Records whether auto-reauthn was disabled by an embedder (e.g. due to an
      active actor task). Records at most one sample per FedCM API with auto
      re-authn enabled: some failures could occur before this metric is recorded
    </summary>
  </metric>
  <metric name="AutoReauthn.BlockedByPreventSilentAccess" enum="Boolean">
    <summary>
      Records whether the FedCM auto re-authn call is blocked because
      preventSilentAccess() has been called on this site. Records at most one
      sample per FedCM API with auto re-authn enabled: some failures could occur
      before this metric is recorded. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="AutoReauthn.ReturningAccounts" enum="FedCmNumAccounts">
    <summary>
      Records whether there was zero, one, or multiple returning accounts when a
      site calls the FedCM API with autoReauthn: true. Records at most one
      sample per failed API call: some failures could occur before this metric
      is recorded. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="AutoReauthn.Succeeded" enum="Boolean">
    <summary>
      Records whether auto re-authn checks succeeded or not. The count would
      provide roughly the number of FedCM re-authn attempts, the true count
      would provide the number of times the re-authn UI is shown to the user,
      and the false count would provide the number of attempts where auto
      re-authn was blocked for some non-network related reason. Records at most
      one sample per FedCM API with auto re-authn enabled: some failures could
      occur before this metric is recorded. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="Button.AccountChooserResult" enum="FedCmAccountChooserResult">
    <summary>
      Records the outcome of the last account chooser the user sees in a button
      flow. Recorded at most once per button flow. For example, if the user
      selects an account on the account chooser and then clicks on the back
      button in the next dialog where an account chooser is shown again, leaving
      would only record one sample.
    </summary>
  </metric>
  <metric name="Button.DisclosureDialogResult"
      enum="FedCmDisclosureDialogResult">
    <summary>
      Records the outcome of the last disclosure dialog the user sees in a
      button flow. Recorded at most once per button flow. For example, if the
      user clicks on the back button in the disclosure dialog and then clicks on
      an account where the disclosure dialog is shown again, leaving would only
      record one sample.
    </summary>
  </metric>
  <metric name="Button.LoadingDialogResult" enum="FedCmLoadingDialogResult">
    <summary>
      Records the outcome of the loading dialog in button flow. Button flows
      always start with a loading dialog. Recorded once per button flow dialog
      destroyed. For example, when the dialog gets updated into an account
      chooser, the user can then select an account and subsequently cause the
      dialog to be destroyed once they are signed in. Upon destroyal, this
      metric is recorded.
    </summary>
  </metric>
  <metric name="CancelReason" enum="FedCmCancelReason">
    <summary>
      Records the reason that the FedCM dialog was closed (e.g. user clicked the
      dialog close button). Recorded when the FedCM dialog is closed without the
      user selecting an account. This includes instances where the close action
      is less intentional such as the virtual keyboard showing triggering the
      dialog close. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="DidShowUI" enum="Boolean">
    <summary>
      Records whether the FedCM dialog was shown. Recorded once per API call
      when the request is fulfilled (either resolved or rejected).
    </summary>
  </metric>
  <metric name="Disconnect.FrameType" enum="FedCmRequesterFrameType">
    <summary>
      Records the type of frame that invokes disconnect(). Records once for each
      disconnect() call. Possible values are: main frame, same-site iframe, and
      cross-site iframe, where the site of the caller frame is compared with the
      site of the main frame. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="DomainHint.NumMatchingAccounts" enum="FedCmNumAccounts">
    <summary>
      Records the number of accounts that match a domain hint. Records at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="Error.ErrorDialogResult" enum="FedCmErrorDialogResult">
    <summary>
      Records the outcome of the error dialog. Recorded at most once per API
      call when the API call is completed.
    </summary>
  </metric>
  <metric name="Error.ErrorDialogType" enum="FedCmErrorDialogType">
    <summary>
      Records the type of error dialog shown. Recorded at most once per API call
      when the API call is completed.
    </summary>
  </metric>
  <metric name="Error.TokenResponseType" enum="FedCmTokenResponseType">
    <summary>
      Records the type of token response received. Recorded at most once per API
      call when the API call is completed.
    </summary>
  </metric>
  <metric name="FedCmSessionID">
    <summary>
      Records the session ID associated to the FedCM call for which this event
      is recording metrics. Each FedCM call gets a random integer session id,
      which helps group UKM events by the session id. Records at the time the
      API call is completed.
    </summary>
  </metric>
  <metric name="FrameType" enum="FedCmRequesterFrameType">
    <summary>
      Records the type of frame that invokes the FedCM API. Records once per API
      call. Possible values are: main frame, same-site iframe, and cross-site
      iframe, where the site of the caller frame is compared with the site of
      the main frame. Same-origin iframes are recorded under the same-site
      category. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="HasNonce" enum="BooleanHit">
    <summary>
      Records a 1 whenever a FedCM API call includes the nonce parameter.
      Records towards the beginning of the call, except for some cases where the
      call is immediately rejected.
    </summary>
  </metric>
  <metric name="HasNonceOutsideParamsOnly" enum="BooleanHit">
    <summary>
      Records a 1 whenever a FedCM API call includes the nonce parameter, but
      does not include it inside the params JSON blob. Records towards the
      beginning of the call, except for some cases where the call is immediately
      rejected.
    </summary>
  </metric>
  <metric name="HasSigninAccount" enum="Boolean">
    <summary>
      Records whether a user is signing up with the API. Records once per
      successful account fetch from the IdP server after the accounts filtering.
      If there are multiple accounts, record the user as sign-in if IdP claims
      at least one of the accounts is sign-in. If an IdP does not share the
      user's sign-in state, record the state stored in the browser. Records at
      the time the API call is completed.
    </summary>
  </metric>
  <metric name="IdentityProvidersCount">
    <summary>
      Records the count of identity providers right before fetching endpoints
      with multi IDP flag enabled. It counts distinct providers including the
      ones a user is not signed in to. Recorded at most once per API call.
      Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="LoginHint.NumMatchingAccounts" enum="FedCmNumAccounts">
    <summary>
      Records the number of accounts that match a login hint. Records at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="MismatchDialogShown2">
    <summary>
      Records the number of times a mismatch dialog is shown per API call.
      Records at the time the API call is completed. This is in units of
      dialogs.
    </summary>
  </metric>
  <metric name="MultipleRequestsFromDifferentIdPs" enum="Boolean">
    <summary>
      Records whether an API call is rejected due to there's an existing
      in-flight API call initiated by other IdPs. Recorded once per promise
      rejection because of an existing API call. Records at the time the API
      call is completed.
    </summary>
  </metric>
  <metric name="MultipleRequestsRpMode" enum="FedCmMultipleRequestsRpMode">
    <summary>
      Records the RpMode of two consecutive requests. Recorded every time when a
      token request is invoked while there is another one pending.
    </summary>
  </metric>
  <metric name="NumIdpsMismatch">
    <summary>
      Records the number of IDPs that result in a 'mismatch' status from a
      single FedCM get() invocation. Records at the time the API call is
      completed. Records some integer 0 or greater. Uses exponential count
      bucketing.
    </summary>
  </metric>
  <metric name="NumIdpsRequested">
    <summary>
      Records the number of IDPs that are requested from a single FedCM get()
      invocation. Records at the time the API call is completed. Records some
      integer greater than or equal to 1. Uses exponential count bucketing.
    </summary>
  </metric>
  <metric name="NumRequestsPerDocument">
    <summary>
      Records the number of navigator.credentials.get() requests made in a
      document. Requests made when FedCM is disabled or when there is a pending
      FedCM request are not counted. Records at most one sample for every
      document where at least one navigator.credentials.get() request is made.
      No samples are recorded if the count is 0. Records at the time the API
      call is completed. The bucketing method used is
      base::UmaHistogramCounts100.
    </summary>
  </metric>
  <metric name="RpMode" enum="FedCmRpMode">
    <summary>
      Records the RP mode of the FedCM API. Recorded once per API call together
      with Status.RequestIdToken when the request is fulfilled (either resolved
      or rejected). Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="RpUrlHasPath" enum="Boolean">
    <summary>
      Whether the accounts dialog is shown on an RP URL which has a path.
      Recorded each time the user is shown an accounts dialog. Records at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="Status.Disconnect" enum="FedCmDisconnectStatus">
    <summary>
      Records the status of a disconnect call to the FedCM API. Recorded once
      per IdentityCredential.disconnect() call, once the browser knows the
      result.
    </summary>
  </metric>
  <metric name="Status.MediationRequirement"
      enum="CredentialManagerMediationRequirement">
    <summary>
      Records the mediation requirement of a request token call to the FedCM
      API. Records a sample when the call is completed, i.e. at the same time as
      Status.RequestIdToken.
    </summary>
  </metric>
  <metric name="Status.RequestIdToken" enum="FedCmRequestIdTokenStatus">
    <summary>
      Records the status of a request id token call to the FedCM API. Recorded
      once per API call when the request is fulfilled (either resolved or
      rejected).
    </summary>
  </metric>
  <metric name="Status.SignInStateMatch" enum="FedCmSignInStateMatchStatus">
    <summary>
      Records whether user sign-in states between IDP and browser match after
      browser receives an account list from IDP prior to showing UI. Records at
      the time the API call is completed.
    </summary>
  </metric>
  <metric name="ThirdPartyCookiesStatus" enum="FedCmThirdPartyCookiesStatus">
    <summary>
      Records the status of third party cookies when a FedCM API call is
      invoked. Recorded at most once per API call. i.e. at the same time as
      Blink.FedCm.Status.RequestIdToken.
    </summary>
  </metric>
  <metric name="Timing.AccountsDialogShownDuration">
    <summary>
      Records the duration from when an accounts dialog is shown to when dialog
      is destroyed e.g. user selects an account, user closes the dialog, or the
      developer aborts the request. This duration includes the time when the
      accounts dialog is inactive e.g. user switches to a different tab. Samples
      are at most 10 minutes. Records a sample when an accounts dialog which is
      not the verifying UI for auto re-authentication is shown. Records at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.CancelOnDialog">
    <summary>
      Records the time (in milliseconds) from when the accounts dialog is shown
      to when the user closes the dialog without selecting any account. Records
      at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.ContinueOnDialog">
    <summary>
      Records the time (in milliseconds) from when the accounts dialog is shown
      to when the user presses the Continue button. Records at the time the API
      call is completed.
    </summary>
  </metric>
  <metric name="Timing.Disconnect">
    <summary>
      Records the time in milliseconds from when the disconnect() request is
      received by the browser process to the time in which it is completed, e.g.
      right before sending the response back to the renderer process. Records
      one sample for every disconnect call which sends a disconnect request.
      Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.IdTokenResponse">
    <summary>
      Records the time (in milliseconds) from when the user presses the Continue
      button to when the id token response is received. Records at the time the
      API call is completed.
    </summary>
  </metric>
  <metric name="Timing.MismatchDialogShownDuration">
    <summary>
      Records the duration from when a mismatch dialog is shown to when user
      triggers IDP sign-in pop-up window or when dialog is destroyed e.g. user
      closes the dialog. This duration includes the time when the mismatch
      dialog is inactive e.g. user switches to a different tab. Samples are at
      most 10 minutes. Records a sample when a mismatch dialog is shown, at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.ShowAccountsDialog">
    <summary>
      Records the time (in milliseconds) from when a call to the API was made to
      when the accounts dialog is shown. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="Timing.ShowAccountsDialogBreakdown.AccountsFetch">
    <summary>
      Records the time (in milliseconds) from when the accounts request was made
      to when the fetch response is received. Only recorded when the accounts
      are ready to show which means all fetches are done. In case of multiple
      identity providers, the fetch that takes the longest will be recorded.
      Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.ShowAccountsDialogBreakdown.ClientMetadataFetch">
    <summary>
      Records the time (in milliseconds) from when the client metadata request
      was made to when the fetch response is received. Only recorded when the
      accounts are ready to show which means all fetches are done. In case of
      multiple identity providers, the fetch that takes the longest will be
      recorded. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.ShowAccountsDialogBreakdown.WellKnownAndConfigFetch">
    <summary>
      Records the time (in milliseconds) from when a call to the API was made to
      when the well-known and config files fetch are received. Only recorded
      when the accounts are ready to show which means all fetches are done. In
      case of multiple identity providers, the fetch that takes the longest will
      be recorded. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.TurnaroundTime">
    <summary>
      Records the overall time (in milliseconds) from when the API is called to
      when the id token response is received. Records at the time the API call
      is completed.
    </summary>
  </metric>
  <metric name="UseOtherAccountResult" enum="FedCmUseOtherAccountResult">
    <summary>
      Records the outcome of the user clicking on the &quot;use other
      account&quot; button in FedCM. Recorded once per API call when the user
      attempts to login with a new account via the &quot;use other account&quot;
      button, when the request is fulfilled (either resolved or rejected). Only
      considers the last &quot;use other account&quot; button clicked if there
      are multiple attempts. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="VerifyingDialogResult" enum="FedCmVerifyingDialogResult">
    <summary>
      Records the outcome of the verifying dialog. Recorded once per verifying
      dialog shown when the FedCM call is completed, i.e. at the same time as
      Blink.FedCm.Status.RequestIdToken.
    </summary>
  </metric>
  <metric name="WellKnownInvalidDueToClientMetadata" enum="BooleanHit">
    <summary>
      Records a 1 whenever a FedCM API call includes a well-known file without
      `accounts` or `login_url` but where the config file has `client_metadata`.
      Records when the config and well-known files have been fetched.
    </summary>
  </metric>
</event>

<event name="Blink.FedCmIdp">
  <owner>npm@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records performance metrics for FedCM (Federated Credential Management) API.
    Recorded when a FedCmMetrics object is destroyed, typically when cleaning up
    a RequestImpl object which is created and associated with a call to the
    FedCM API.

    This event uses the specific WEB_IDENTITY ukm_source_id which is generated
    from the identity provider's origin.
  </summary>
  <metric name="AccountsDialogShown2">
    <summary>
      Records the number of times an accounts dialog is shown per API call.
      Records at the time the API call is completed. This is in units of
      dialogs.
    </summary>
  </metric>
  <metric name="AccountsRequestSent2">
    <summary>
      Records the number of requests sent to the accounts endpoint per API call.
      This is in units of requests.
    </summary>
  </metric>
  <metric name="Disconnect.FrameType" enum="FedCmRequesterFrameType">
    <summary>
      Records the type of frame that invokes disconnect(). Records once for each
      disconnect() call. Possible values are: main frame, same-site iframe, and
      cross-site iframe, where the site of the caller frame is compared with the
      site of the main frame. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Error.ErrorDialogResult" enum="FedCmErrorDialogResult">
    <summary>
      Records the outcome of the error dialog. Recorded at most once per API
      call when the error dialog is displayed. Records at the time the API call
      is completed.
    </summary>
  </metric>
  <metric name="Error.ErrorDialogType" enum="FedCmErrorDialogType">
    <summary>
      Records the type of error dialog shown. Recorded at most once per API call
      when the error dialog is displayed. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="Error.ErrorUrlType" enum="FedCmErrorUrlType">
    <summary>
      Records whether the error URL is same-origin, cross-origin but same-site
      or cross-site with the config URL. Recorded at most once per API call when
      a valid error URL is received. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="Error.TokenResponseType" enum="FedCmTokenResponseType">
    <summary>
      Records the type of token response received. Recorded at most once per API
      call when a token response received. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="FedCmSessionID">
    <summary>
      Records the session ID associated to the FedCM call for which this event
      is recording metrics. Each FedCM call gets a random integer session id,
      which helps group UKM events by the session id. Records at the time the
      API call is completed.
    </summary>
  </metric>
  <metric name="FrameType" enum="FedCmRequesterFrameType">
    <summary>
      Records the type of frame that invokes the FedCM API. Records once per API
      call. Possible values are: main frame, same-site iframe, and cross-site
      iframe, where the site of the caller frame is compared with the site of
      the main frame. Same-origin iframes are recorded under the same-site
      category. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="HasNonce" enum="BooleanHit">
    <summary>
      Records a 1 whenever a FedCM API call includes the nonce parameter.
      Records towards the beginning of the call, except for some cases where the
      call is immediately rejected.
    </summary>
  </metric>
  <metric name="HasNonceOutsideParamsOnly" enum="BooleanHit">
    <summary>
      Records a 1 whenever a FedCM API call includes the nonce parameter, but
      does not include it inside the params JSON blob. Records towards the
      beginning of the call, except for some cases where the call is immediately
      rejected.
    </summary>
  </metric>
  <metric name="HasSigninAccount" enum="Boolean">
    <summary>
      Records whether a user is signing up with the API. Records once per
      successful account fetch from the IdP server after the accounts filtering.
      If there are multiple accounts, record the user as sign-in if IdP claims
      at least one of the accounts is sign-in. If an IdP does not share the
      user's sign-in state, record the state stored in the browser. Records at
      the time the API call is completed.
    </summary>
  </metric>
  <metric name="MismatchDialogShown2">
    <summary>
      Records the number of times a mismatch dialog is shown per API call.
      Records at the time the API call is completed. This is in units of
      dialogs.
    </summary>
  </metric>
  <metric name="MultipleRequestsRpMode" enum="FedCmMultipleRequestsRpMode">
    <summary>
      Records the RpMode of two consecutive requests. Recorded every time when a
      token request is invoked while there is another one pending.
    </summary>
  </metric>
  <metric name="NumIdpsMismatch">
    <summary>
      Records the number of IDPs that result in a 'mismatch' status from a
      single FedCM get() invocation. Recorded every time a FedCM get() call is
      resolved. Records at the time the API call is completed. Records some
      integer 0 or greater. Uses exponential count bucketing.
    </summary>
  </metric>
  <metric name="NumIdpsRequested">
    <summary>
      Records the number of IDPs that are requested from a single FedCM get()
      invocation. Recorded every time a FedCM get() call is resolved. Records
      some integer greater than or equal to 1. Uses exponential count bucketing.
    </summary>
  </metric>
  <metric name="RpMode" enum="FedCmRpMode">
    <summary>
      Records the RP mode of the FedCM API. Recorded once per API call together
      with Status.RequestIdToken when the request is fulfilled (either resolved
      or rejected).
    </summary>
  </metric>
  <metric name="Status.Disconnect" enum="FedCmDisconnectStatus">
    <summary>
      Records the status of a disconnect call to the FedCM API. Recorded once
      per IdentityCredential.disconnect() call, once the browser knows the
      result.
    </summary>
  </metric>
  <metric name="Status.MediationRequirement"
      enum="CredentialManagerMediationRequirement">
    <summary>
      Records the mediation requirement of a request token call to the FedCM
      API. Records a sample when the call is completed, i.e. at the same time as
      Status.RequestIdToken.
    </summary>
  </metric>
  <metric name="Status.RequestIdToken" enum="FedCmRequestIdTokenStatus">
    <summary>
      Records the status of a request id token call to the FedCM API. Recorded
      once per API call when the request is fulfilled (either resolved or
      rejected).
    </summary>
  </metric>
  <metric name="Status.SignInStateMatch" enum="FedCmSignInStateMatchStatus">
    <summary>
      Records whether user sign-in states between IDP and browser match after
      browser receives an account list from IDP prior to showing UI. Records at
      the time the API call is completed.
    </summary>
  </metric>
  <metric name="ThirdPartyCookiesStatus" enum="FedCmThirdPartyCookiesStatus">
    <summary>
      Records the status of third party cookies when a FedCM API call is
      invoked. Recorded at most once per API call. i.e. at the same time as
      Blink.FedCm.Status.RequestIdToken.
    </summary>
  </metric>
  <metric name="Timing.AccountsDialogShownDuration">
    <summary>
      Records the duration from when an accounts dialog is shown to when dialog
      is destroyed e.g. user selects an account, user closes the dialog, or the
      developer aborts the request. This duration includes the time when the
      accounts dialog is inactive e.g. user switches to a different tab. Samples
      are at most 10 minutes. Records a sample when an accounts dialog which is
      not the verifying UI for auto re-authentication is shown. Records at the
      time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.CancelOnDialog">
    <summary>
      Records the time (in milliseconds) from when the accounts dialog is shown
      to when the user closes the dialog without selecting any account. Records
      at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.ContinueOnDialog">
    <summary>
      Records the time (in milliseconds) from when the accounts dialog is shown
      to when the user presses the Continue button. Records at the time the API
      call is completed.
    </summary>
  </metric>
  <metric name="Timing.Disconnect">
    <summary>
      Records the time in milliseconds from when the disconnect() request is
      received by the browser process to the time in which it is completed, e.g.
      right before sending the response back to the renderer process. Records
      one sample for every disconnect call which sends a disconnect request.
      Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.IdTokenResponse">
    <summary>
      Records the time (in milliseconds) from when the user presses the Continue
      button to when the id token response is received. Records at the time the
      API call is completed.
    </summary>
  </metric>
  <metric name="Timing.MismatchDialogShownDuration">
    <summary>
      Records the duration from when a mismatch dialog is shown to when user
      triggers IDP sign-in pop-up window or when dialog is destroyed e.g. user
      closes the dialog. This duration includes the time when the mismatch
      dialog is inactive e.g. user switches to a different tab. Samples are at
      most 10 minutes. Records a sample when a mismatch dialog is shown. Records
      at the time the API call is completed.
    </summary>
  </metric>
  <metric name="Timing.ShowAccountsDialog">
    <summary>
      Records the time (in milliseconds) from when a call to the API was made to
      when the accounts dialog is shown. Records at the time the API call is
      completed.
    </summary>
  </metric>
  <metric name="Timing.TurnaroundTime">
    <summary>
      Records the overall time (in milliseconds) from when the API is called to
      when the id token response is received. Records at the time the API call
      is completed.
    </summary>
  </metric>
  <metric name="UseOtherAccountResult" enum="FedCmUseOtherAccountResult">
    <summary>
      Records the outcome of the user clicking on the &quot;use other
      account&quot; button in FedCM. Recorded once per API call when the user
      attempts to login with a new account via the &quot;use other account&quot;
      button, when the request is fulfilled (either resolved or rejected). Only
      considers the last &quot;use other account&quot; button clicked if there
      are multiple attempts. Records at the time the API call is completed.
    </summary>
  </metric>
  <metric name="VerifyingDialogResult" enum="FedCmVerifyingDialogResult">
    <summary>
      Records the outcome of the verifying dialog. Recorded once per verifying
      dialog shown when the FedCM call is completed, i.e. at the same time as
      Blink.FedCm.Status.RequestIdToken.
    </summary>
  </metric>
  <metric name="WellKnownInvalidDueToClientMetadata" enum="BooleanHit">
    <summary>
      Records a 1 whenever a FedCM API call includes a well-known file without
      `accounts` or `login_url` but where the config file has `client_metadata`.
      Records when the config and well-known files have been fetched.
    </summary>
  </metric>
</event>

<event name="Blink.FindInPage" singular="True">
  <owner>vmpstr@chromium.org</owner>
  <owner>chrishtr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Logged once per page; indicates the type of find-in-page behaviors users
    utilizied.
  </summary>
  <metric name="BeforematchExpandedHiddenMatchable">
    <summary>
      Boolean indicating that a find-in-page match was hidden but became visible
      after the beforematch event was fired.
    </summary>
  </metric>
  <metric name="DidHaveRenderSubtreeMatch">
    <summary>
      Boolean indicating whether there was an active match in content-visibility
      unrendered elements.
    </summary>
  </metric>
  <metric name="DidSearch">
    <summary>
      Boolean indicating that find-in-page happened.
    </summary>
  </metric>
</event>

<event name="Blink.FrameLoader">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Timing metrics associated with the frame loader in Blink.
  </summary>
  <metric name="CommitDocumentLoaderTime">
    <summary>
      Time taken to commit a new document in Blink in microseconds. Collected
      once per navigation when a frame is loaded. This is rounded down to the
      nearest exponential bucket.
    </summary>
  </metric>
</event>

<event name="Blink.HTMLParsing">
  <owner>dom-dev@google.com</owner>
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Logged once per page load, to capture information about invocation of the
    HTMLDocumentParser for the initial document load. Does not include other
    aspects of document parsing, such as style sheet parsing or script execution
    during parsing. Also does not include innerText parsing.

    This event is not recorded on machines with low-resolution clocks.
  </summary>
  <metric name="ChunkCount">
    <summary>
      The number of chunks parsed while loading the page. Each chunk represents
      a piece of the HTML content that can be loaded without blocking or
      yielding.
    </summary>
  </metric>
  <metric name="FetchQueuedPreloadsTime">
    <summary>
      Time taken to fetch queued subresource preloads for a document in
      microseconds. This is rounded down to the nearest exponential bucket.
    </summary>
  </metric>
  <metric name="ParsingTimeMax">
    <summary>
      The maximum time used to parse a single chunk before being blocked,
      yielding or completing, in microseconds.
    </summary>
  </metric>
  <metric name="ParsingTimeMin">
    <summary>
      The minimum time used to parse a single chunk before being blocked,
      yielding or completing, in microseconds.
    </summary>
  </metric>
  <metric name="ParsingTimeTotal">
    <summary>
      The total amount of time spent in the HTMLDocumentParser parsing the page,
      in microseconds.
    </summary>
  </metric>
  <metric name="PreloadTime">
    <summary>
      Time spent on preloading subresources for a document, including mojo
      operations, in microseconds. This is rounded down to the nearest
      exponential bucket.
    </summary>
  </metric>
  <metric name="PrepareToStopParsingTime">
    <summary>
      Time taken to tokenize the HTML document, if necessary, and perform other
      tasks around parsing completion in microseconds. This is rounded down to
      the nearest exponential bucket.
    </summary>
  </metric>
  <metric name="PumpTokenizerTime">
    <summary>
      Time taken to tokenize an HTML document in Blink in microseconds. This is
      rounded down to the nearest exponential bucket.
    </summary>
  </metric>
  <metric name="ScanAndPreloadTime">
    <summary>
      Time taken to scan and preload subresources for a document in
      microseconds. This is rounded down to the nearest exponential bucket.
    </summary>
  </metric>
  <metric name="ScanTime">
    <summary>
      Time spent on the preload scanning process for an HTML document, in
      microseconds. This is rounded down to the nearest exponential bucket.
    </summary>
  </metric>
  <metric name="TokensParsedAverage">
    <summary>
      The average number of tokens parsed across all chunks.
    </summary>
  </metric>
  <metric name="TokensParsedMax">
    <summary>
      The maximum number of tokens parsed as a chunk.
    </summary>
  </metric>
  <metric name="TokensParsedMin">
    <summary>
      The minimum number of tokens parsed as a chunk.
    </summary>
  </metric>
  <metric name="TokensParsedTotal">
    <summary>
      The total number of tokens parsed across all chunks.
    </summary>
  </metric>
  <metric name="YieldedTimeAverage">
    <summary>
      The average time between parsing of two chunks, in microseconds. Will be
      zero if only one chunk was parsed.
    </summary>
  </metric>
  <metric name="YieldedTimeMax">
    <summary>
      The minimum time between parsing of two chunks, in microseconds. Will be
      zero if only one chunk was parsed.
    </summary>
  </metric>
  <metric name="YieldedTimeMin">
    <summary>
      The maximum time between parsing of two chunks, in microseconds. Will be
      zero if only one chunk was parsed.
    </summary>
  </metric>
</event>

<event name="Blink.JavaScriptFramework.Versions" singular="True">
  <owner>houssein@chromium.org</owner>
  <owner>nrosenthal@chromium.org</owner>
  <summary>
    Metrics stating the detected major+minor version of known frameworks when
    detected. This event is recorded when the page is loaded. Note that a page
    can use multiple frameworks at the same time, hence why this reports each
    framework individually instead of a single number. The version numbers here
    are a bit mask: 0xMMmm (Major+minor), e.g. version 16.3 would be 0x1003
  </summary>
  <metric name="AngularVersion">
    <summary>
      A bitmask (0xMMmm) representing the Angular version
    </summary>
  </metric>
  <metric name="NextJSVersion">
    <summary>
      A bitmask (0xMMmm) representing the NextJS version
    </summary>
  </metric>
  <metric name="NuxtVersion">
    <summary>
      A bitmask (0xMMmm) representing the Nuxt version
    </summary>
  </metric>
  <metric name="VueVersion">
    <summary>
      A bitmask (0xMMmm) representing the Vue version
    </summary>
  </metric>
</event>

<event name="Blink.PageLoad">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    The aggregated time spent in each metric's component from creation of the
    local frame view to the First Contentful Paint signal. The event is reported
    once per page load when First Contentful Paint is signaled.

    This event is not recorded on machines with low-resolution clocks.
  </summary>
  <metric name="Accessibility">
    <summary>
      The time spent in accessibility tree code, between navigation and First
      Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="AnchorElementMetricsIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for anchor elements, in
      microseconds.
    </summary>
  </metric>
  <metric name="Animate">
    <summary>
      The time spent in main frame animation, between navigation and First
      Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="CompositingCommit">
    <summary>
      The time spent committing main thread compositing results, between
      navigation and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="CompositingInputs">
    <summary>
      The time spent in main thread compositing inputs, between navigation and
      First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="ContentDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to update sub-document
      content, between navigation and First Contentful Paint, in microseconds.
      Includes SVG, Canvas and Plugins.
    </summary>
  </metric>
  <metric name="DisplayLockIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for
      DisplayLockDocumentState, in microseconds.
    </summary>
  </metric>
  <metric name="ForcedStyleAndLayout">
    <summary>
      The time spent in forced style recalc and layouts, between navigation and
      First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="HandleInputEvents">
    <summary>
      The time spent in processing rAF-aligned input for the main frame, between
      navigation and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="HitTestDocumentUpdate">
    <summary>
      The time spent updating the document in preparation for a hit test for the
      main frame, between navigation and First Contentful Paint, in
      microseconds.
    </summary>
  </metric>
  <metric name="ImplCompositorCommit">
    <summary>
      The time spent committing layer tree impl data in the compositor thread,
      between navigation and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="IntersectionObservation">
    <summary>
      The time spent computing intersection observer state, between navigation
      and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="IntersectionObservationInternalCount">
    <summary>
      The total number of times a blink-internal IntersectionObservation was
      recomputed between navigation and First Contentful Paint.
    </summary>
  </metric>
  <metric name="IntersectionObservationJavascriptCount">
    <summary>
      The total number of times a javascript-instantiated
      IntersectionObservation was recomputed between navigation and First
      Contentful Paint.
    </summary>
  </metric>
  <metric name="JavascriptDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to generic Javascript API
      requests, between navigation and First Contentful Paint, in microseconds.
      Note this primarily captures Javascript that explicitly requires Style and
      Layout, but not implicit requests such as through setting focus or scroll
      position.
    </summary>
  </metric>
  <metric name="JavascriptIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for javascript observers, in
      microseconds.
    </summary>
  </metric>
  <metric name="Layout">
    <summary>
      The time spent in layout document lifecycle work, between navigation and
      First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="LazyLoadIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for lazy loading, in
      microseconds.
    </summary>
  </metric>
  <metric name="MainFrame">
    <summary>
      The time spent in ProxyMain::BeginMainFrame, between navigation and First
      Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="MediaIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for media elements, in
      microseconds.
    </summary>
  </metric>
  <metric name="Paint">
    <summary>
      The time spent in paint document lifecycle work, between navigation and
      First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="ParseStyleSheet">
    <summary>
      The time spent parsing style sheets.
    </summary>
  </metric>
  <metric name="PermissionElementIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for permission elements, in
      microseconds.
    </summary>
  </metric>
  <metric name="PossibleSynchronizedScrollCount2">
    <summary>
      Counts whether a possible sync-scroll update is attempted during an
      animation update of the outermost main frame of a page between navigation
      and First Contentful Paint (see sync_scroll_attempt_heuristic.h for
      details).

      The heuristic is checked once per main frame update. The recorded value
      will be either 1 or 0 for a sampled frame depending on whether the
      heuristic determined that there was a possible sync-scroll update.
    </summary>
  </metric>
  <metric name="PrePaint">
    <summary>
      The time spent in pre-paint document lifecycle work, between navigation
      and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="ServiceDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to browser requested
      actions, such as accessibility, intersection observer or spell checking,
      between navigation and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="Style">
    <summary>
      The time spent in style document lifecycle work, between navigation and
      First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="UpdateLayers">
    <summary>
      The time spent in for LayerTreeHost::UpdateLayers, between navigation and
      First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="UpdateViewportIntersection">
    <summary>
      Time spent computing internal geometry information about iframes, between
      navigation and First Contentful Paint, in microseconds.
    </summary>
  </metric>
  <metric name="UserDrivenDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to a user action such as
      input, find-in-page or printing, between navigation and First Contentful
      Paint, in microseconds.

      As of 04/2023, updates for scrolling are included in this metric.
    </summary>
  </metric>
  <metric name="VisualUpdateDelay">
    <summary>
      Time elapsed, in microseconds, between when an animation update is first
      scheduled and when the resulting BeginMainFrame starts.
    </summary>
  </metric>
  <metric name="WaitForCommit">
    <summary>
      The time spent waiting for the compositor thread to begin processing a
      commit, between navigation and First Contentful Paint, in microseconds.
    </summary>
  </metric>
</event>

<event name="Blink.PaintTiming" singular="True">
  <owner>npm@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <summary>
    Paint timing metrics recorded in Blink, usually used as debugging metrics
    for PaintTiming metrics in the PageLoad event.
  </summary>
  <metric name="LCPDebugging.HasViewportImage" enum="Boolean">
    <summary>
      Records whether a page has an image whose size equals the full viewport.
      Recorded when the LCP algorithm has stopped.
    </summary>
  </metric>
</event>

<event name="Blink.Preloading.ByLinkHeader">
  <owner>tnak@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Events taken when HTTP responses are received and they have Link headers.
    Multiple events should be involved if one response contains multiple Link
    headers. This event provides insights into potential information leakage
    related to Link headers on subresources.
  </summary>
  <metric name="OriginStatusOnSubresource" enum="OriginStatusOnSubresource">
    <summary>
      Records the cross-origin usage related to Link headers on subresource
      fetches. This is only recorded for subresource fetches.
    </summary>
  </metric>
</event>

<event name="Blink.Script.AsyncScripts" singular="True">
  <owner>dom@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics associated with the async script count associated with a document,
    recorded when the HTML parsing of a mainframe has completed.
  </summary>
</event>

<event name="Blink.UpdateTime">
  <owner>pdr@chromium.org</owner>
  <owner>paint-dev@chromium.org</owner>
  <summary>
    Metrics that measure various update times in Blink. This includes paint,
    compositing, and layout update times. This event is reported once in the
    first main frame update after First Contentful Paint, with data from a
    randomly chosen frame up to and including First Contentful Paint, and once
    on LocalFrameView destruction with data from a random frame between
    FirstContentfulPaint and shutdown.

    This event is not recorded on machines with low-resolution clocks.
  </summary>
  <metric name="Accessibility">
    <summary>
      The time taken for accessibility for the main frame in microseconds during
      the sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="AccessibilityBeginMainFrame">
    <summary>
      The total main frame time used in accessibility, in microseconds.
    </summary>
  </metric>
  <metric name="AnchorElementMetricsIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for anchor elements, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="AnchorElementMetricsIntersectionObserverBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObservations for
      anchor elements, in microseconds.
    </summary>
  </metric>
  <metric name="Animate">
    <summary>
      The time taken for main frame animation in microseconds during the sampled
      frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="AnimateBeginMainFrame">
    <summary>
      The total main frame time used by by main thread animations, in
      microseconds.
    </summary>
  </metric>
  <metric name="CompositingCommit">
    <summary>
      The time taken by the compositing commit in microseconds during the
      sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CompositingCommitBeginMainFrame">
    <summary>
      The total main frame time used by the compositing commit, in microseconds.
    </summary>
  </metric>
  <metric name="CompositingInputs">
    <summary>
      The time taken by the compositing inputs phase in microseconds during the
      sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CompositingInputsBeginMainFrame">
    <summary>
      The total main frame time used by the compositing inputs phase, in
      microseconds.
    </summary>
  </metric>
  <metric name="ContentDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to update sub-document
      content, during a sampled frame, in microseconds. Includes SVG, Canvas and
      Plugins.
    </summary>
  </metric>
  <metric name="ContentDocumentUpdateBeginMainFrame">
    <summary>
      The time spent doing forced document updates due to update sub-document
      content, during the BeginMainFrame block of a sampled frame, in
      microseconds. Includes SVG, Canvas and Plugins.
    </summary>
  </metric>
  <metric name="DisplayLockIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for
      DisplayLockDocumentState, in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DisplayLockIntersectionObserverBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObservations for
      DisplayLockDocumentState, in microseconds.
    </summary>
  </metric>
  <metric name="ForcedStyleAndLayout">
    <summary>
      The time taken by forced style recalc and layouts in microseconds between
      the end of the last main frame update and the current sampled frame, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ForcedStyleAndLayoutBeginMainFrame">
    <summary>
      The total main frame time used by forced style updates and layouts, in
      microseconds. This metric may include time that is also included in the
      AnimateBeginMainFrame metric.
    </summary>
  </metric>
  <metric name="HandleInputEvents">
    <summary>
      The time taken to process rAF-aligned input for the main frame in
      microseconds during the sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HandleInputEventsBeginMainFrame">
    <summary>
      The total main frame time used in processing rAF-aligned input, in
      microseconds.
    </summary>
  </metric>
  <metric name="HitTestDocumentUpdate">
    <summary>
      The time taken to perform hit test document updates for the main frame in
      microseconds during the sampled frame. It does not compute the actual hit
      test time, rather the style, layout, compositing, etc time to prepare for
      the test.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HitTestDocumentUpdateBeginMainFrame">
    <summary>
      The total main frame time used in performing hit test document updates, in
      microseconds.
    </summary>
  </metric>
  <metric name="ImplCompositorCommit">
    <summary>
      The time spent committing layer tree impl data in the compositor thread,
      in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ImplCompositorCommitBeginMainFrame">
    <summary>
      The total main frame time spent committing layer tree impl data in the
      compositor thread, in microseconds. This should always match
      ImplCompositorCommit and serves as a check.
    </summary>
  </metric>
  <metric name="IntersectionObservation">
    <summary>
      The time taken to compute intersection observer state for the main frame
      in microseconds during the sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IntersectionObservationBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObserver
      observations, in microseconds.
    </summary>
  </metric>
  <metric name="IntersectionObservationInternalCount">
    <summary>
      The number of blink-internal IntersectionObservations that were recomputed
      during the sampled frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IntersectionObservationInternalCountBeginMainFrame">
    <summary>
      The number of blink-internal IntersectionObservations that were recomputed
      during the sampled frame.
    </summary>
  </metric>
  <metric name="IntersectionObservationJavascriptCount">
    <summary>
      The number of javascript-instantiated IntersectionObservations that were
      recomputed during the sampled frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IntersectionObservationJavascriptCountBeginMainFrame">
    <summary>
      The number of javascript-instantiated IntersectionObservations that were
      recomputed during the sampled frame.
    </summary>
  </metric>
  <metric name="JavascriptDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to generic Javascript API
      requests, during a sampled frame, in microseconds. Note this primarily
      captures Javascript that explicitly requires Style and Layout, but not
      implicit requests such as through setting focus or scroll position.
    </summary>
  </metric>
  <metric name="JavascriptDocumentUpdateBeginMainFrame">
    <summary>
      The time spent doing forced document updates due to generic Javascript API
      requests, during the BeginMainFrame block of a sampled frame, in
      microseconds. Note this primarily captures Javascript that explicitly
      requires Style and Layout, but not implicit requests such as through
      setting focus or scroll position.
    </summary>
  </metric>
  <metric name="JavascriptIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for javascript observers, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="JavascriptIntersectionObserverBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObservations for
      Javascript observers, in microseconds.
    </summary>
  </metric>
  <metric name="Layout">
    <summary>
      The time taken for layout for the main frame in microseconds during the
      sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LayoutBeginMainFrame">
    <summary>
      The total main frame time used in layout, in microseconds.
    </summary>
  </metric>
  <metric name="LazyLoadIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for lazy loading, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LazyLoadIntersectionObserverBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObservations for
      lazy loading, in microseconds.
    </summary>
  </metric>
  <metric name="MainFrame">
    <summary>
      The time between a BeginMainFrame and the commit of paint results for the
      sampled frame, in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MainFrameIsBeforeFCP" enum="Boolean">
    <summary>
      True if the lifecycle update in this event occurred before FCP (First
      Contentful Paint) was registered.
    </summary>
  </metric>
  <metric name="MainFrameReasons">
    <summary>
      A bitfield representation of the reasons for a main frame update. The
      fields are based on the FrameSequenceTrackerType enum, so bitwise and with
      the following values to determine if a reason was present:
      CompositorAnimation: 1, MainThreadAnimation: 2, PinchZoom: 4, RAF: 8,
      TouchScroll: 16, Universal: 32, Video: 64 and WheelScroll: 128.
    </summary>
  </metric>
  <metric name="MediaIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for media elements, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MediaIntersectionObserverBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObservations for
      media elements, in microseconds.
    </summary>
  </metric>
  <metric name="Paint">
    <summary>
      The time taken to paint for the main frame in microseconds during the
      sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PaintBeginMainFrame">
    <summary>
      The total main frame time used in paint, in microseconds.
    </summary>
  </metric>
  <metric name="ParseStyleSheet">
    <summary>
      The time spent parsing style sheets.
    </summary>
  </metric>
  <metric name="ParseStyleSheetBeginMainFrame">
    <summary>
      The total main frame time spent parsing style sheets.
    </summary>
  </metric>
  <metric name="PermissionElementIntersectionObserver">
    <summary>
      Time spent computing IntersectionObservations for permission elements, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PermissionElementIntersectionObserverBeginMainFrame">
    <summary>
      The total main frame time used to compute IntersectionObservations for
      permission elements, in microseconds.
    </summary>
  </metric>
  <metric name="PossibleSynchronizedScrollCount2">
    <summary>
      Counts whether a possible sync-scroll update is attempted during an
      animation update of the outermost main frame of a page (see
      sync_scroll_attempt_heuristic.h for details).

      The heuristic is checked once per main frame update. The recorded value
      will be either 1 or 0 for a sampled frame depending on whether the
      heuristic determined that there was a possible sync-scroll update.
    </summary>
  </metric>
  <metric name="PossibleSynchronizedScrollCount2BeginMainFrame">
    <summary>
      Counts whether a possible sync-scroll update is attempted during an
      animation update of the outermost main frame of a page (see
      sync_scroll_attempt_heuristic.h for details).

      The heuristic is checked once per main frame update. The recorded value
      will be either 1 or 0 for a sampled frame depending on whether the
      heuristic determined that there was a possible sync-scroll update.

      Note that since the check happens during main frame updates, there should
      be no difference between this metric and PossibleSynchronizedScrollCount2
      above.
    </summary>
  </metric>
  <metric name="PrePaint">
    <summary>
      The time taken for pre-paint for the main frame in microseconds during the
      sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PrePaintBeginMainFrame">
    <summary>
      The total main frame time used in pre-paint, in microseconds.
    </summary>
  </metric>
  <metric name="ServiceDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to browser requested
      actions, such as accessibility, intersection observer or spell checking,
      during a sampled frame, in microseconds.
    </summary>
  </metric>
  <metric name="ServiceDocumentUpdateBeginMainFrame">
    <summary>
      The time spent doing forced document updates due to browser requested
      actions, such as accessibility, intersection observer or spell checking,
      during the BeginMainFrame block of a sampled frame, in microseconds.
    </summary>
  </metric>
  <metric name="Style">
    <summary>
      The time taken for style update for the main frame in microseconds during
      the sampled frame.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="StyleBeginMainFrame">
    <summary>
      The total main frame time spent updating style information and building
      the layout tree, in microseconds.
    </summary>
  </metric>
  <metric name="StylePercentage">
    <summary>
      The percentage of the main frame time used in style work. An int in the
      range [0,100].
    </summary>
  </metric>
  <metric name="UpdateLayers">
    <summary>
      The time taken for LayerTreeHost::UpdateLayers in microseconds during the
      sampled frame
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UpdateLayersBeginMainFrame">
    <summary>
      The total main frame time spent in LayerTreeHost::UpdateLayer, in
      microseconds. This should always match UpdateLayers and serves as a check.
    </summary>
  </metric>
  <metric name="UpdateViewportIntersection">
    <summary>
      Time spent computing internal geometry information about iframes, in
      microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UpdateViewportIntersectionBeginMainFrame">
    <summary>
      The total main frame time used to compute internal geometry information
      about iframes, in microseconds.
    </summary>
  </metric>
  <metric name="UserDrivenDocumentUpdate">
    <summary>
      The time spent doing forced document updates due to a user action such as
      input, find-in-page or printing, during a sampled frame, in microseconds.

      As of 04/2023, updates for scrolling are included in this metric.
    </summary>
  </metric>
  <metric name="UserDrivenDocumentUpdateBeginMainFrame">
    <summary>
      The time spent doing forced document updates due to a user action such as
      input, find-in-page or printing, during the BeginMainFrame block of a
      sampled frame, in microseconds.

      As of 04/2023, updates for scrolling are included in this metric.
    </summary>
  </metric>
  <metric name="VisualUpdateDelay">
    <summary>
      Time elapsed between when an animation update is first scheduled and when
      the resulting BeginMainFrame starts.
    </summary>
  </metric>
  <metric name="VisualUpdateDelayBeginMainFrame">
    <summary>
      Time elapsed between when an animation update is first scheduled and when
      the resulting BeginMainFrame starts.
    </summary>
  </metric>
  <metric name="WaitForCommit">
    <summary>
      The time spent waiting for the compositor thread to begin processing a
      commit, in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WaitForCommitBeginMainFrame">
    <summary>
      The total main frame time spent waiting for the compositor thread to begin
      processing a commit, in microseconds. This should always match
      WaitForCommit and serves as a check.
    </summary>
  </metric>
</event>

<event name="Blink.UseCounter">
  <owner>chasej@chromium.org</owner>
  <summary>
    Collects data for a subset of UseCounter features where UMA UseCounter data
    shows a behaviour that is rare but too common to blindly change. This metric
    should be used to reason about whether a breaking change is acceptable or
    not.

    Note: In M87, a number of use counters were removed from UKM reporting due
    to being reported too frequently (high proportion across page loads).
  </summary>
  <metric name="Feature" enum="FeatureObserver">
    <summary>
      Opt-in UseCounter feature.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsMainFrameFeature" enum="Boolean">
    <summary>
      Emits True(1) or False(0) to indicate whether the Feature recorded is in
      the main frame or not.
    </summary>
  </metric>
</event>

<event name="BrowsingTopics.DocumentBrowsingTopicsApiResult2">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The document.browsingTopics() result and other metadata. Recorded whenever
    document.browsingTopics() is invoked from a context. If there are more than
    3 candidate topics (e.g. due to custom configuration FeatureParam), only the
    first 3 candidate topics will be recorded.
  </summary>
  <metric name="CandidateTopic0">
    <summary>
      The candidate topic ID at index 0. This metric won't be recorded if no
      topics were derived from the candidate epochs (which can be due to
      insufficient epochs, failed epoch topics calculation, cleared history, or
      cleared/blocked individual topics).
    </summary>
  </metric>
  <metric name="CandidateTopic0IsTrueTopTopic" enum="Boolean">
    <summary>
      Whether `CandidateTopic0` is a true top topic (as opposed to a padded or
      random one). This metric will be recorded iff `CandidateTopic0` is
      recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic0ModelVersion">
    <summary>
      The version of the model used to calculate `CandidateTopic0`. This metric
      will be recorded iff `CandidateTopic0` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic0ShouldBeFiltered" enum="Boolean">
    <summary>
      Whether `CandidateTopic0` should be filtered. This metric will be recorded
      iff `CandidateTopic0` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic0TaxonomyVersion">
    <summary>
      The version of the taxonomy applicable to `CandidateTopic0`. This metric
      will be recorded iff `CandidateTopic0` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic1">
    <summary>
      The candidate topic ID at index 1. This metric won't be recorded if less
      than 2 topics were derived from the candidate epochs (which can be due to
      insufficient epochs, failed epoch topics calculation, cleared history, or
      cleared/blocked individual topics).
    </summary>
  </metric>
  <metric name="CandidateTopic1IsTrueTopTopic" enum="Boolean">
    <summary>
      Whether `CandidateTopic1` is a true top topic (as opposed to a padded or
      random one). This metric will be recorded iff `CandidateTopic1` is
      recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic1ModelVersion">
    <summary>
      The version of the model used to calculate `CandidateTopic1`. This metric
      will be recorded iff `CandidateTopic1` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic1ShouldBeFiltered" enum="Boolean">
    <summary>
      Whether `CandidateTopic1` should be filtered. This metric will be recorded
      iff `CandidateTopic1` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic1TaxonomyVersion">
    <summary>
      The version of the taxonomy applicable to `CandidateTopic1`. This metric
      will be recorded iff `CandidateTopic1` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic2">
    <summary>
      The candidate topic ID at index 2. This metric won't be recorded if less
      than 3 topics were derived from the candidate epochs (which can be due to
      insufficient epochs, failed epoch topics calculation, cleared history, or
      cleared/blocked individual topics).
    </summary>
  </metric>
  <metric name="CandidateTopic2IsTrueTopTopic" enum="Boolean">
    <summary>
      Whether `CandidateTopic2` is a true top topic (as opposed to a padded or
      random one). This metric will be recorded iff `CandidateTopic2` is
      recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic2ModelVersion">
    <summary>
      The version of the model used to calculate `CandidateTopic2`. This metric
      will be recorded iff `CandidateTopic2` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic2ShouldBeFiltered" enum="Boolean">
    <summary>
      Whether `CandidateTopic2` should be filtered. This metric will be recorded
      iff `CandidateTopic2` is recorded.
    </summary>
  </metric>
  <metric name="CandidateTopic2TaxonomyVersion">
    <summary>
      The version of the taxonomy applicable to `CandidateTopic2`. This metric
      will be recorded iff `CandidateTopic2` is recorded.
    </summary>
  </metric>
  <metric name="FailureReason" enum="BrowsingTopicsApiAccessResult">
    <summary>
      The reason why the API access is not allowed.
    </summary>
  </metric>
</event>

<event name="BrowsingTopics.EpochTopicsCalculationResult">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    The epoch topics calculation result, including the top 5 topics and other
    metadata. Recorded whenever the periodic (weekly) topics calculation has
    finished. If the result has more than 5 topics (e.g. due to custom
    configuration FeatureParam), only the first 5 topics will be recorded.
  </summary>
  <metric name="ModelVersion">
    <summary>
      The version of the model used to calculate the result topics. This metric
      won't be recorded if the topics calculation failed in general.
    </summary>
  </metric>
  <metric name="PaddedTopicsStartIndex">
    <summary>
      The start index of the randomly padded top topics. This metric won't be
      recorded if the topics calculation failed in general. If all topics are
      real, `PaddedTopicsStartIndex` will equal the feature param
      `kBrowsingTopicsNumberOfTopTopicsPerEpoch`.
    </summary>
  </metric>
  <metric name="TaxonomyVersion">
    <summary>
      The version of the taxonomy applicable to the result topics. This metric
      won't be recorded if the topics calculation failed in general.
    </summary>
  </metric>
  <metric name="TopTopic0">
    <summary>
      The top topic ID at index 0. This metric won't be recorded if the
      candidate topic was blocked, or if the topics calculation failed in
      general.
    </summary>
  </metric>
  <metric name="TopTopic1">
    <summary>
      The top topic ID at index 1. This metric won't be recorded if the
      candidate topic was blocked, or if the topics calculation failed in
      general.
    </summary>
  </metric>
  <metric name="TopTopic2">
    <summary>
      The top topic ID at index 2. This metric won't be recorded if the
      candidate topic was blocked, or if the topics calculation failed in
      general.
    </summary>
  </metric>
  <metric name="TopTopic3">
    <summary>
      The top topic ID at index 3. This metric won't be recorded if the
      candidate topic was blocked, or if the topics calculation failed in
      general.
    </summary>
  </metric>
  <metric name="TopTopic4">
    <summary>
      The top topic ID at index 4. This metric won't be recorded if the
      candidate topic was blocked, or if the topics calculation failed in
      general.
    </summary>
  </metric>
</event>

<event name="BrowsingTopics.PageLoad">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    PageLoad metrics for BrowsingTopics. Recorded when a page has Topics API
    usages (that pass the user permission check), and the page is being
    destroyed/navigated.
  </summary>
  <metric name="TopicsRequestingContextDomainsCount">
    <summary>
      The number of unique context domains have requested the topics. Rounded to
      the nearest exponential bucket (with a bucket ratio of 1.15).
    </summary>
  </metric>
</event>

<event name="BTM.ChainBegin" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    Emitted for the page visited at the beginning of a redirect chain (i.e. the
    initial URL), when third-party cookies are disabled. The redirect chain is
    used as a part of Bounce Tracking Mitigations (BTM).
  </summary>
  <metric name="ChainId">
    <summary>
      A randomly-generated 32-bit id to connect this event with the BTM.Redirect
      and BTM.ChainEnd events emitted within the same redirect chain.
    </summary>
  </metric>
  <metric name="InitialAndFinalSitesSame" enum="BooleanSameSite">
    <summary>
      True when the site before the redirect chain is the same as the site at
      the end of the chain.
    </summary>
  </metric>
</event>

<event name="BTM.ChainEnd" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    Emitted for the page visited at the end of a redirect chain (i.e. the final
    URL), when third-party cookies are disabled. The redirect chain is used as a
    part of Bounce Tracking Mitigations (BTM).
  </summary>
  <metric name="ChainId">
    <summary>
      A randomly-generated 32-bit id to connect this event with the
      BTM.ChainBegin and BTM.Redirect events emitted within the same redirect
      chain.
    </summary>
  </metric>
  <metric name="InitialAndFinalSitesSame" enum="BooleanSameSite">
    <summary>
      True when the site before the redirect chain is the same as the site at
      the end of the chain.
    </summary>
  </metric>
</event>

<event name="BTM.Redirect" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    Emitted on every HTTP redirect or client-side bounce within a redirect
    chain, when third-party cookies are disabled. A client-side bounce is a
    non-user-initiated navigation starting soon after the previous navigation
    committed.

    The redirect chain is used as a part of Bounce Tracking Mitigations (BTM).
  </summary>
  <metric name="ChainId">
    <summary>
      A randomly-generated 32-bit id to connect this event with other
      BTM.Redirect events and the BTM.ChainBegin/ChainEnd events emitted within
      the same redirect chain.
    </summary>
  </metric>
  <metric name="ClientBounceDelay">
    <summary>
      Populated for client redirects only. The time in seconds (capped at 10)
      between the page committing and the redirect navigation starting. An int
      in the range [0, 10].
    </summary>
  </metric>
  <metric name="CookieAccessType" enum="CookieAccessType">
    <summary>
      Whether the redirect read cookies, wrote cookies, both, or neither.
    </summary>
  </metric>
  <metric name="HasStickyActivation" enum="BooleanHasUserActivation">
    <summary>
      Populated for client redirects only. Whether the user interacted with the
      page (See the HTML spec for a definition). This info is persisted within
      BTM for a duration of `btm::kInteractionTtl`.
    </summary>
  </metric>
  <metric name="InitialAndFinalSitesSame" enum="BooleanSameSite">
    <summary>
      True when the site before the redirect chain is the same as the site at
      the end of the chain.
    </summary>
  </metric>
  <metric name="IsPartialRedirectChain">
    <summary>
      True if the chain is missing the end URL. Any comparisons to the final
      site are invalid for this redirect.
    </summary>
  </metric>
  <metric name="RedirectAndFinalSiteSame" enum="BooleanSameSite">
    <summary>
      True when the redirect site is the same as the site at the end of the
      redirect chain.
    </summary>
  </metric>
  <metric name="RedirectAndInitialSiteSame" enum="BooleanSameSite">
    <summary>
      True when the redirect site is the same as the site before the redirect
      chain.
    </summary>
  </metric>
  <metric name="RedirectChainIndex">
    <summary>
      0-based index of this individual redirect within its chain.
    </summary>
  </metric>
  <metric name="RedirectChainLength">
    <summary>
      The length of the overall redirect chain.
    </summary>
  </metric>
  <metric name="RedirectType" enum="DIPSRedirectType">
    <summary>
      The type of the redirect: client or server.
    </summary>
  </metric>
  <metric name="SiteEngagementLevel" enum="SiteEngagementLevel">
    <summary>
      The site engagement level of the redirect URL, at the time the redirect
      took place.
    </summary>
  </metric>
  <metric name="SiteHadUserActivation" enum="BooleanHasUserActivation">
    <summary>
      Whether the site has previously had a user activation.
    </summary>
  </metric>
  <metric name="SiteHadWebAuthnAssertion" enum="BooleanHasWebAuthnAssertion">
    <summary>
      Whether the site has previously had a WebAuthn assertion.
    </summary>
  </metric>
  <metric name="WebAuthnAssertionRequestSucceeded"
      enum="BooleanWebAuthnAssertionRequestSucceeded">
    <summary>
      Populated for client redirects only. Whether the user triggered a
      successful web authn assertion. This info is persisted within BTM for a
      duration of `btm::kInteractionTtl`.
    </summary>
  </metric>
</event>

<event name="ChargeEventHistory">
  <owner>thanhdng@chromium.org</owner>
  <summary>
    Records history of charge events including start time and duration of
    charges. Can be used with other ChargeEventHistory to track the last 30 days
    of charging events. If a &quot;SmartCharging&quot; event and a
    &quot;ChargeEventHistory&quot; event has them same source ID and
    &quot;EventId&quot;, it means &quot;ChargeEventHistory&quot; is the charge
    history when &quot;SmartCharging&quot; event is logged. ChargeEventHistory
    records an array. Each ChargeEventHistory event records an item in the
    array, specified by its index ChargeEventHistoryIndex. Items in the same
    array will have same source ID and EventId.
  </summary>
  <metric name="ChargeEventHistoryDuration">
    <summary>
      Duration of a history charge event.
    </summary>
  </metric>
  <metric name="ChargeEventHistoryIndex">
    <summary>
      Index of this event in the ChargeEventHistory array. Please see the event
      summary for more details.
    </summary>
  </metric>
  <metric name="ChargeEventHistorySize">
    <summary>
      Number of items in ChargeEventHistory array. Please see the event summary
      for more details.
    </summary>
  </metric>
  <metric name="ChargeEventHistoryStartTime">
    <summary>
      Duration (in minutes) between start time of a charge event and logging
      time.
    </summary>
  </metric>
  <metric name="EventId">
    <summary>
      A unique number that represent order of an event. Used combined with
      &quot;SmartCharging&quot;'s EventId to reconstruct charge history.
    </summary>
  </metric>
</event>

<event name="ChromeOS.DeviceManagement">
  <owner>siakabaro@google.com</owner>
  <summary>
    Records the ChromeOS device management state. This event is recorded once
    per UKM report and is not associated with a source URL.
  </summary>
  <metric name="EnrollmentStatus" enum="EnrollmentStatus">
    <summary>
      An enum value representing the enrollment status of a ChromeOS device.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOS.WebsiteUsageTime">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the amount of time that the focused and activated website was
    accessed in last two hours on Chrome OS. This is logged each two hours, and
    only when the website is not installed as a PWA or Chrome app.
  </summary>
  <metric name="Duration">
    <summary>
      The milliseconds that the website was accessed in the focused tab and the
      activated browser window. The accessing time is calculated each two hours,
      then the noise is applied, and sum the running time for two hours with
      noise to calculate the two hours accessing time. For example the running
      time in the past 2 hours = time1 * noise1 + time2 * noise2 + time3 *
      noise3....
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsFromLastLogin" enum="Boolean">
    <summary>
      Whether the metrics is read from the user pref on disk, recorded for the
      last login.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Promotable" enum="Boolean">
    <summary>
      Whether the website can be an installable web app.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOSApp.InputEvent">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records each two hours in Chrome OS to log the input events happened on the
    app window. This is logged only when the user allows app syncing or allows
    sync of everything, and the user does not set up a sync passphrase.
  </summary>
  <metric name="AppInputEventCount">
    <summary>
      The number of the input events happened in each two hours.
    </summary>
  </metric>
  <metric name="AppInputEventSource" enum="AppInputEventSource">
    <summary>
      An enum that records the input event source.
    </summary>
  </metric>
  <metric name="AppType" enum="AppType">
    <summary>
      An enum that records the app type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOSApp.InstalledApp">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the installed app in Chrome OS, only when the user allows app
    syncing or allows sync of everything, and the user does not set up a sync
    passphrase. Only ARC apps, Chrome apps and web apps(PWA), system web apps,
    buildin apps are recorded. This is logged when the user installs a new app.
  </summary>
  <metric name="AppType" enum="AppType">
    <summary>
      An enum that records the app type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InstallReason" enum="InstallReason">
    <summary>
      An enum that records the reason why the app was installed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InstallSource2" enum="InstallSource2">
    <summary>
      An enum that records where the app was installed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InstallTime" enum="InstallTime">
    <summary>
      An enum that records when the app was installed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOSApp.Launch">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records a launched app in Chrome OS, only when the user allows app syncing
    or allows sync of everything, and the user does not set up a sync
    passphrase. Only ARC apps, Chrome apps and web apps(PWA), system web apps,
    buildin apps are recorded. This is logged when an app is launched.
  </summary>
  <metric name="AppType" enum="AppType">
    <summary>
      An enum that records the app type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LaunchSource" enum="LaunchSource">
    <summary>
      An enum that records where the app was launched.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOSApp.UninstallApp">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the uninstalled app in Chrome OS, only when the user allows app
    syncing or allows sync of everything, and the user does not set up a sync
    passphrase. Only ARC apps, Chrome apps and web apps(PWA), system web apps,
    buildin apps are recorded. This is logged when the user uninstalls an app.
  </summary>
  <metric name="AppType" enum="AppType">
    <summary>
      An enum that records the app type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UninstallSource" enum="UninstallSource">
    <summary>
      An enum that records how the app was uninstalled.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOSApp.UsageTime">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the amount of time that the app was used in the last two hours on
    Chrome OS, only when the user allows app syncing or allows sync of
    everything, and the user does not set up a sync passphrase. Only ARC apps,
    Chrome apps and web apps(PWA), system web apps, builtin apps are recorded.
    This is logged every two hours and at shutdown.
  </summary>
  <metric name="AppType" enum="AppType">
    <summary>
      An enum that records the app type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration">
    <summary>
      The milliseconds that the app was used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ChromeOSApp.UsageTimeReusedSourceId">
  <owner>nancylingwang@chromium.org</owner>
  <owner>dominickn@chromium.org</owner>
  <summary>
    Records the amount of time that the app were used in the last two hours on
    Chrome OS, only when the user allows app syncing or allows sync of
    everything, and the user does not set up a sync passphrase. Only ARC apps,
    Chrome apps and web apps(PWA), system web apps, buildin apps are recorded.
    This is logged every two hours.
  </summary>
  <metric name="AppType" enum="AppType">
    <summary>
      An enum that records the app type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration">
    <summary>
      The milliseconds that the app was used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserDeviceMatrix" enum="UserDeviceMatrix">
    <summary>
      An enum that records the user type and the device type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ClickInput" singular="True">
  <owner>dougarnett@chromium.org</owner>
  <summary>
    Metrics associated with user click input. In particular, captures when user
    has a burst of clicks at the same location which may be a signal of user
    unhappiness for an experiment if it differs from the baseline data for the
    site.
  </summary>
  <metric name="Experimental.ClickInputBurst">
    <summary>
      The count of the largest burst of click inputs for a page load. Only
      recorded if it meets a minimum threshold to be considered a burst.
    </summary>
  </metric>
</event>

<event name="ClientHints.AcceptCHFrameUsage">
  <owner>arichiv@chromium.org</owner>
  <owner>victortan@chromium.org</owner>
  <summary>
    Record when a Client Hint is requested in an ACCEPT_CH TLS Frame.
  </summary>
  <metric name="Type" enum="WebClientHintsType">
    <summary>
      Records an enum representing the specific Client Hint type that was
      requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ClientHints.AcceptCHHeaderUsage">
  <owner>arichiv@chromium.org</owner>
  <owner>victortan@chromium.org</owner>
  <summary>
    Record when a Client Hint is requested in a Accept-CH HTTP Response Header.
  </summary>
  <metric name="Type" enum="WebClientHintsType">
    <summary>
      Records an enum representing the specific Client Hint type that was
      requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ClientHints.AcceptCHMetaUsage">
  <owner>arichiv@chromium.org</owner>
  <owner>victortan@chromium.org</owner>
  <summary>
    Record when a Client Hint is requested in a Accept-CH HTML Meta Tag.
  </summary>
  <metric name="Type" enum="WebClientHintsType">
    <summary>
      Records an enum representing the specific Client Hint type that was
      requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ClientHints.CriticalCHHeaderUsage">
  <owner>arichiv@chromium.org</owner>
  <owner>victortan@chromium.org</owner>
  <summary>
    Record when a Client Hint is requested in a Critical-CH HTTP Response
    Header.
  </summary>
  <metric name="Type" enum="WebClientHintsType">
    <summary>
      Records an enum representing the specific Client Hint type that was
      requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ClientHints.DelegateCHMetaUsage">
  <owner>arichiv@chromium.org</owner>
  <owner>victortan@chromium.org</owner>
  <summary>
    Record when a Client Hint is requested in a Delegate-CH HTML Meta Tag.
  </summary>
  <metric name="Type" enum="WebClientHintsType">
    <summary>
      Records an enum representing the specific Client Hint type that was
      requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ClientRenderingAPI">
  <owner>aaronhk@chromium.org</owner>
  <owner>cwallez@chromium.org</owner>
  <owner>enga@chromium.org</owner>
  <owner>fserb@chromium.org</owner>
  <owner>jdarpinian@chromium.org</owner>
  <owner>kainino@chromium.org</owner>
  <owner>kbr@chromium.org</owner>
  <owner>shrekshao@google.com</owner>
  <summary>
    Metrics collecting types of rendering context created with
    canvas/offscreencanvas. It also collects requests of GPU device via WebGPU
    API.
  </summary>
  <metric name="Canvas.RenderingContext" enum="CanvasRenderingAPI">
    <summary>
      Type of rendering contexts created for HTMLCanvasElement.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Canvas.RenderingContextDrawnTo" enum="CanvasRenderingAPI">
    <summary>
      Type of rendering contexts created for HTMLCanvasElement that something
      has actually been drawn to. For WebGL 1 and 2 context this means there is
      at least one draw call issued. For other context types we leave the
      implementation blank at this moment.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="GPUDevice">
    <summary>
      Event fired when a GPUDevice from the WebGPU API is created.
    </summary>
  </metric>
  <metric name="OffscreenCanvas.RenderingContext" enum="CanvasRenderingAPI">
    <summary>
      Type of rendering contexts created for OffscreenCanvas.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="OffscreenCanvas.RenderingContextDrawnTo"
      enum="CanvasRenderingAPI">
    <summary>
      Type of rendering contexts created for OffscreenCanvas that something has
      actually been drawn to. For WebGL 1 and 2 context this means there is at
      least one draw call issued. For other context types we leave the
      implementation blank at this moment.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Clipboard.CopyPasteEvent">
  <owner>picarella@google.com</owner>
  <owner>mmaryia@google.com</owner>
  <summary>
    As of M153, recorded when either a copy/cut or a subsequent paste event
    occurs for a user with the AutofillAtMemory feature disabled (prior to M153,
    it was recorded regardless of the feature status). A separate event entry is
    logged for each action: a copy or cut from a tab records an entry with
    `CopyFromTabNonce`, while a subsequent paste of that data from a different
    tab and within 10 minutes, records a separate entry with
    `PasteFromTabNonce`.
  </summary>
  <metric name="CopyFromTabNonce">
    <summary>
      A random 64-bit integer recorded when a user copies or cuts data from a
      non-incognito tab.
    </summary>
  </metric>
  <metric name="PasteFromTabNonce">
    <summary>
      The 64-bit nonce of the matching copy event, recorded when the user pastes
      the copied data into a different tab within 10 minutes. Used to link the
      copy and paste events.
    </summary>
  </metric>
</event>

<event name="Clipboard.CopyPasteEvent.WithAtMemory">
  <owner>picarella@google.com</owner>
  <owner>mmaryia@google.com</owner>
  <summary>
    Added in M153. Recorded when either a copy/cut or a subsequent paste event
    occurs for a user with the AutofillAtMemory feature enabled. A separate
    event entry is logged for each action: a copy or cut from a tab records an
    entry with `CopyFromTabNonce`, while a subsequent paste of that data from a
    different tab and within 10 minutes, records a separate entry with
    `PasteFromTabNonce`.
  </summary>
  <metric name="CopyFromTabNonce">
    <summary>
      A random 64-bit integer recorded when a user copies or cuts data from a
      non-incognito tab.
    </summary>
  </metric>
  <metric name="PasteFromTabNonce">
    <summary>
      The 64-bit nonce of the matching copy event, recorded when the user pastes
      the copied data into a different tab within 10 minutes. Used to link the
      copy and paste events.
    </summary>
  </metric>
</event>

<event name="Companion.PageView">
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    Records metrics for the companion side panel. The events correspond to a
    single page load in the main frame and the metrics are flushed when the page
    navigates away. For most of the UI surfaces, only the last event (e.g.
    displayed or clicked) is recorded.
  </summary>
  <metric name="ATX.ComponentPosition">
    <summary>
      The position of the ATX surface in the page.
    </summary>
  </metric>
  <metric name="ATX.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the ATX surface.
    </summary>
  </metric>
  <metric name="CQ.ClickPosition">
    <summary>
      The position of the CQ element that was clicked with respect to its parent
      list.
    </summary>
  </metric>
  <metric name="CQ.ComponentPosition">
    <summary>
      The position of the CQ surface in the page.
    </summary>
  </metric>
  <metric name="CQ.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the CQ surface.
    </summary>
  </metric>
  <metric name="CQ.NumEntriesAvailable">
    <summary>
      The number of child elements available within the CQ surface after
      eligibility check after text finder API. Clamped to a max value of 10.
    </summary>
  </metric>
  <metric name="CQ.NumEntriesShown">
    <summary>
      The number of child elements actually shown within the CQ surface after
      eligibility check through text finder API. Clamped to a max value of 10.
    </summary>
  </metric>
  <metric name="OpenTrigger" enum="SidePanelOpenTrigger">
    <summary>
      The UI location from which the companion page was opened.
    </summary>
  </metric>
  <metric name="PageEntities.ClickPosition">
    <summary>
      The position of the page entities element that was clicked with respect to
      its parent list.
    </summary>
  </metric>
  <metric name="PageEntities.ComponentPosition">
    <summary>
      The position of the page entities surface in the page.
    </summary>
  </metric>
  <metric name="PageEntities.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the page entities surface.
    </summary>
  </metric>
  <metric name="PageEntities.NumEntriesAvailable">
    <summary>
      The number of child elements available within the page entities surface.
      Clamped to a max value of 10.
    </summary>
  </metric>
  <metric name="PageEntities.NumEntriesShown">
    <summary>
      The number of child elements shown within the page entities surface.
      Clamped to a max value of 10.
    </summary>
  </metric>
  <metric name="PH.ComponentPosition">
    <summary>
      The position of the PH surface in the page.
    </summary>
  </metric>
  <metric name="PH.Feedback" enum="Companion.PhFeedback">
    <summary>
      The last user feedback event on the PH surface.
    </summary>
  </metric>
  <metric name="PH.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the PH surface.
    </summary>
  </metric>
  <metric name="PHResult.ClickPosition">
    <summary>
      The position of the PH element that was clicked with respect to its parent
      list.
    </summary>
  </metric>
  <metric name="PHResult.ComponentPosition">
    <summary>
      The position of the PH surface in the page.
    </summary>
  </metric>
  <metric name="PHResult.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the PH surface.
    </summary>
  </metric>
  <metric name="PHResult.NumEntriesAvailable">
    <summary>
      The number of child elements available within the PH surface, regardless
      of text finder API results. Clamped to a max value of 10.
    </summary>
  </metric>
  <metric name="PHResult.NumEntriesShown">
    <summary>
      The number of child elements within the PH surface that pass text finder
      API elibigility check, this is the count bullet points that have jump
      tags. Clamped to a max value of 10.
    </summary>
  </metric>
  <metric name="PromoEvent" enum="Companion.PromoEvent">
    <summary>
      The last event on the promo surface.
    </summary>
  </metric>
  <metric name="RegionSearch.ClickCount">
    <summary>
      The number of times region search in the multimodal box was clicked.
    </summary>
  </metric>
  <metric name="RelQr.ClickPosition">
    <summary>
      The position of the RelQr element that was clicked with respect to its
      parent list.
    </summary>
  </metric>
  <metric name="RelQr.ComponentPosition">
    <summary>
      The position of the RelQr surface in the page.
    </summary>
  </metric>
  <metric name="RelQr.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the RelQr surface.
    </summary>
  </metric>
  <metric name="RelQr.NumEntriesAvailable">
    <summary>
      The number of child elements available within the RelQr surface. Clamped
      to a max value of 10.
    </summary>
  </metric>
  <metric name="RelQr.NumEntriesShown">
    <summary>
      The number of child elements shown within the RelQr surface. Clamped to a
      max value of 10.
    </summary>
  </metric>
  <metric name="RelQs.ClickPosition">
    <summary>
      The position of the RelQs element that was clicked with respect to its
      parent list.
    </summary>
  </metric>
  <metric name="RelQs.ComponentPosition">
    <summary>
      The position of the RelQs surface in the page.
    </summary>
  </metric>
  <metric name="RelQs.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the RelQs surface.
    </summary>
  </metric>
  <metric name="RelQs.NumEntriesAvailable">
    <summary>
      The number of child elements available within the RelQs surface. Clamped
      to a max value of 10.
    </summary>
  </metric>
  <metric name="RelQs.NumEntriesShown">
    <summary>
      The number of child elements shown within the RelQs surface. Clamped to a
      max value of 10.
    </summary>
  </metric>
  <metric name="TextSearchCount">
    <summary>
      The number of times text search box was used, clamped to a max of 10.
    </summary>
  </metric>
  <metric name="VQ.ClickPosition">
    <summary>
      The position of the VQ element that was clicked with respect to its parent
      list.
    </summary>
  </metric>
  <metric name="VQ.ComponentPosition">
    <summary>
      The position of the VQ surface in the page.
    </summary>
  </metric>
  <metric name="VQ.LastEvent" enum="Companion.UiEvent">
    <summary>
      The last event on the VQ surface.
    </summary>
  </metric>
  <metric name="VQ.NumEntriesAvailable">
    <summary>
      The number of child elements available within the VQ surface. Clamped to a
      max value of 10.
    </summary>
  </metric>
  <metric name="VQ.NumEntriesShown">
    <summary>
      The number of child elements shown within the VQ surface. Clamped to a max
      value of 10.
    </summary>
  </metric>
  <metric name="VQS.ImageSensitiveCount">
    <summary>
      The number of images classified as sensitive. Uses exponential bucket of
      1.3 for privacy.
    </summary>
  </metric>
  <metric name="VQS.ImageShoppyCount">
    <summary>
      The number of images classified as shoppy. Uses exponential bucket of 1.3
      for privacy.
    </summary>
  </metric>
  <metric name="VQS.ImageShoppyNotSensitiveCount">
    <summary>
      The number of images classified as shoppy and non-sensitive. Uses
      exponential bucket of 1.3 for privacy.
    </summary>
  </metric>
  <metric name="VQS.VisualEligibleImagesCount">
    <summary>
      The number of images eligible for visual classification. Uses exponential
      bucket of 1.3 for privacy.
    </summary>
  </metric>
  <metric name="VQS.VisualSearchTriggeredCount">
    <summary>
      The number of images that qualify for visual suggestions. Uses exponential
      bucket of 1.3 for privacy.
    </summary>
  </metric>
</event>

<event name="Compose.PageEvents">
  <owner>chrome-compose-frontend@google.com</owner>
  <owner>dewittj@chromium.org</owner>
  <owner>carlosk@chromium.org</owner>
  <summary>
    Reported at PrimaryPageChanged (or tab destruction) if any metrics have been
    recorded. This collects user actions in the compose feature (and some of its
    effects) for this page.
  </summary>
  <metric name="ComposeTextInserted">
    <summary>
      The number of times the Compose result was inserted into the page. Uses
      exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MenuItemClicked">
    <summary>
      The number of times the Compose context menu item was clicked for an
      element on the page. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MenuItemShown">
    <summary>
      The number of times the Compose context menu item was shown for an element
      on the page. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MissingFormData">
    <summary>
      The number of times the Compose context menu item was clicked but the
      expected dialog was not presented because Autofill could not obtain the
      text field's respective FormData. Uses exponential buckets for privacy.
    </summary>
  </metric>
  <metric name="MissingFormFieldData">
    <summary>
      The number of times the Compose context menu item was clicked but the
      expected dialog was not presented because Autofill could not obtain the
      text field's respective FormFieldData. Uses exponential buckets for
      privacy.
    </summary>
  </metric>
  <metric name="ProactiveNudgeDisabledForSite" enum="Boolean">
    <summary>
      True if the proactive nudge was disabled for this site during this page
      load. Added in M126.
    </summary>
  </metric>
  <metric name="ProactiveNudgeDisabledGlobally" enum="Boolean">
    <summary>
      True if the proactive nudge was globally disabled this page load. Added in
      M126.
    </summary>
  </metric>
  <metric name="ProactiveNudgeOpened">
    <summary>
      The number of times the Compose dialog is opened from the proactive nudge
      during this page load. Recorded everytime the nudge is opened. Added in
      M126.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ProactiveNudgeShouldShow">
    <summary>
      The number of times the Compose proactive nudge should show during this
      page load. Recorded any time Compose is asked to show the proactive nudge
      even if it is eventually not shown. Added in M125.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ProactiveNudgeShown">
    <summary>
      The number of times the Compose proactive nudge is shown during this page
      load. Recorded everytime a request to show the nudge returns true. Added
      in M126.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Compose.SessionProgress">
  <owner>chrome-compose-frontend@google.com</owner>
  <owner>petewil@chromium.org</owner>
  <owner>dewittj@chromium.org</owner>
  <summary>
    Reported at the end of every compose session. There may be more than one
    compose session per pageload. This collects user actions in the compose
    dialogs for this URL.
  </summary>
  <metric name="Canceled" enum="Boolean">
    <summary>
      If the user canceled this session with the &quot;X&quot; button. This does
      not include dismissing the dialog by losing focus.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CasualCount">
    <summary>
      How many times the user pressed the &quot;shorten&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ComposeCount">
    <summary>
      How many times the user pressed the &quot;generate&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DialogShownCount">
    <summary>
      How many times the compose dialog was shown to the user. Uses exponential
      buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="FormalCount">
    <summary>
      How many times the user pressed the &quot;formal&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InsertedResults" enum="Boolean">
    <summary>
      If the user inserted results back to the web page in this session, either
      by pressing the &quot;insert&quot; or &quot;replace&quot; button.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LengthenCount">
    <summary>
      How many times the user pressed the &quot;elaborate&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="RegenerateCount">
    <summary>
      How many times the user pressed the &quot;regenerate&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ShortenCount">
    <summary>
      How many times the user pressed the &quot;shorten&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="StartedWithProactiveNudge" enum="Boolean">
    <summary>
      True if the session started with the proactive nudge rather than the
      context menu option. Added in M126.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UndoCount">
    <summary>
      How many times the user pressed the &quot;undo&quot; button in this
      session. Uses exponential buckets for privacy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Compose.TextElementUsage">
  <owner>harringtond@google.com</owner>
  <owner>carlosk@chromium.org</owner>
  <summary>
    Reported once per page load per each multiline text element that received
    input. Excludes potentially sensitive fields including input type=password
    or when autofill determines the field is sensitive.
  </summary>
  <metric name="AutofillFormControlType" enum="AutofillFormControlType2">
    <summary>
      The control type, such as text or textarea. See
      |autofill::FormControlType|.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="EditingTime">
    <summary>
      Number of seconds the user spent editing the field. Includes time between
      key presses, up to 5 seconds each. Bucketed using
      GetExponentialBucketMinForUserTiming().
    </summary>
  </metric>
  <metric name="FieldSignature">
    <summary>
      The signature of the field (mod 1021). This is the hash identifier used to
      denote this field. See components/autofill/core/common/signatures.cc for
      more details.
    </summary>
  </metric>
  <metric name="FormSignature">
    <summary>
      The signature of the form (mod 1021). This is the hash identifier used to
      denote this form. See components/autofill/core/common/signatures.cc for
      more details.
    </summary>
  </metric>
  <metric name="IsAutofillFieldType" enum="Boolean">
    <summary>
      Whether the field is detected and supported by Autofill.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TypedCharacterCount">
    <summary>
      Total number of characters typed into the text element. Bucketed with an
      exponential factor of 2. This is reported as -1 for sensitive field types,
      like passwords or credit cards numbers. Note that this number attempts to
      count only typed changes, but is not always accurate. Additionally, there
      is a limit to the total possible length observed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TypedWordCount">
    <summary>
      Total number of space-delimited words typed into the text element.
      Bucketed with an exponential factor of 2. This is reported as -1 for
      sensitive field types like passwords or credit cards numbers. Note that
      this number attempts to count only typed changes, but is not always
      accurate. Additionally, there is a limit to the total possible length
      observed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Compositor.Rendering">
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Metrics related to rendering in the compositor.
  </summary>
  <metric name="CheckerboardedImagesCount">
    <summary>
      The number of images checker-imaged and re-rasterized on this page.
    </summary>
  </metric>
</event>

<event name="Compositor.UserInteraction">
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Metrics related to user interaction handled by the compositor. This includes
    user gestures like scrolling, pinch-zoom and page-scale animations triggered
    in response to a double-tap event. The length of the user interaction is
    defined as the time the compositor is running an animation resulting from
    user input.
  </summary>
  <metric name="CheckerboardedContentArea">
    <summary>
      The number of visible pixels per frame checkerboarded during this
      interaction.
    </summary>
  </metric>
  <metric name="CheckerboardedContentAreaRatio">
    <summary>
      The percentage of visible pixels per frame checkerboarded during this
      interaction. This value should be between [0, 100].
    </summary>
  </metric>
  <metric name="CheckerboardedImagesCount">
    <summary>
      The number of images checker-imaged and re-rasterized during this
      interaction.
    </summary>
  </metric>
  <metric name="NumMissingTiles">
    <summary>
      The number of visible tiles per frame checkerboarded during this
      interaction.
    </summary>
  </metric>
</event>

<event name="ContactsPicker.ShareStatistics">
  <owner>finnur@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Measures statistics about the contacts shared in the contacts picker (when
    the Contacts Picker dialog is dismissed.)
  </summary>
  <metric name="PropertiesRequested">
    <summary>
      Measures the contact properties requested by the website (names, emails,
      telephone numbers). Bit 1 - telephone numbers, bit 2 - emails, bit 3 -
      names.
    </summary>
  </metric>
  <metric name="SelectCount">
    <summary>
      Measures the total number of contacts selected in the contacts picker.
    </summary>
  </metric>
  <metric name="SelectPercentage">
    <summary>
      Measures the percentage of contacts selected in the contacts picker.
    </summary>
  </metric>
</event>

<event name="ContentIndex.Added">
  <owner>rayankans@chromium.org</owner>
  <summary>
    Collected when a new Content Index entry is registered.
  </summary>
  <metric name="Category" enum="ContentIndexCategory">
    <summary>
      The type of the content registered. Corresponds to
      blink.mojom.ContentCategory.
    </summary>
  </metric>
</event>

<event name="ContentIndex.DeletedByUser">
  <owner>rayankans@chromium.org</owner>
  <summary>
    Collected when a Content Index entry is deleted by the user from the
    Downloads page.
  </summary>
  <metric name="Deleted" enum="Boolean">
    <summary>
      Always true.
    </summary>
  </metric>
</event>

<event name="ContentIndex.Opened">
  <owner>rayankans@chromium.org</owner>
  <summary>
    Collected when a Content Index entry is opened from the Downloads page.
  </summary>
  <metric name="IsOffline" enum="Boolean">
    <summary>
      Whether the browser was offline when the content was opened.
    </summary>
  </metric>
</event>

<event name="ContentManagementSystemPageLoad" singular="True">
  <owner>felixarntz@google.com</owner>
  <owner>npm@chromium.org</owner>
  <summary>
    Metrics stating whether the main frame of a page uses certain content
    management systems. This event is recorded when the page is going to be
    unloaded or when the app enters the background on Android. The content
    management system detection is done when the document is loaded (similar to
    when load event is fired). If a CMS is used after this then it would not be
    detected. For interoperability with the JavaScript framework detection
    above, this reports each CMS individually instead of a single enum.
  </summary>
  <metric name="DrupalPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Drupal CMS.
    </summary>
  </metric>
  <metric name="JoomlaPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Joomloa CMS.
    </summary>
  </metric>
  <metric name="ShopifyPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Shopify CMS.
    </summary>
  </metric>
  <metric name="SquarespacePageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Squarespace CMS.
    </summary>
  </metric>
  <metric name="WixPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Wix CMS.
    </summary>
  </metric>
  <metric name="WordPressPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the WordPress CMS.
    </summary>
  </metric>
</event>

<event name="ContextMenuAndroid.Selected">
  <owner>benwgold@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <metric name="Action" enum="ContextMenuOptionAndroid">
    <summary>
      Emits an integer id for a selection corresponding to the action enum
      defined in ChromeContextMenuPopulator.java (within the ContextMenuUma
      class).
    </summary>
  </metric>
</event>

<event name="ContextMenuAndroid.Shown">
  <owner>benwgold@google.com</owner>
  <owner>twellington@chromium.org</owner>
  <metric name="SearchByImage" enum="Boolean">
    <summary>
      Recorded when the context menu is constructed and logged if the search by
      image option was displayed.
    </summary>
  </metric>
  <metric name="SearchWithGoogleLens" enum="Boolean">
    <summary>
      Recorded when the context menu is constructed and logged if the Lens
      option was displayed.
    </summary>
  </metric>
  <metric name="ShopWithGoogleLens" enum="Boolean">
    <summary>
      Recorded when the context menu is constructed and logged if the Lens
      shopping option was displayed.
    </summary>
  </metric>
  <metric name="ShopWithGoogleLensChip" enum="Boolean">
    <summary>
      Recorded when the context menu is constructed and logged if the Lens
      shopping chip was displayed.
    </summary>
  </metric>
  <metric name="TranslateWithGoogleLensChip" enum="Boolean">
    <summary>
      Recorded when the context menu is constructed and logged if the Lens
      translate chip was displayed.
    </summary>
  </metric>
</event>

<event name="ContextualCueing.CueInteraction">
  <owner>iwells@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Metrics recorded when the user interacts with or dismisses a v2 cue.
  </summary>
  <metric name="ProactiveCueInteraction" enum="ContextualCueingInteraction">
    <summary>
      Records user interaction or non-interaction with the cue.
    </summary>
  </metric>
  <metric name="ProactiveCueShownDurationMs">
    <summary>
      Duration in milliseconds between showing the cue and user interaction or
      dismissal. Exponentially bucketed.
    </summary>
  </metric>
</event>

<event name="ContextualCueing.CueShown" singular="true">
  <owner>iwells@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Metrics recorded when the v2 cue is shown to the user.
  </summary>
  <metric name="MatchedTabCount">
    <summary>
      Number of background tabs suggested by the model that are still valid and
      relevant (e.g. not navigated away or closed). Exponentially bucketed.
    </summary>
  </metric>
  <metric name="MissingTabCount">
    <summary>
      Number of background tabs suggested by the model that weren’t valid by the
      time the model response was received. Exponentially bucketed.
    </summary>
  </metric>
  <metric name="NavigatedAwayTabCount">
    <summary>
      Number of background tabs suggested by the model that are no longer
      relevant because they navigated to another URL before the model response
      was received. Exponentially bucketed.
    </summary>
  </metric>
  <metric name="ProactiveCueDecision" enum="ContextualCueingDecision">
    <summary>
      Records kSuccess when a cue is shown, or a different value indicating the
      reason why the cue was not shown.
    </summary>
  </metric>
  <metric name="ProactiveCueLatencyAfterPageLoad">
    <summary>
      Duration in milliseconds between page load
      (WebContentsObserver::DidFinishNavigation()) and a cue being shown.
    </summary>
  </metric>
  <metric name="SuggestedCujCategory">
    <summary>
      Hash of the name of the critical user journey category output by the
      model.
    </summary>
  </metric>
</event>

<event name="ContextualCueing.NudgeDecision">
  <owner>sophiechang@chromium.org</owner>
  <owner>zekunjiang@google.com</owner>
  <summary>
    Recorded when a decision to nudge an optimization type was made for the page
    load.
  </summary>
  <metric name="NudgeDecision" enum="ContextualCueingNudgeDecision">
    <summary>
      The nudge decision made for optimization type for the page load.
    </summary>
  </metric>
  <metric name="OptimizationType" enum="OptimizationType">
    <summary>
      The optimization type a nudge decision was made for.
    </summary>
  </metric>
</event>

<event name="ContextualCueing.NudgeInteraction">
  <owner>sophiechang@chromium.org</owner>
  <owner>zekunjiang@google.com</owner>
  <summary>
    Recorded only if a contextual cueing nudge was shown to the user.
  </summary>
  <metric name="NudgeInteraction" enum="ContextualCueingNudgeInteraction">
    <summary>
      The interaction the user had with the contextual cueing nudge.
    </summary>
  </metric>
  <metric name="NudgeIsDynamic" enum="Boolean">
    <summary>
      Whether the nudge is showing a dynamic cue (vs. a static cue).
    </summary>
  </metric>
  <metric name="NudgeLatencyAfterPageLoad">
    <summary>
      The amount of time it takes to display a nudge. This time is measured in
      milliseconds, and measured from page load to when the nudge is shown.
    </summary>
  </metric>
  <metric name="NudgeShownDuration">
    <summary>
      The amount of time in milliseconds that a nudge is shown for, before user
      takes action on the nudge. Bucketed using
      GetExponentialBucketMinForUserTiming().
    </summary>
  </metric>
</event>

<event name="Conversions.ClientBounce">
  <owner>linnan@google.com</owner>
  <owner>measurement-api-dev+metrics@google.com</owner>
  <summary>
    We consider a non-user-initiated navigation to be a client bounce if it
    navigates the page away within a short period of time without any user
    activation/interaction. Recorded when client bounce occurs.

    The event is associated with the UKM source ID from the navigation ID of the
    most recent primary page navigation since M135.
  </summary>
  <metric name="UserActivation.10s">
    <summary>
      Measures how many non-navigation data hosts where registered on the page
      when a page was navigated away within 10s without any user activation by a
      non-user-initiated navigation.
    </summary>
  </metric>
  <metric name="UserActivation.1s">
    <summary>
      Measures how many non-navigation data hosts where registered on the page
      when a page was navigated away within 1s without any user activation by a
      non-user-initiated navigation.

      Note that these data hosts are also counted in
      &quot;UserActivation.5s&quot; and &quot;UserActivation.10s&quot;.
    </summary>
  </metric>
  <metric name="UserActivation.5s">
    <summary>
      Measures how many non-navigation data hosts where registered on the page
      when a page was navigated away within 5s without any user activation by a
      non-user-initiated navigation.

      NNote that these data hosts are also counted in
      &quot;UserActivation.10s&quot;.
    </summary>
  </metric>
  <metric name="UserInteraction.10s">
    <summary>
      Measures how many non-navigation data hosts where registered on the page
      when a page was navigated away within 10s without any user interaction by
      a non-user-initiated navigation.
    </summary>
  </metric>
  <metric name="UserInteraction.1s">
    <summary>
      Measures how many non-navigation data hosts where registered on the page
      when a page was navigated away within 1s without any user interaction by a
      non-user-initiated navigation.

      Note that these data hosts are also counted in
      &quot;UserInteraction.5s&quot; and &quot;UserInteraction.10s&quot;.
    </summary>
  </metric>
  <metric name="UserInteraction.5s">
    <summary>
      Measures how many non-navigation data hosts where registered on the page
      when a page was navigated away within 5s without any user interaction by a
      non-user-initiated navigation.

      Note that these data hosts are also counted in
      &quot;UserInteraction.10s&quot;.
    </summary>
  </metric>
</event>

<event name="CookieHasNonAsciiCharacter">
  <owner>bingler@chromium.org</owner>
  <summary>
    A collection of metrics which are recorded for cookies which include at
    least one non-ascii unicode character in either their name or value fields.
    This metric is only interested in an event being generated, the value it
    records is meaningless.
  </summary>
  <metric name="Name" enum="Boolean">
    <summary>
      Records events when a cookie has a non-ascii unicode character in its name
      field.
    </summary>
  </metric>
  <metric name="Value" enum="Boolean">
    <summary>
      Records events when a cookie has a non-ascii unicode character in its
      value field.
    </summary>
  </metric>
</event>

<event name="Cookies.Blocked.DueToOriginMismatch">
  <owner>amarjotgill@chromium.org</owner>
  <owner>bingler@chromium.org</owner>
  <summary>
    A collection of metrics which are recorded for cookies which will be blocked
    due to an origin mismatch, this means either the port or scheme it is being
    accessed by does not match that of the origin which originally set the
    cookie.
  </summary>
  <metric name="PortMismatch" enum="Boolean">
    <summary>
      True if the cookie was accessed by port which was mismatched.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SchemeMismatch" enum="Boolean">
    <summary>
      True if the cookie was accessed by scheme which was mismatched.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="CPUUsageMeasurement">
  <owner>chrisha@chromium.org</owner>
  <owner>siggi@chromium.org</owner>
  <summary>
    A CPU usage measurement that corresponds to a tick in a CPU usage
    time-series. There is also some metadata stored to determine how faithful
    the CPU usage measurement is (e.g. NumberOfCoresidentTabs).
  </summary>
  <metric name="CPUUsage">
    <summary>
      CPU usage measurement. This is in units of clock-cycles. For example, 1.2
      seconds of 100% CPU usage on a 2.5GHz CPU corresponds to a value of 1.2 x
      1.0 x 2.5e9 = 3e6.
    </summary>
  </metric>
  <metric name="EventType">
    <summary>
      The event associated with the measurement. This is an integer value
      corresponding to the enum defined in
      resource_coordinator::RenderProcessProbe.
    </summary>
  </metric>
  <metric name="IsVisible">
    <summary>
      Indicates if any frame hosted in this tab is visible at the moment the
      measurement is taken.
    </summary>
  </metric>
  <metric name="NumberOfCoresidentTabs">
    <summary>
      Number of co-resident tabs in all of the render processes a tab is
      associated with when the CPU usage measurement is taken.
    </summary>
  </metric>
  <metric name="ObservationWindowSizeMs">
    <summary>
      The size of the observation window (time since last CPU measurement) in
      milliseconds.
    </summary>
  </metric>
  <metric name="ProcessUptimeMs">
    <summary>
      The uptime of the process being measured, in milliseconds.
    </summary>
  </metric>
</event>

<event name="CrossOriginSubframeWithoutEmbeddingControl">
  <owner>clamy@chromium.org</owner>
  <summary>
    Recorded when a subframe is embedded in a cross-origin context without
    having a CSP frame-ancestor header or an XFO header.
  </summary>
  <metric name="SubframeEmbedded">
    <summary>
      Mesaures the number of pages with subframes embedded in cross-origin
      contexts without having a CSP frame-ancestor header or an XFO header.
    </summary>
  </metric>
</event>

<event name="DailyChargeSummary">
  <owner>thanhdng@chromium.org</owner>
  <summary>
    Records daily summaries of charging. DailyChargeSummary summarizes charging
    information (e.g. amount of time on full charge, amount of time on AC
    adapter, etc) in a day. It can be used in combination with other
    DailyChargeSummary events to get information about the last 30 days of
    charging. If a &quot;SmartCharging&quot; event and a
    &quot;DailyChargeSummary&quot; event has them same source ID and
    &quot;EventId&quot;, it means &quot;DailyChargeSummary&quot; is the summary
    when &quot;SmartCharging&quot; event is logged. DailyChargeSummary records
    an array. Each event records an item in the array, specified by its index
    DailySummaryIndex. Items in the same array will have same source ID and
    EventId.
  </summary>
  <metric name="DailySummaryHoldTimeOnAc">
    <summary>
      Amount of time (in minutes) the device was on AC charger and the charge
      was hold due to adaptive charging, at an index specified by
      DailySummaryIndex.
    </summary>
  </metric>
  <metric name="DailySummaryIndex">
    <summary>
      Index of this event in the array. Please see the event summary for more
      details.
    </summary>
  </metric>
  <metric name="DailySummaryNumDaysDistance">
    <summary>
      Distance in days bettwen current day and the day that the daily summary
      was logged.
    </summary>
  </metric>
  <metric name="DailySummarySize">
    <summary>
      Number of items in array. Please see the event summary for more details.
    </summary>
  </metric>
  <metric name="DailySummaryTimeFullOnAc">
    <summary>
      Amount of time (in minutes) the device was keep on AC charger with full
      battery (100%).
    </summary>
  </metric>
  <metric name="DailySummaryTimeOnAc">
    <summary>
      Amount of time (in minutes) the device was keep on AC charger.
    </summary>
  </metric>
  <metric name="EventId">
    <summary>
      A number that represent order of an event. Used combined with
      &quot;SmartCharging&quot;'s EventId to reconstruct charge history.
    </summary>
  </metric>
</event>

<event name="DataReductionProxy" singular="True">
  <owner>robertogden@chromium.org</owner>
  <summary>
    Data Reduction Proxy related metrics associated with a page load. See
    //components/data_reduction_proxy/.
  </summary>
  <metric name="DataSaverPageUUID">
    <summary>
      A unique identifier of this page load to the proxy server. Recorded for
      each navigation that uses the proxy.
    </summary>
  </metric>
  <metric name="EstimatedOriginalNetworkBytes">
    <summary>
      The estimated number of bytes that would have been used if that proxy was
      disabled on this page load. Recorded for each navigation that uses the
      proxy.
    </summary>
  </metric>
</event>

<event name="DevTools.Opened">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records that the DevTools were opened by the user.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the DevTools menu was opened by the user; only
      records true values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="DIPS.ChainBegin" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    This metric has been superceded by the BTM.ChainBegin UKM and is no longer
    emitted as of M138.

    Emitted after a redirect chain terminates, but for the page visited before
    the chain began -- the initial URL.
  </summary>
  <metric name="ChainId">
    <summary>
      A randomly-generated 32-bit id to connect this event with the
      DIPS.Redirect and DIPS.ChainEnd events emitted for the same redirect
      chain.
    </summary>
  </metric>
  <metric name="InitialAndFinalSitesSame" enum="BooleanSameSite">
    <summary>
      True when the site before the redirect chain is the same as the site at
      the end of the chain.
    </summary>
  </metric>
</event>

<event name="DIPS.ChainEnd" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    This metric has been superceded by the BTM.ChainEnd UKM and is no longer
    emitted as of M138.

    Emitted for the page visited at the end of a redirect chain -- the final
    URL.
  </summary>
  <metric name="ChainId">
    <summary>
      A randomly-generated 32-bit id to connect this event with the
      DIPS.ChainBegin and DIPS.Redirect events emitted for the same redirect
      chain.
    </summary>
  </metric>
  <metric name="InitialAndFinalSitesSame" enum="BooleanSameSite">
    <summary>
      True when the site before the redirect chain is the same as the site at
      the end of the chain.
    </summary>
  </metric>
</event>

<event name="DIPS.Deletion" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    Recorded when DIPS judges a site to be an incidental party and deletes its
    state if specific conditions are met.
  </summary>
  <metric name="HasCookieException" enum="Boolean">
    <summary>
      True iff the user has a third-party cookies blocking exception for the
      site (as a third-party).
    </summary>
  </metric>
  <metric name="IsDeletionEnabled" enum="Boolean">
    <summary>
      True iff site data deletion is enabled for the DIPS service.
    </summary>
  </metric>
  <metric name="ShouldBlockThirdPartyCookies" enum="Boolean">
    <summary>
      True when third-party cookies are blocked.
    </summary>
  </metric>
</event>

<event name="DIPS.Redirect" singular="True">
  <owner>navtracking-team@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    This metric has been superceded by the BTM.Redirect UKM and is no longer
    emitted as of M138.

    Recorded on every HTTP redirect or client-side bounce, where a client-side
    bounce is a non-user-initiated navigation starting soon after the previous
    navigation committed.
  </summary>
  <metric name="ChainId">
    <summary>
      A randomly-generated 32-bit id to connect this event with other
      DIPS.Redirect events and the DIPS.ChainBegin/ChainEnd events emitted for
      the same redirect chain.
    </summary>
  </metric>
  <metric name="ClientBounceDelay">
    <summary>
      Populated for client redirects only. The time in seconds (capped at 10)
      between the page committing and the redirect navigation starting. An int
      in the range [0, 10].
    </summary>
  </metric>
  <metric name="CookieAccessType" enum="CookieAccessType">
    <summary>
      Whether the redirect read cookies, wrote cookies, both, or neither.
    </summary>
  </metric>
  <metric name="HasStickyActivation" enum="BooleanHasUserActivation">
    <summary>
      Populated for client redirects only. Whether the user interacted with the
      page (See the HTML spec for a definition). This info is persisted within
      BTM for a duration of `btm::kInteractionTtl`.
    </summary>
  </metric>
  <metric name="InitialAndFinalSitesSame" enum="BooleanSameSite">
    <summary>
      True when the site before the redirect chain is the same as the site at
      the end of the chain.
    </summary>
  </metric>
  <metric name="IsPartialRedirectChain">
    <summary>
      True if the chain is missing the end URL. Any comparisons to the final
      site are invalid for this redirect.
    </summary>
  </metric>
  <metric name="RedirectAndFinalSiteSame" enum="BooleanSameSite">
    <summary>
      True when the redirect site is the same as the site at the end of the
      redirect chain.
    </summary>
  </metric>
  <metric name="RedirectAndInitialSiteSame" enum="BooleanSameSite">
    <summary>
      True when the redirect site is the same as the site before the redirect
      chain.
    </summary>
  </metric>
  <metric name="RedirectChainIndex">
    <summary>
      0-based index of this individual redirect within its chain.
    </summary>
  </metric>
  <metric name="RedirectChainLength">
    <summary>
      The length of the overall redirect chain.
    </summary>
  </metric>
  <metric name="RedirectType" enum="DIPSRedirectType">
    <summary>
      The type of the redirect: client or server.
    </summary>
  </metric>
  <metric name="SiteEngagementLevel" enum="SiteEngagementLevel">
    <summary>
      Deprecated as of M139.

      The site engagement level of the redirect URL, at the time the redirect
      took place.
    </summary>
  </metric>
  <metric name="WebAuthnAssertionRequestSucceeded"
      enum="BooleanWebAuthnAssertionRequestSucceeded">
    <summary>
      Populated for client redirects only. Whether the user triggered a
      successful web authn assertion. This info is persisted within BTM for a
      duration of `btm::kInteractionTtl`.
    </summary>
  </metric>
</event>

<event name="DIPS.TriggeringAction">
  <owner>kaklilu@google.com</owner>
  <owner>dc-komics@google.com</owner>
  <summary>
    Recorded on a repeated interval when DIPS may want to clear site storage to
    improve user privacy. These metrics will be used to determine which
    triggering action is most appropriate for our use case.

    When these cases occur, the DIPS instance recording these metrics will keep
    track of which triggering actions have already happened to prevent logging
    duplicate metrics.
  </summary>
  <metric name="DidBounce" enum="Boolean">
    <summary>
      True for sites that redirected the user since the last time the DIPS
      instance attempted to clear site storage.
    </summary>
  </metric>
  <metric name="DidStatefulBounce" enum="Boolean">
    <summary>
      True for sites that redirected the user while accessing storage since the
      last time the DIPS instance attempted to clear site storage.
    </summary>
  </metric>
  <metric name="UsedStorage" enum="Boolean">
    <summary>
      True for sites wrote to the browser's storage since the last time the DIPS
      instance attempted to clear site storage.
    </summary>
  </metric>
</event>

<event name="DocumentCreated">
  <owner>rakina@chromium.org</owner>
  <owner>navigation-dev@chromium.org</owner>
  <summary>
    Recorded when a Document object is created and records the source ID of the
    navigation and whether the document was in the main frame. This can be used
    to link subframe UKM events to the parent document.
  </summary>
  <metric name="IsCrossOriginFrame">
    <summary>
      Whether the document was in a cross origin iframe. This can either be 0 or
      1.
    </summary>
  </metric>
  <metric name="IsCrossSiteFrame">
    <summary>
      Whether the document was in a cross site iframe. This can either be 0 or
      1.
    </summary>
  </metric>
  <metric name="IsMainFrame">
    <summary>
      Whether the document was in the main frame. This is can either be 0 or 1.
    </summary>
  </metric>
  <metric name="NavigationSourceId">
    <summary>
      Contains the UKM source id of the navigation as an integer.
    </summary>
  </metric>
</event>

<event name="DomDistiller.Android.DistillabilityLatency" singular="true">
  <owner>wylieb@google.com</owner>
  <owner>chrome-reader-mode@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Records
    the result of the triggering model which determines if the current page is
    considered distillable. Recorded for the android-specific code which uses
    the results.
  </summary>
  <metric name="Latency">
    <summary>
      The duration (in milliseconds) for how long it took from the time the
      distillability result to be returned.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="DomDistiller.Android.DistillabilityResult" singular="true">
  <owner>wylieb@google.com</owner>
  <owner>chrome-reader-mode@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Records
    the result of the triggering model which determines if the current page is
    considered distillable. Recorded for the android-specific code which uses
    the result.
  </summary>
  <metric name="Result" enum="DistillationResult">
    <summary>
      The distillation result from the current page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="DomDistiller.Android.ReaderModeShown" singular="true">
  <owner>wylieb@google.com</owner>
  <owner>chrome-reader-mode@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Records
    when the user interacts with reader mode directly, after it's been offered.
    Recorded for the android-specific code which uses the results.
  </summary>
  <metric name="Shown" enum="Boolean">
    <summary>
      Whether reader mode is shown for the current page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="DomDistiller.ModelResult.Distillable" singular="true">
  <owner>wylieb@google.com</owner>
  <owner>chrome-reader-mode@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Records
    the result of the triggering model which determines if the current page is
    considered distillable.
  </summary>
  <metric name="Distillable" enum="Boolean">
    <summary>
      Whether the current page is distillable.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Download.Completed">
  <owner>clank-downloads@google.com</owner>
  <summary>
    Metrics taken when a download completes. Its parent event is
    Download.Started.
  </summary>
  <metric name="BytesWasted">
    <summary>
      The number of bytes that have been used in an excess (ie. download
      restarting the middle of a download).
    </summary>
  </metric>
  <metric name="DownloadId">
    <summary>
      The id of the download that is used to associate separate events.
    </summary>
  </metric>
  <metric name="ResultingFileSize">
    <summary>
      The size of the file that is downloaded, expressed in kilobytes with
      exponentially growing buckets.
    </summary>
  </metric>
  <metric name="TimeSinceStart">
    <summary>
      The difference in the time between when the download finished and when it
      began, expressed in milliseconds.
    </summary>
  </metric>
</event>

<event name="Download.Interrupted">
  <owner>clank-downloads@google.com</owner>
  <summary>
    Metrics taken when a download is interrupted. Its parent event is
    Download.Started.
  </summary>
  <metric name="BytesWasted">
    <summary>
      The number of bytes that have been used in an excess (ie. download
      restarting the middle of a download).
    </summary>
  </metric>
  <metric name="ChangeInFileSize">
    <summary>
      The difference in the size of the file that is downloaded compared to the
      initial reported size, expressed in kilobytes with exponentially growing
      buckets.
    </summary>
  </metric>
  <metric name="DownloadId">
    <summary>
      The id of the download that is used to associate separate events.
    </summary>
  </metric>
  <metric name="Reason">
    <summary>
      The reason the download was interrupted, expressed as an enum defined in
      DownloadInterruptReason.
    </summary>
  </metric>
  <metric name="ResultingFileSize">
    <summary>
      The size of the file that is downloaded, expressed in kilobytes with
      exponentially growing buckets.
    </summary>
  </metric>
  <metric name="TimeSinceStart">
    <summary>
      The difference in the time between when the download interrupted and when
      it began, expressed in milliseconds.
    </summary>
  </metric>
</event>

<event name="Download.Resumed">
  <owner>clank-downloads@google.com</owner>
  <summary>
    Metrics taken when a download is resumed. Its parent event is
    Download.Started.
  </summary>
  <metric name="DownloadId">
    <summary>
      The id of the download that is used to associate separate events.
    </summary>
  </metric>
  <metric name="Mode">
    <summary>
      The mode by which the download was resumed, expressed as an enum defined
      in ResumeMode.
    </summary>
  </metric>
  <metric name="TimeSinceStart">
    <summary>
      The difference in the time between when the download resumed and when it
      began, expressed in milliseconds.
    </summary>
  </metric>
</event>

<event name="Download.Started">
  <owner>clank-downloads@google.com</owner>
  <summary>
    Metrics taken when a download begins. It has one Download.Ended and none to
    multiple Download.Interrupted/Download.Resumed events associated with it.
  </summary>
  <metric name="DownloadConnectionSecurity">
    <summary>
      The state of the security of the final download URL and all the redirects
      leading to it. Expressed as an enum defined in DownloadConnectionSecurity.
    </summary>
  </metric>
  <metric name="DownloadId">
    <summary>
      The id of the download that is used to associate separate events.
    </summary>
  </metric>
  <metric name="DownloadSource">
    <summary>
      The source of the download, expressed as an enum defined in DownloadEntry.
    </summary>
  </metric>
  <metric name="FileType">
    <summary>
      The type of file that is downloaded, expressed as an enum defined in
      DownloadContentType.
    </summary>
  </metric>
  <metric name="IsSameHostDownload">
    <summary>
      A boolean denoting if the final download URL is the same host as the
      initiating frame (i.e., whether the initiating site likely controls the
      download itself).
    </summary>
  </metric>
</event>

<event name="Enterprise.Profile.Enrollment">
  <owner>cbe-device-trust-team@google.com</owner>
  <summary>
    Metrics related to Profiles enrolling into Enterprise cloud management.
  </summary>
  <metric name="IsUntrustedOidcRedirect">
    <summary>
      A boolean capturing that a Profile enrollment flow was blocked due to a
      lack of trust in the chain of navigation redirects.
    </summary>
  </metric>
</event>

<event name="Extensions.BackgroundContentsCreated">
  <owner>erikchen@chromium.org</owner>
  <summary>
    Recorded each time a background contents creates its first renderer by
    navigating its initial WebContents.
  </summary>
  <metric name="Seen" enum="Boolean">
    <summary>
      Dummy Boolean as UKM does not support events with no metrics.
    </summary>
  </metric>
</event>

<event name="Extensions.DeclarativeNetRequest.DSERedirect">
  <owner>quarz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension redirects search away from the default search
    engine (DSE) page using the DeclarativeNetRequest API.
  </summary>
  <metric name="Seen" enum="Boolean">
    <summary>
      Dummy Boolean as UKM does not support events with no metrics.
    </summary>
  </metric>
</event>

<event name="Extensions.ExtensionUsage">
  <owner>howardcha@google.com</owner>
  <owner>webstore-eng@google.com</owner>
  <summary>
    Records user actions related to an extension, providing usage metrics for
    the Chrome Web Store. Tracked actions include pinning, unpinning, enabling,
    disabling, context menu access, and toolbar icon clicks.
  </summary>
  <metric name="Action" enum="ExtensionUsageAction">
    <summary>
      The action the user took on the extension.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Extensions.OnNavigation" singular="True">
  <owner>chikamune@chromium.org</owner>
  <owner>yyanagisawa@chromium.org</owner>
  <owner>sisidovski@chromium.org</owner>
  <owner>hiroshige@chromium.org</owner>
  <owner>kouhei@chromium.org</owner>
  <summary>
    Records the extension related metrics that might have negative impacts on
    LCP. This is recorded when navigation is finished.
  </summary>
  <metric name="DeclarativeNetRequestFeedbackPermissionCount">
    <summary>
      The number of enabled extensions that have a DeclarativeNetRequestFeedback
      permission. The exponential bucketing is applied for privacy reasons by
      using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DeclarativeNetRequestPermissionCount">
    <summary>
      The number of enabled extensions that have a DeclarativeNetRequest
      permission. The exponential bucketing is applied for privacy reasons by
      using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DeclarativeNetRequestWithHostAccessPermissionCount">
    <summary>
      The number of enabled extensions that have a
      DeclarativeNetRequestWithHostAccess permission. The exponential bucketing
      is applied for privacy reasons by using
      ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DeclarativeWebRequestPermissionCount">
    <summary>
      The number of enabled extensions that have a DeclarativeWebRequest
      permission. The exponential bucketing is applied for privacy reasons by
      using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="EnabledExtensionCount">
    <summary>
      The number of enabled extensions that are not themes nor apps nor
      components. The exponential bucketing is applied for privacy reasons by
      using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="EnabledExtensionCount.HaveHostPermissions">
    <summary>
      The number of enabled extensions that have host permissions for the
      navigation target URL. The exponential bucketing is applied for privacy
      reasons by using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="EnabledExtensionCount.InjectContentScript">
    <summary>
      The number of enabled extensions that inject content scripts. The
      exponential bucketing is applied for privacy reasons by using
      ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WebRequestAuthProviderPermissionCount">
    <summary>
      The number of enabled extensions that have a WebRequestAuthProvider
      permission. The exponential bucketing is applied for privacy reasons by
      using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WebRequestBlockingPermissionCount">
    <summary>
      The number of enabled extensions that have a WebRequestBlocking
      permission. The exponential bucketing is applied for privacy reasons by
      using ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WebRequestPermissionCount">
    <summary>
      The number of enabled extensions that have a WebRequest permission. The
      exponential bucketing is applied for privacy reasons by using
      ukm::GetExponentialBucketMin(value, 2).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Extensions.SearchRedirect">
  <owner>quarz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension redirects a search away from the default search
    engine (DSE) page. The event is associated with the destination URL of the
    redirect.
  </summary>
  <metric name="Api" enum="ExtensionSearchRedirectedByApi">
    <summary>
      The API used to perform the redirect.
    </summary>
  </metric>
</event>

<event name="Extensions.Tabs.RemoveDSE">
  <owner>quarz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension uses the Tabs API to update the default search
    engine url of the tab.
  </summary>
  <metric name="Seen" enum="Boolean">
    <summary>
      Dummy Boolean as UKM does not support events with no metrics.
    </summary>
  </metric>
</event>

<event name="Extensions.Tabs.UpdateDSE">
  <owner>quarz@chromium.org</owner>
  <owner>extensions-core@chromium.org</owner>
  <summary>
    Recorded when an extension uses the Tabs API to remove a tab whose url is
    the default search engine.
  </summary>
  <metric name="Seen" enum="Boolean">
    <summary>
      Dummy Boolean as UKM does not support events with no metrics.
    </summary>
  </metric>
</event>

<event name="Extensions.WebRequest.KeepaliveRequestFinished">
  <owner>yhirano@chromium.org</owner>
  <owner>kinuko@chromium.org</owner>
  <summary>
    Whether and how keepalive requests are blocked. Recorded when a keepalive
    request finishes.
  </summary>
  <metric name="NumRedirects">
    <summary>
      The number of redirects the request experienced. This is up to 21, as
      specified at https://fetch.spec.whatwg.org/#http-redirect-fetch .
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="State" enum="ExtensionInProgressRequestState">
    <summary>
      The final state of the request.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="FacilitatedPayments.Ewallet.FopSelectorResult">
  <owner>junhuihe@google.com</owner>
  <owner>qihuizhao@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged when the eWallet FoP selector UI is closed.
  </summary>
  <metric name="Result" enum="Boolean">
    <summary>
      Set to true after user accepted the FoP selector UI and selected a FoP to
      use, and to false after user rejected/dismissed the FoP selector UI.
    </summary>
  </metric>
  <metric name="Scheme" enum="FacilitatedPayments.EwalletScheme">
    <summary>
      The scheme of the payment link.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="FacilitatedPayments.Ewallet.FopSelectorShown">
  <owner>junhuihe@google.com</owner>
  <owner>qihuizhao@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged after the eWallet FoP selector UI is shown.
  </summary>
  <metric name="Scheme" enum="FacilitatedPayments.EwalletScheme">
    <summary>
      The scheme of the payment link.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Shown" enum="Boolean">
    <summary>
      Always set to true. So acts as a counter for the number of times a FoP
      selector is shown for eWallet.
    </summary>
  </metric>
</event>

<event name="FacilitatedPayments.PaymentLinkDetected">
  <owner>junhuihe@google.com</owner>
  <owner>qihuizhao@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged after a given payment link in a certain page for an
    eWallet push payment flow is detected. This metric is different from
    blink::WebFeature::kLinkRelPayment because the
    blink::WebFeature::kLinkRelPayment metric counts when a link with payment
    rel is present, no matter whether it triggers eWallet payment flow or not,
    while this metric counts only when the eWallet payment flow is triggered.
  </summary>
  <metric name="PaymentLinkDetected" enum="Boolean">
    <summary>
      Always set to true and serves as a counter when analyzing the vents.
    </summary>
  </metric>
</event>

<event name="FacilitatedPayments.Pix.FopSelectorResult">
  <owner>siashah@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged when the FoP selector UI for Pix is closed.
  </summary>
  <metric name="Result" enum="Boolean">
    <summary>
      Set to true after user accepted the FoP selector UI and selected a FoP to
      use, and to false after user rejected/dismissed the FoP selector UI.
    </summary>
  </metric>
</event>

<event name="FacilitatedPayments.Pix.FopSelectorShown">
  <owner>siashah@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged after the FoP selector UI is shown.
  </summary>
  <metric name="Shown" enum="Boolean">
    <summary>
      Always set to true. So acts as a counter for the number of times a FoP
      selector is shown for Pix.
    </summary>
  </metric>
</event>

<event name="FacilitatedPayments.Pix.InitiatePurchaseActionResult">
  <owner>siashah@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged after getting response from the
    InitiatePurchaseAction call to the server.
  </summary>
  <metric name="Result" enum="FacilitatedPayments.InitiatePurchaseActionResult">
    <summary>
      The result of the InitiatePurchaseAction call.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="FacilitatedPayments.PixCodeCopied">
  <owner>siashah@google.com</owner>
  <owner>longsheng@google.com</owner>
  <owner>payments-autofill-team@google.com</owner>
  <summary>
    An event that is logged after a likely Pix code is copied to the clipboard
    on any website. It includes whether the copy event occurred within an
    iframe.
  </summary>
  <metric name="HasIframe" enum="Boolean">
    <summary>
      A boolean denoting if the Pix code copy event occurred within an iframe or
      in the mainframe.
    </summary>
  </metric>
  <metric name="PixCodeCopied" enum="Boolean">
    <summary>
      Always set to true. So acts as a counter for the number of times a likely
      Pix code is copied.
    </summary>
  </metric>
</event>

<event name="FamilyLinkUser.BlockedContent">
  <owner>chrome-kids-eng@google.com</owner>
  <summary>
    Logged whenever a page load for a supervised user had some or all of its
    content blocked. Either MainFrameBlocked is true, or NumBlockedIframes is
    non-zero.
  </summary>
  <metric name="MainFrameBlocked" enum="Boolean">
    <summary>
      Whether the main frame for the navigation was blocked (in which case) none
      of the content of the site is loaded.
    </summary>
  </metric>
  <metric name="NumBlockedIframes">
    <summary>
      The number of Iframes that were blocked by the supervised user filtering
      logic in this page load. Exponentially bucketed.
    </summary>
  </metric>
</event>

<event name="Feedback.HappinessTrackingSurvey">
  <owner>zhouzj@google.com</owner>
  <owner>msramek@google.com</owner>
  <summary>
    Recorded when a user completes a HaTS survey.
  </summary>
  <metric name="SurveyAnswerToQuestion1">
    <summary>
      The answer the user has provided to survey question number 1.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion2">
    <summary>
      The answer the user has provided to survey question number 2.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion3">
    <summary>
      The answer the user has provided to survey question number 3.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion4">
    <summary>
      The answer the user has provided to survey question number 4.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion5">
    <summary>
      The answer the user has provided to survey question number 5.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion6">
    <summary>
      The answer the user has provided to survey question number 6.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion7">
    <summary>
      The answer the user has provided to survey question number 7.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion8">
    <summary>
      The answer the user has provided to survey question number 8.
    </summary>
  </metric>
  <metric name="SurveyAnswerToQuestion9">
    <summary>
      The answer the user has provided to survey question number 9.
    </summary>
  </metric>
  <metric name="SurveyCompleted" enum="Boolean">
    <summary>
      Boolean that records if a survey has been successfully completed.
    </summary>
  </metric>
  <metric name="SurveyId">
    <summary>
      Survey ID associated with HaTS. This ID should be unique per HaTS survey
      and should be separate from any existing IDs.
    </summary>
  </metric>
  <metric name="SurveyLoaded" enum="Boolean">
    <summary>
      Boolean that records if a survey has been successfully loaded.
    </summary>
  </metric>
</event>

<event name="FetchKeepAliveRequest.WithCategory">
  <owner>mych@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Records metrics of a fetch keepalive request with a specific set of
    &quot;category&quot; values in the request URL parameter.

    This is logged only once per request, at the end of the request handling in
    the browser process.

    https://docs.google.com/document/d/1TSbtp5I5Bc1pbAKrrEHfmZlAwgeh6AlgAH7GbDMNPRQ/edit?tab=t.0
  </summary>
  <metric name="Category">
    <summary>
      An 8-bit integer that can be mapped to a specific value of a
      &quot;category&quot; parameter in the request URL.
    </summary>
  </metric>
  <metric name="CompletionStatus.ErrorCode">
    <summary>
      Deprecated as of 2025/05/22. An integer representing the error code of the
      request when it completes or fails. This comes from
      network::URLLoaderCompletionStatus.error_code.
    </summary>
  </metric>
  <metric name="CompletionStatus.ExtendedErrorCode">
    <summary>
      Deprecated as of 2025/05/22. An integer representing the error code of the
      request when it completes or fails. This comes from
      network::URLLoaderCompletionStatus.extended_error_code.
    </summary>
  </metric>
  <metric name="EndStage" enum="FetchKeepAliveRequestStage">
    <summary>
      An enum representing the end stage of the fetch keepalive request when the
      event is logged.
    </summary>
  </metric>
  <metric name="Id.High">
    <summary>
      The high bits of the unique number that connects a fetch keepalive request
      throughout different processes.
    </summary>
  </metric>
  <metric name="Id.Low">
    <summary>
      The low bits of the unique number that connects a fetch keepalive request
      throughout different processes.
    </summary>
  </metric>
  <metric name="IsContextDetached" enum="Boolean">
    <summary>
      Whether the Context is detached or not when this event is logged.
    </summary>
  </metric>
  <metric name="LoaderCompleted.ErrorCode">
    <summary>
      An integer representing the error code of the request when it reaches the
      kLoaderCompleted stage. This comes from
      network::URLLoaderCompletionStatus.error_code.
    </summary>
  </metric>
  <metric name="LoaderCompleted.ExtendedErrorCode">
    <summary>
      An integer representing the extended error code of the request when it
      reaches the kLoaderCompleted stage. This comes from
      network::URLLoaderCompletionStatus.extended_error_code.
    </summary>
  </metric>
  <metric name="NumRedirects">
    <summary>
      The number of redirects a fetch keepalive request loader has experienced
      so far when the event is logged.

      Note that the maximum value is 20, as specified at
      https://fetch.spec.whatwg.org/#http-redirect-fetch.
    </summary>
  </metric>
  <metric name="NumRetries">
    <summary>
      The number of retries a fetch keepalive request loader has experienced so
      far when the event is logged.

      Note that the maximum value is 10.
    </summary>
  </metric>
  <metric name="PreviousStage" enum="FetchKeepAliveRequestStage">
    <summary>
      An enum representing the previous stage of the fetch keepalive request
      when the event is logged.

      When the request is abandoned from the &quot;LoaderCreated&quot; stage,
      this is also set to &quot;LoaderCreated&quot; stage.
    </summary>
  </metric>
  <metric name="RequestFailed.ErrorCode">
    <summary>
      An integer representing the error code of the request when it reaches the
      kRequestfailed stage. This comes from
      network::URLLoaderCompletionStatus.error_code.
    </summary>
  </metric>
  <metric name="RequestFailed.ExtendedErrorCode">
    <summary>
      An integer representing the extended error code of the request when it
      reaches the kRequestFailed stage. This comes from
      network::URLLoaderCompletionStatus.extended_error_code.
    </summary>
  </metric>
  <metric name="RequestRetried.ErrorCode">
    <summary>
      An integer representing the error code of the request when it reaches the
      kRequestRetried stage. This comes from
      network::URLLoaderCompletionStatus.error_code.
    </summary>
  </metric>
  <metric name="RequestRetried.ExtendedErrorCode">
    <summary>
      An integer representing the extended error code of the request when it
      reaches the kRequestRetried stage. This comes from
      network::URLLoaderCompletionStatus.extended_error_code.
    </summary>
  </metric>
  <metric name="RequestType" enum="FetchKeepAliveRequestType">
    <summary>
      An enum representing the type of the fetch keepalive request. It tells
      whether this request is a fetch request, an attribution reporting request
      (obsolete), or a fetchLater request.
    </summary>
  </metric>
  <metric name="TimeDelta.BrowserShutdown">
    <summary>
      The time difference (in milliseconds) between the
      &quot;BrowserShutdown&quot; stage and the &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.EventLogged">
    <summary>
      The time difference (in milliseconds) between when this event is logged
      and the &quot;LoaderCreated&quot; stage.
    </summary>
  </metric>
  <metric name="TimeDelta.FirstRedirectReceived">
    <summary>
      The time difference (in milliseconds) between the
      &quot;FirstRedirectReceived&quot; stage and the &quot;LoaderCreated&quot;
      stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.LoaderCompleted">
    <summary>
      The time difference (in milliseconds) between the
      &quot;LoaderCompleted&quot; stage and the &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.LoaderDisconnectedFromRenderer">
    <summary>
      The time difference (in milliseconds) between the
      &quot;LoaderDisconnectedFromRenderer&quot; stage and the
      &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.RequestCancelledAfterTimeLimit">
    <summary>
      The time difference (in milliseconds) between the
      &quot;RequestCancelledAfterTimeLimit&quot; stage and the
      &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.RequestCancelledByRenderer">
    <summary>
      The time difference (in milliseconds) between the
      &quot;RequestCancelledByRenderer&quot; stage and the
      &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.RequestFailed">
    <summary>
      The time difference (in milliseconds) between the
      &quot;RequestFailed&quot; stage and the &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.RequestRetried">
    <summary>
      The time difference (in milliseconds) between the
      &quot;RequestRetried&quot; stage and the &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.RequestStarted">
    <summary>
      The time difference (in milliseconds) between the
      &quot;RequestStarted&quot; stage and the &quot;LoaderCreated&quot; stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.ResponseReceived">
    <summary>
      The time difference (in milliseconds) between the
      &quot;ResponseReceived&quot; stage and the &quot;LoaderCreated&quot;
      stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.SecondRedirectReceived">
    <summary>
      The time difference (in milliseconds) between the
      &quot;SecondRedirectReceived&quot; stage and the &quot;LoaderCreated&quot;
      stage.

      Only set when the stage is reached.
    </summary>
  </metric>
  <metric name="TimeDelta.ThirdOrLaterRedirectReceived">
    <summary>
      The time difference (in milliseconds) between the
      &quot;SecondRedirectReceived&quot; stage and the &quot;LoaderCreated&quot;
      stage.

      Only set when the stage is reached.
    </summary>
  </metric>
</event>

<event name="FetchKeepAliveRequest.WithCategory.Navigation">
  <owner>mych@chromium.org</owner>
  <owner>rakina@chromium.org</owner>
  <summary>
    Records metrics to connect a pair of the following requests happening around
    the same time with the same &quot;category&quot; param value: (1) A
    navigation request with a URL param &quot;category&quot;. (2) A fetch
    keepalive request with the same URL param &quot;category&quot;.

    This is logged only once per such pair of requests, roughly at the time when
    the last of the two requests in a pair completes.

    This should be used together with
    &quot;FetchKeepAliveRequest.WithCategory&quot; event.

    https://docs.google.com/document/d/13P-jwVXFDrh6RBr-8H11GURKG89LziNlV1nAmlWAuB0/edit?tab=t.0
  </summary>
  <metric name="Category">
    <summary>
      An 8-bit integer that can be mapped to a specific value of a
      &quot;category&quot; parameter in the request URL.
    </summary>
  </metric>
  <metric name="Id.High">
    <summary>
      The high bits of the unique number that connects a fetch keepalive request
      throughout different processes.
    </summary>
  </metric>
  <metric name="Id.Low">
    <summary>
      The low bits of the unique number that connects a fetch keepalive request
      throughout different processes.
    </summary>
  </metric>
  <metric name="NavigationId">
    <summary>
      A 64-bit integer that represents the navigation ID of the page navigation
      that has the same category param value as the fetch keepalive request with
      the Id.Low and Id.High logged in this event.
    </summary>
  </metric>
</event>

<event name="FileSystemAPI.WebRequest">
  <owner>mek@chromium.org</owner>
  <owner>rhalavatigit@chromium.org</owner>
  <summary>
    Logged when a website requests accessing FileSystem API.
  </summary>
  <metric name="Persistent">
    <summary>
      Marks a request for a Persistent FileSystem.
    </summary>
  </metric>
  <metric name="Temporary">
    <summary>
      Marks a request for a Temporary FileSystem.
    </summary>
  </metric>
</event>

<event name="FileSystemObserver.Usage">
  <owner>dslee@chromium.org</owner>
  <owner>memmott@chromium.org</owner>
  <summary>
    Quota usage of FileSystemObserver OS resource, collected when usage changes.
    Recorded when FileSystemAccessObserverQuotaManager is destroyed.
  </summary>
  <metric name="HighWaterMark">
    <summary>
      High water mark of OS-specific observer resource usage. The unit used
      depends on OS. On inotify-based OS (Linux, Android), it is the count of
      inotify watches. On Mac, it is the count of FSEventsCreate calls. On
      Windows, it is the number of bytes used for buffer memory. This is rounded
      down to the nearest exponential bucket, with bucket spacing of 1.1.
    </summary>
  </metric>
  <metric name="HighWaterMarkPercentage">
    <summary>
      High water mark of OS-specific observer resource usage over quota limit in
      percentage, rounded down to the nearest integer.
    </summary>
  </metric>
  <metric name="QuotaExceeded" enum="Boolean">
    <summary>
      Whether FileSystemObserver usage change caused quota to be exceeded.
    </summary>
  </metric>
</event>

<event name="FlocPageLoad" singular="True">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Whenever the floc is computed, this event will be recorded at the commit
    time of the next page load. Caveat: if the browser is closed before the next
    page load occurs (in a new session), the event won't be recorded.
  </summary>
  <metric name="FlocId">
    <summary>
      The user's floc id. This ignores any general or per-context access
      permissions, and records the internal int64_t number directly. This metric
      may still be skipped if the floc was not calculated or has been
      invalidated.
    </summary>
  </metric>
</event>

<event name="Fullscreen.Enter">
  <owner>muyaoxu@google.com</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    The browser enters the fullscreen mode.
  </summary>
  <metric name="LockState" enum="FullscreenLockState">
    <summary>
      The keyboard and pointer lock states.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Fullscreen.Exit">
  <owner>muyaoxu@google.com</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    The browser exits the fullscreen mode.
  </summary>
  <metric name="SessionDuration">
    <summary>
      Duration of the fullscreen session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GameControls.ButtonOptionsMenuFunctionTriggered">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when Game Controls' options menu button functions are triggered.
  </summary>
  <metric name="Function" enum="GameControlsButtonOptionsMenuFunction">
    <summary>
      The functions on the button options menu.
    </summary>
  </metric>
</event>

<event name="GameControls.EditDeleteMenuFuctionTriggered">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when Game Controls edit-delete menu functions are triggered.
  </summary>
  <metric name="Function" enum="GameControlsEditDeleteMenuFunction">
    <summary>
      The functions on the edit-delete menu.
    </summary>
  </metric>
</event>

<event name="GameControls.EditingListFunctionTriggered">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when Game Controls editing list functions are triggered.
  </summary>
  <metric name="Function" enum="GameControlsEditingListFunction">
    <summary>
      The functions on the editing list.
    </summary>
  </metric>
</event>

<event name="GameControls.PlayGameWithGameControls">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Log once whether the ARC game is played with Game Controls per game session.
    If it is played with Game Controls, record true immediately. If it is never
    played with Game Controls, record false when shutting down the game.
  </summary>
  <metric name="PlayedWith" enum="Boolean">
    <summary>
      Boolean indicating whether the ARC game is played with Game Controls.
    </summary>
  </metric>
</event>

<event name="GameControls.ToggleWithMappingSource">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when Game Controls feature or hint is toggled on or off.
  </summary>
  <metric name="Function" enum="GameControlsToggleFunction">
    <summary>
      Toggle the feature or mapping hint.
    </summary>
  </metric>
  <metric name="MappingSource" enum="GameControlsMappingSource">
    <summary>
      Toggle the feature or mapping hint.
    </summary>
  </metric>
  <metric name="ToggleOn" enum="Boolean">
    <summary>
      Whether the function is toggled on or off.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ControlsFeatureToggleState">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when Game Controls feature is toggled on or off.
  </summary>
  <metric name="ToggleOn" enum="Boolean">
    <summary>
      Game Controls feature is toggled on or off.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ControlsHintToggleSource">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when Game Controls mapping hint is toggled on or off.
  </summary>
  <metric name="Source" enum="GameDashboardMenu">
    <summary>
      Where the mapping hint is toggled from.
    </summary>
  </metric>
  <metric name="ToggleOn" enum="Boolean">
    <summary>
      Game Controls mapping hint is toggled on or off.
    </summary>
  </metric>
</event>

<event name="GameDashboard.EditControlsWithEmptyState">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged whether Game Controls is empty when entering Game Controls edit mode.
  </summary>
  <metric name="Empty" enum="Boolean">
    <summary>
      Whether Game Controls is empty.
    </summary>
  </metric>
</event>

<event name="GameDashboard.FunctionTriggered">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when the game dashboard functions are triggered.
  </summary>
  <metric name="Function" enum="GameDashboardFunction">
    <summary>
      Game dashboard function.
    </summary>
  </metric>
</event>

<event name="GameDashboard.RecordingStartSource">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged where the recording starts from.
  </summary>
  <metric name="Source" enum="GameDashboardMenu">
    <summary>
      Where is the recording started from, main menu or toolbar.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ScreenshotTakeSource">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged where the screenshot is taken from.
  </summary>
  <metric name="Source" enum="GameDashboardMenu">
    <summary>
      Where is the screenshot taken from, main menu or toolbar.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ToggleMainMenu">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when the game dashboard main menu is toggled on or off and how it is
    toggled.
  </summary>
  <metric name="ToggleMethod" enum="GameDashboardMainMenuToggleMethod">
    <summary>
      How the main menu is toggled.
    </summary>
  </metric>
  <metric name="ToggleOn" enum="Boolean">
    <summary>
      Whether the main menu is toggled on or off.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ToolbarClickToExpandState">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when the game dashboard toolbar is expanded or collapsed.
  </summary>
  <metric name="Expanded" enum="Boolean">
    <summary>
      Whether the toolbar is expanded.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ToolbarNewLocation">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when the game dashboard toolbar is snapped to a new location.
  </summary>
  <metric name="Location" enum="GameDashboardToolbarSnapLocation">
    <summary>
      Toolbar new snap location.
    </summary>
  </metric>
</event>

<event name="GameDashboard.ToolbarToggleState">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when the game dashboard toolbar is toggled on or off.
  </summary>
  <metric name="ToggleOn" enum="Boolean">
    <summary>
      Whether the toolbar is toggled on or off.
    </summary>
  </metric>
</event>

<event name="GameDashboard.WelcomeDialogNotificationToggleState">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    Logged when the game dashboard welcome dialog notification is toggled on or
    off.
  </summary>
  <metric name="ToggleOn" enum="Boolean">
    <summary>
      Welcome dialog notification is toggled on or off.
    </summary>
  </metric>
</event>

<event name="GamingInputOverlay.ActionRepositionOperationType">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event that is logged when key mapping position is changed.
  </summary>
  <metric name="OperationType" enum="ArcInputOverlayRepositionOperationType">
    <summary>
      Type about how the reposition is done.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.ActionRepositionWindowStateType">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event that is logged when key mapping position is changed.
  </summary>
  <metric name="WindowStateType" enum="ArcInputOverlayWindowStateType">
    <summary>
      Window state type when the reposition is done.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.ButtonGroupRepositionOperationType">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event that is logged when button group position is changed.
  </summary>
  <metric name="OperationType" enum="ArcInputOverlayRepositionOperationType">
    <summary>
      Type about how the reposition is done.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.ButtonGroupRepositionWindowStateType">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event that is logged when menu entry position is changed.
  </summary>
  <metric name="WindowStateType" enum="ArcInputOverlayWindowStateType">
    <summary>
      Window state type when the reposition is done.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.Customization">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event for gaming input overlay that is logged when users enter into edit
    mode.
  </summary>
  <metric name="CustomizationUsed" enum="Boolean">
    <summary>
      Whether the customization option was used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.Feature">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event for gaming input overlay that is logged when the input overlay
    feature itself changes state.
  </summary>
  <metric name="FeatureStateOn" enum="Boolean">
    <summary>
      Whether the gaming input overlay feature is in use.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.MappingHint">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event for gaming input overlay that is logged when the mapping hint state
    is changed.
  </summary>
  <metric name="MappingHintStateOn" enum="Boolean">
    <summary>
      Whether the mapping hint for gaming input overlay is on.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.MenuEntryRepositionOperationType">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event that is logged when key mapping position is changed.
  </summary>
  <metric name="OperationType" enum="ArcInputOverlayRepositionOperationType">
    <summary>
      Type about how the reposition is done.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GamingInputOverlay.MenuEntryRepositionWindowStateType">
  <owner>phshah@chromium.org</owner>
  <owner>arc-gaming@google.com</owner>
  <summary>
    An event that is logged when menu entry position is changed.
  </summary>
  <metric name="WindowStateType" enum="ArcInputOverlayWindowStateType">
    <summary>
      Window state type when the reposition is done.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GeneratedNavigation" singular="True">
  <owner>ryansturm@chromium.org</owner>
  <owner>avi@chromium.org</owner>
  <summary>
    Logged when the user navigated to their home page or their default search
    engine. Recorded if the first URL or the final URL matches the pattern for
    Default Search or matches the user's home page URL. Recorded upon commit
    (even if the page was not foreground).
  </summary>
  <metric name="FinalURLIsDefaultSearchEngine">
    <summary>
      If the navigation committed URL matches the template URL of the user's
      Default Search Engine.
    </summary>
  </metric>
  <metric name="FinalURLIsHomePage">
    <summary>
      If the navigation committed URL matches the user's home page URL. Not
      recorded on Android because home page is managed outside of Chrome.
    </summary>
  </metric>
  <metric name="FirstURLIsDefaultSearchEngine">
    <summary>
      If the navigation starting URL matches the template URL of the user's
      Default Search Engine.
    </summary>
  </metric>
  <metric name="FirstURLIsHomePage">
    <summary>
      If the navigation starting URL (first URL in the redirect chain) matches
      the user's home page URL. Not recorded on Android because home page is
      managed outside of Chrome.
    </summary>
  </metric>
</event>

<event name="Glic.AutoOpen.Closed">
  <owner>sanaakbani@google.com</owner>
  <owner>iwells@google.com</owner>
  <summary>
    Recorded when an auto-opened Glic instance (such as for a PDF) is closed or
    dismissed by the user or system. The source_id represents the URL of the tab
    where auto-open was initially triggered. This metric is not recorded on tab
    switches and is only recorded when the last side panel associated with the
    auto-opened instance closes.
  </summary>
  <metric name="SessionDurationMs">
    <summary>
      The duration in milliseconds that the auto-opened Glic instance remained
      open.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Glic.Onboarding">
  <owner>sanaakbani@google.com</owner>
  <owner>birnie@google.com</owner>
  <summary>
    Recorded when an unconsented user interacts with Glic during the onboarding
    funnel (opening Glic, viewing the FRE opt-in UI, accepting consent, or
    submitting a prompt). The source_id reflects the focused tab at the moment
    the event occurs, or NoURLSourceId if no tab is focused.
  </summary>
  <metric name="FunnelStep" enum="GlicOnboardingFunnelStep">
    <summary>
      The onboarding funnel step reached (NewUserOpen, FreOptInShown,
      FreOptInAccepted, FirstPromptSubmitted).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvocationSource" enum="GlicInvocationSource">
    <summary>
      The entry point used to invoke Glic.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Glic.Response">
  <owner>erikchen@chromium.org</owner>
  <owner>iwells@google.com</owner>
  <summary>
    Recorded when a response starts and was visible. The source id reflects the
    targeted tab, and can be an empty source ID if no tab is targeted.
  </summary>
  <metric name="Attached" enum="Boolean">
    <summary>
      Whether the glic window was attached or detached.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvocationSource" enum="GlicInvocationSource">
    <summary>
      The source of the invocation of the glic window.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WebClientMode" enum="GlicWebClientMode">
    <summary>
      The mode of the glic window.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Glic.WindowOpen">
  <owner>erikchen@chromium.org</owner>
  <owner>iwells@google.com</owner>
  <summary>
    Recorded when a glic window opens. The source id reflects the targeted tab,
    and can be an empty source ID if no tab is targeted.
  </summary>
  <metric name="Attached" enum="Boolean">
    <summary>
      Whether the glic window was attached or detached.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvocationSource" enum="GlicInvocationSource">
    <summary>
      The source of the invocation of the glic window.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GoogleDocsOfflineExtension">
  <owner>dullweber@chromium.org</owner>
  <owner>arabm@google.com</owner>
  <owner>chrome-privacy-core@google.com</owner>
  <summary>
    Logged when a website requests a shared resource from Google Docs Offline
    Extension. Note that this is double counted for imports since it is done
    once in preload and once in actual load.
  </summary>
  <metric name="ResourceRequested">
    <summary>
      Marks a resource request from a website.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="GroupSuggestionPromo.Suggestion">
  <owner>yuezhanggg@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Collects information about member tabs that are in a tab group suggestion.
    Recorded after a suggestion is shown and user has reacted to the suggestion.
  </summary>
  <metric name="GroupSuggestionID">
    <summary>
      An int ID corresponding to the suggestion. This will enable joining all
      tabs of the suggestion together.
    </summary>
  </metric>
  <metric name="GroupSuggestionType" enum="TabGroupSuggesiton.SuggestionType">
    <summary>
      Enum of the type of the suggestion. This is decided by the type of
      heuristics used to trigger the suggestion.
    </summary>
  </metric>
  <metric name="IsActiveTab" enum="Boolean">
    <summary>
      Boolean indicating whether this source is the active tab for the trigger,
      only recorded for 1 tab within all GroupSuggestionPromo.Suggestion events
      recorded with the same GroupSuggestionID.
    </summary>
  </metric>
  <metric name="RecentForegroundCount">
    <summary>
      Int recording the number of times that the tab has been foregrounded in a
      predefined time window, currently 10 minutes.
    </summary>
  </metric>
  <metric name="SecondsSinceLastActive">
    <summary>
      Int recording the number of seconds since the tab was last active.
      Exponentially bucketed using GetExponentialBucketMin with a spacing of 1.3
    </summary>
  </metric>
  <metric name="UserResponseType" enum="TabGroupSuggesiton.UserResponse">
    <summary>
      Enum of the type of user response.
    </summary>
  </metric>
</event>

<event name="HistoryApi.PushState">
  <owner>yaoxia@chromium.org</owner>
  <owner>shivanisha@chromium.org</owner>
  <summary>
    Records usage of `window.history.pushState` method, capturing details about
    user activation and ad-related information. Recorded when this method is
    invoked.
  </summary>
  <metric name="FromAd" enum="Boolean">
    <summary>
      True if the history API is invoked when an ad script is in the JavaScript
      stack, or if the invoking context is an ad iframe, as determined by
      Chrome's ad tagging mechanisms.
      (https://chromium.googlesource.com/chromium/src/+/lkgr/docs/ad_tagging.md)
    </summary>
  </metric>
  <metric name="HasStickyUserActivation" enum="Boolean">
    <summary>
      Whether the invoking context has seen user activation.
      (https://mustaqahmed.github.io/user-activation-v2)
    </summary>
  </metric>
</event>

<event name="HistoryClusters" singular="True">
  <owner>chrome-memories@google.com</owner>
  <owner>mcrouse@chromium.org</owner>
  <summary>
    Metrics that capture the iteractions with HistoryClusters, or Journeys, This
    will be recorded once per visit to the HistoryClusters UI and logged when
    the UI is closed or navigated away from.
  </summary>
  <metric name="InitialState" enum="HistoryClustersInitialState">
    <summary>
      The initial state that describes how an interaction with the
      HistoryClusters UI was started.
    </summary>
  </metric>
  <metric name="NumQueries">
    <summary>
      The number of times the user performed a query on the HistoryClusters UI
      during this interaction. This can include partial queries that occur due
      to the UI's query timing.
    </summary>
  </metric>
  <metric name="NumTogglesToBasicHistory">
    <summary>
      The number of times the user toggled to the basic history page during this
      interaction with the HistoryClusters UI.
    </summary>
  </metric>
</event>

<event name="HistoryManipulationIntervention">
  <owner>shivanisha@chromium.org</owner>
  <summary>
    Logged when an entry in the back-forward list is marked to be skipped on
    subsequent back/forward button clicks as part of the history manipulation
    intervention. This is logged when the entry is navigated away from.
  </summary>
</event>

<event name="HistoryNavigation" singular="True">
  <owner>arthursonzogni@chromium.org</owner>
  <owner>hajimehoshi@chromium.org</owner>
  <summary>
    Metrics recorded each time we commit a history navigation, which are needed
    to estimate benefits of back-forward cache. Except as otherwise noted, the
    metrics are recorded for history navigations, but not for same-document
    navigations.
  </summary>
  <metric name="BackForwardCache.BlocklistedFeatures">
    <summary>
      When navigating back to a page in the session history, this records what
      blocklisted features were used when the page was loaded and prevented this
      page from being stored in the back-forward cache. Multiple blocklisted
      features can be recorded for the same page as a binary mask. This entry
      records the features numbered from 0 to 63.
    </summary>
  </metric>
  <metric name="BackForwardCache.BlocklistedFeatures2">
    <summary>
      When navigating back to a page in the session history, this records what
      blocklisted features were used when the page was loaded and prevented this
      page from being stored in the back-forward cache. Multiple blocklisted
      features can be recorded for the same page as a binary mask. This entry
      records the features numbered from 64 to 127.
    </summary>
  </metric>
  <metric name="BackForwardCache.BrowsingInstanceNotSwappedReason"
      enum="BackForwardCacheBrowsingInstanceNotSwappedReason">
    <summary>
      When navigating back to a page in the session history and the
      BackForwardCache wasn't used because of the related browsing instances,
      this records the reason why the browsing instance wasn't swapped.
    </summary>
  </metric>
  <metric name="BackForwardCache.DisabledForRenderFrameHostReasonCount">
    <summary>
      The number of the reasons passed to
      BackForwardCache::DisableForRenderFrameHost calls.
    </summary>
  </metric>
  <metric name="BackForwardCache.IsAmpPage" enum="Boolean">
    <summary>
      Boolean whether the now-restored page uses AMP (see https://amp.dev). If
      the page wasn't restored from the back-forward cache, this metric will not
      be populated. This metric will never be true when
      BackForwardCache.IsServedFromBackForwardCache is false.
    </summary>
  </metric>
  <metric name="BackForwardCache.IsServedFromBackForwardCache">
    <summary>
      Boolean whether the page was restored from the back-forward cache or not.
    </summary>
  </metric>
  <metric name="BackForwardCache.NotRestoredReasons">
    <summary>
      Bitmask of the reasons why the page was not restored from the back-forward
      cache. See contents::BackForwardCacheMetrics::NotRestoredReason for the
      meaning of the individual bits. This entry records the features numbered
      from 0 to 63.
    </summary>
  </metric>
  <metric name="BackForwardCache.NotRestoredReasons2">
    <summary>
      Bitmask of the reasons why the page was not restored from the back-forward
      cache. See contents::BackForwardCacheMetrics::NotRestoredReason for the
      meaning of the individual bits. This entry records the features numbered
      from 64 to 127.
    </summary>
  </metric>
  <metric
      name="BeforeSoftNavigation.MaxCumulativeShiftScore.MainFrame.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window, after the page is restored from the
      back-forward, before the first soft navigation. The gap between two
      consecutive shifts in a window is not bigger than 1000ms and the maximum
      window size is 5000ms. This metric's integral value is 100x the fractional
      cumulative layout shift score described in the explainer.
    </summary>
  </metric>
  <metric
      name="BeforeSoftNavigation.NumInteractionsAfterBackForwardCacheRestore">
    <summary>
      The number of distinct user interactions on a page after it is restored
      from the back-forward cache, before the first soft navigation. See
      definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric
      name="BeforeSoftNavigation.UserInteractionLatencyAfterBackForwardCacheRestore.HighPercentile2.MaxEventDurationMs">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      page after it is restored from the back-forward cache, in ms. For this
      metric, we measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration. Only interactions before
      the first soft navigation are considered.
    </summary>
  </metric>
  <metric name="CrossOriginSubframesFeatures">
    <summary>
      Bitmask of features numbered from 0 to 63 used by the cross origin
      subframes of the previous page load. See blink::SchedulingPolicy::Feature
      for the meaning for the individual features.
    </summary>
  </metric>
  <metric name="CrossOriginSubframesFeatures2">
    <summary>
      Bitmask of features numbered from 64 to 127 used by the cross origin
      subframes of the previous page load. See blink::SchedulingPolicy::Feature
      for the meaning for the individual features.
    </summary>
  </metric>
  <metric name="CumulativeShiftScoreAfterBackForwardCacheRestore">
    <summary>
      Deprecated as of 04/23. It is still reported, but most users should use
      PageLoad.LayoutInstability.MaxCumulativeShiftScore.AfterBackForwardCacheRestore.SessionWindow.Gap1000ms.Max5000ms.

      Measures the cumulative layout shift (bit.ly/3fQz29y) that has occurred
      during the session, after the page is restored from the back-forward
      cache. This metric's integral value is 100x the fractional cumulative
      layout shift score described in the explainer.
    </summary>
  </metric>
  <metric name="FirstInputDelayAfterBackForwardCacheRestore">
    <summary>
      Measures First Input Delay, the duration between the hardware timestamp
      and the start of event processing on the main thread for the first
      meaningful input per navigation, after the page is restored from the
      back-forward cache.
    </summary>
  </metric>
  <metric name="FirstRequestAnimationFrameAfterBackForwardCacheRestore">
    <summary>
      Measures the time duration between the page restore from back-forward
      cache and the first requestAnimationFrame time in milliseconds.
    </summary>
  </metric>
  <metric name="ForegroundDurationAfterBackForwardCacheRestore">
    <summary>
      For page loads that start in the foreground, measures the duration of time
      in milliseconds until one of the following events occurs: the load of the
      main resource fails, the page load is stopped, the tab hosting the page is
      closed, the render process hosting the page goes away, a new navigation
      which later commits is initiated in the same tab, or the tab hosting the
      page is backgrounded. This metric has a very long tail, for pages that
      spend a long period of time in the foreground. As such, use of the mean or
      tail values are not recommended.
    </summary>
  </metric>
  <metric name="LastCommittedCrossDocumentNavigationSourceIdForTheSameDocument">
    <summary>
      For history navigations and reloads, the source id of the previous
      navigation which loaded the page we're trying to navigate back to.
    </summary>
  </metric>
  <metric name="MainFrameFeatures">
    <summary>
      Bitmask of features numbered from 0 to 63 used by the main frames of the
      previous page load. See blink::SchedulingPolicy::Feature for the meaning
      for the individual features.
    </summary>
  </metric>
  <metric name="MainFrameFeatures2">
    <summary>
      Bitmask of features numbered from 64 to 127 used by the main frames of the
      previous page load. See blink::SchedulingPolicy::Feature for the meaning
      for the individual features.
    </summary>
  </metric>
  <metric
      name="MaxCumulativeShiftScoreAfterBackForwardCacheRestore.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window, after the page is restored from the
      back-forward. The gap between two consecutive shifts in a window is not
      bigger than 1000ms and the maximum window size is 5000ms. This metric's
      integral value is 100x the fractional cumulative layout shift score
      described in the explainer.
    </summary>
  </metric>
  <metric name="NavigatedToTheMostRecentEntryForDocument">
    <summary>
      Boolean for whether we navigated to the same navigation entry as the one
      which was last visible.

      It can be false when subframes or same-document navigations are present.
      For example, after navigating from http://foo to http://foo#bar and then
      http://bar and then going back by 2 entries will mean we went to
      http://foo while the last committed entry from this document was
      http://foo#bar.

      It's expected to be rare, but might be problematic for back-forward cache.
    </summary>
  </metric>
  <metric name="NavigationToFirstPaintAfterBackForwardCacheRestore">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the first paint is performed, after the page is restored
      from the back-forward cache.
    </summary>
  </metric>
  <metric name="NumInteractionsAfterBackForwardCacheRestore">
    <summary>
      The number of distinct user interactions on a page after it is restored
      from the back-forward cache. See definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric name="PageEndReasonAfterBackForwardCacheRestore">
    <summary>
      The reason (as a |page_load_metrics::PageEndReason|) why the user
      navigated away from the page after it was restored from the back-forward
      cache. This includes navigations after which the page is stored in the
      back-forward cache again, as well as other page-ending events.
    </summary>
  </metric>
  <metric name="SameOriginSubframesFeatures">
    <summary>
      Bitmask of features numbered from 0 to 63 used by the same origin
      subframes of the previous page load. See blink::SchedulingPolicy::Feature
      for the meaning for the individual features.
    </summary>
  </metric>
  <metric name="SameOriginSubframesFeatures2">
    <summary>
      Bitmask of features numbered from 64 to 127 used by the same origin
      subframes of the previous page load. See blink::SchedulingPolicy::Feature
      for the meaning for the individual features.
    </summary>
  </metric>
  <metric name="SecondRequestAnimationFrameAfterBackForwardCacheRestore">
    <summary>
      Measures the time duration between the page restore from back-forward
      cache and the second requestAnimationFrame time in milliseconds.
    </summary>
  </metric>
  <metric name="SoftNavigationCount">
    <summary>
      Number of soft navigations detected by heuristics. See
      https://github.com/WICG/soft-navigations

      Soft navigations are JS-driven same-document navigations that are using
      the history API or the new Navigation API, triggered by a user gesture and
      meaningfully modify the DOM, replacing the previous content with new one.
    </summary>
  </metric>
  <metric name="ThirdRequestAnimationFrameAfterBackForwardCacheRestore">
    <summary>
      Measures the time duration between the page restore from back-forward
      cache and the third requestAnimationFrame time in milliseconds.
    </summary>
  </metric>
  <metric name="TimeSinceNavigatedAwayFromDocument">
    <summary>
      Time in milliseconds from the moment the current navigation stopped being
      active to the start of the current navigation.

      This is clamped to hours for values greater than 3 hours, to minutes for
      values greater than 3 minutes, to seconds for values greater than 5
      seconds.
    </summary>
  </metric>
  <metric
      name="UserInteractionLatencyAfterBackForwardCacheRestore.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      page after it is restored from the back-forward cache, in ms. For this
      metric, we measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
  </metric>
  <metric
      name="WorstUserInteractionLatencyAfterBackForwardCacheRestore.MaxEventDuration2">
    <summary>
      The maximum value of user interaction latency of a page after it is
      restored from the back-forward, in ms. For this metric, we measure the
      latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
  </metric>
</event>

<event name="HttpsFirstMode.Event">
  <owner>meacer@chromium.org</owner>
  <owner>jdeblasio@chromium.org</owner>
  <summary>
    Metrics recorded when an HTTPS-First Mode event happens.
  </summary>
  <metric name="FallbackReason" enum="HttpsFirstModeFallbackReason">
    <summary>
      The reason why the navigation fell back to HTTP.
    </summary>
  </metric>
  <metric name="Result" enum="HttpsFirstModeBlockingResult">
    <summary>
      An enum value representing the decision the user made when shown an
      interstitial (proceed, don't proceed, etc.). The enum is defined in
      |HttpsOnlyModeBlockingPage|.
    </summary>
  </metric>
</event>

<event name="InitialWebUINavigationTiming" singular="True">
  <owner>mych@google.com</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Navigation timing metrics associated with the main frame navigation for
    Initial WebUI pages.
  </summary>
  <metric name="FirstRequestStart">
    <summary>
      The time relative to navigation start that the first HTTP request is sent
      for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FirstResponseStart">
    <summary>
      The time relative to navigation start that the headers of the first HTTP
      response are received for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="NavigationCommitReceived">
    <summary>
      The time relative to navigation start that navigation commit message for a
      main frame navigation is received from a renderer process.
    </summary>
  </metric>
  <metric name="NavigationCommitReplySent">
    <summary>
      The time relative to navigation start that navigation commit reply for a
      main frame navigation is sent to a renderer process.
    </summary>
  </metric>
  <metric name="NavigationCommitSent">
    <summary>
      The time relative to navigation start that navigation commit message for a
      main frame navigation is sent to a renderer process.
    </summary>
  </metric>
  <metric name="NavigationDidCommit">
    <summary>
      The time relative to navigation start that navigation for a main frame
      navigation did commit from a renderer process.
    </summary>
  </metric>
</event>

<event name="InitialWebUIPageLoad" singular="True">
  <owner>mych@google.com</owner>
  <owner>chrome-webium-product-eng@google.com</owner>
  <summary>
    Core metrics associated with the page loads for Initial WebUI pages.
  </summary>
  <metric name="CPUTimeMs">
    <summary>
      Amount of CPU wall time over the duration of a page load, while the page
      is in the foreground. Measured in milliseconds.
    </summary>
  </metric>
  <metric name="DayOfWeek">
    <summary>
      The day of the week when the page load was initiated. The time is measured
      in the local time zone according to the system clock. Only collected for
      page loads that start while on foreground.
    </summary>
  </metric>
  <metric name="DocumentTiming.NavigationToDOMContentLoadedEventFired">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the DOMContentLoaded event is fired, for main frame
      documents.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DocumentTiming.NavigationToLoadEventFired">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the load event is fired, for main frame documents.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HourOfDay">
    <summary>
      The hour of the day when the page load was initiated. The time is measured
      in the local time zone according to the system clock. Only collected for
      page loads that start while on foreground.
    </summary>
  </metric>
  <metric name="MainFrameResource.RequestHasNoStore" enum="Boolean">
    <summary>
      A boolean indicating if any mainpage resource has a 'Cache-control:
      no-store' response header. Recorded only for main frame request.
    </summary>
  </metric>
  <metric name="Navigation.PageEndReason3" enum="PageEndReason">
    <summary>
      The |page_load_metrics::PageEndReason| for the main frame navigation of
      this page load. Replaced Navigation.PageEndReason2 on January 2021 to get
      rid of END_HIDDEN and use END_APP_BACKGROUND on cases where the metrics
      are flushed and the app enters the background.
    </summary>
  </metric>
  <metric name="Navigation.PageTransition">
    <summary>
      The |ui::PageTransition| for the main frame navigation of this page load.
    </summary>
  </metric>
  <metric name="Net.ErrorCode.OnFailedProvisionalLoad">
    <summary>
      The |net::Error| code for this page load. Only logged for failed
      provisional navigations.
    </summary>
  </metric>
  <metric name="PageTiming.ForegroundDurationMs">
    <summary>
      For page loads that start in the foreground, measures the duration of time
      in milliseconds until one of the following events occurs: the load of the
      main resource fails, the page load is stopped, the tab hosting the page is
      closed, the render process hosting the page goes away, a new navigation
      which later commits is initiated in the same tab, or the tab hosting the
      page is backgrounded. This metric has a very long tail, for pages that
      spend a long period of time in the foreground. As such, use of the mean or
      tail values are not recommended.
    </summary>
  </metric>
  <metric name="PageTiming.NavigationToFailedProvisionalLoad">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the provisional load failed. Only measures provisional
      loads that failed in the foreground.
    </summary>
  </metric>
  <metric name="PageTiming.TotalForegroundDurationMs">
    <summary>
      The total amount of time the page spent in the foreground, in
      milliseconds. Note that this metric adds all foreground durations
      occurring for the page. For example: if the page starts foregrounded
      during 1 second, then goes to the background for a while, then is
      foregrounded again for 2 seconds, and then is unloaded, this metric
      reports 3 seconds. To see metrics about consecutive foreground sessions,
      see the PageForegroundSession event instead. This metric is recorded at
      the end of each page load. As usual with PageLoad metrics, we consider app
      backgrounding on Android to be the end of page load as well as the app
      could be evicted by Android anytime after that happens.
    </summary>
  </metric>
  <metric name="PaintTiming.FirstContentfulPaintSubmittedMs">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the first contentful paint was rendered by Blink and
      submitted to the compositor (but not yet presented on screen).
    </summary>
  </metric>
  <metric name="PaintTiming.JsCompositionCompleteMs">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time Lit DOM composition completes.
    </summary>
  </metric>
  <metric name="PaintTiming.JsResourcesLoadedMs">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time WebUI JS resources have evaluated.
    </summary>
  </metric>
  <metric name="PaintTiming.LoadTimeDataReadMs">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time loadTimeData initial state is parsed.
    </summary>
  </metric>
  <metric name="PaintTiming.NavigationToFirstContentfulPaint">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints content. A contentful paint
      includes a paint of text, image, SVG, or canvas. Log of major changes:
      http://bit.ly/chrome-speed-metrics-changelog
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PaintTiming.NavigationToFirstPaint">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the first paint is performed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ParseTiming.NavigationToParseStart">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the parser started, for main frame documents.
    </summary>
  </metric>
  <metric name="SiteInstanceRenderProcessAssignment"
      enum="SiteInstanceProcessAssignment">
    <summary>
      Records how the main frame's site instance was assigned to a renderer
      process.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WasCached">
    <summary>
      Set to 1 if the main resource was served from cache.
    </summary>
  </metric>
</event>

<event name="InputMethod.Assistive.AutocorrectV2">
  <owner>mehrab@google.com</owner>
  <summary>
    Metrics recording a summary of user interactions with Autocorrect feature.
    The event is recorded whenever an autocorrect suggestion is shown or a user
    interacted with a suggestion to accept or reject it.
  </summary>
  <metric name="CompatibilitySummary.PK"
      enum="IMEAutocorrectCompatibilitySummary">
    <summary>
      A summary of interactions with Physical Keyboard Autocorrect suggestions
      for the purpose of identifying App Compatibility issues.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CompatibilitySummary.VK"
      enum="IMEAutocorrectCompatibilitySummary">
    <summary>
      A summary of interactions with Virtual Keyboard Autocorrect suggestions
      for the purpose of identifying App Compatibility issues.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="InputMethod.Assistive.Match">
  <owner>jiwan@chromium.org</owner>
  <summary>
    Recorded when an assistive action could be triggered according to the
    surrounding text.
  </summary>
  <metric name="Type" enum="IMEAssistiveAction">
    <summary>
      The type of the assistive suggestion which is triggered.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="InputMethod.LongpressDiacritics">
  <owner>jopalmer@google.com</owner>
  <owner>essential-inputs-team@google.com</owner>
  <summary>
    Recorded when a user uses the long press diacritics feature to insert
    diacritics via long press with a physical keyboard.
  </summary>
  <metric name="Actions" enum="IMEPKLongpressDiacriticAction">
    <summary>
      Action taken by the user to interact with this feature.
    </summary>
  </metric>
</event>

<event name="InputMethod.Manta.Orca">
  <owner>curtismcmullan@google.com</owner>
  <summary>
    Metrics recording a summary of critical user interactions with the Editor
    feature. The event is recorded whenever a user triggers a critical event in
    the Editor funnel (specifically; the UI is shown, a request is triggered, or
    a user inserts some suggested text).
  </summary>
  <metric name="EditorCriticalStates" enum="IMEEditorCriticalStates">
    <summary>
      A summary of interactions with the Editor feature for the purpose of
      identifying common contexts where the feature is used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="InputMethod.NonCompliantApi">
  <owner>shend@chromium.org</owner>
  <summary>
    Metrics indicating what Input Method Editor (IME) operations are behaving
    incorrectly on an input field. This event is recorded whenever an IME
    operation is executed on the input field but the result does not match the
    IME's expectations (e.g. IME wants to insert 'a' but the input field
    inserted 'b' instead).
  </summary>
  <metric name="NonCompliantOperation" enum="InputMethodApiOperation">
    <summary>
      The operation that behaved incorrectly.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="InstalledRelatedApps">
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    Recorded before resolving a call to navigator.getInstalledRelatedApps().
  </summary>
  <metric name="Called">
    <summary>
      Always true.
    </summary>
  </metric>
</event>

<event name="IOS.ExperienceKitCalendar.Present">
  <owner>nicolasmacbeth@google.com</owner>
  <owner>bling-alchemy-eng@google.com</owner>
  <summary>
    Logged when the user chooses one of the calendar types on the ExperienceKit
    context menu.
  </summary>
  <metric name="CalendarType" enum="ExperienceKitCalendarTypes">
    <summary>
      The type of calendar provider the user chose.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ExperienceKitCalendar.Success">
  <owner>nicolasmacbeth@google.com</owner>
  <owner>bling-alchemy-eng@google.com</owner>
  <summary>
    Logged when the user successfully adds an event to one of the calendar
    providers in ExperienceKit.
  </summary>
  <metric name="CalendarType" enum="ExperienceKitCalendarTypes">
    <summary>
      The type of calendar provider the user chose.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.FindInPageSearchMatches">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>michaeldo@chromium.org</owner>
  <summary>
    Logged when the FindInPage returns a user search request result. Starting
    from M111, this is only logged at the end of the Find session i.e. when the
    Find UI is dismissed.
  </summary>
  <metric name="HasMatches" enum="Boolean">
    <summary>
      True if there were matches.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.FullscreenActions">
  <owner>ajuma@chromium.org</owner>
  <owner>alionadangla@chromium.org</owner>
  <summary>
    Logged when a user exited the fullscreen mode when browsing a web page in
    iOS.
  </summary>
  <metric name="HasExitedManually" enum="Boolean">
    <summary>
      True if the user tapped on the top toolbar to exit and false if they
      exited it in any other way.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ModelPageClassification">
  <owner>amarjotgill@chromium.org</owner>
  <owner>bling-ai-foundations@google.com</owner>
  <summary>
    Recorded when a page is classified.
  </summary>
  <metric name="BestMatchCategory" enum="PageClassificationCategory">
    <summary>
      The category ID that was the best match.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="BestMatchConfidence">
    <summary>
      The confidence score (0-100) of the best match.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceCar">
    <summary>
      Confidence score (0-100) for Car Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceClothes">
    <summary>
      Confidence score (0-100) for Clothes Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceFlight">
    <summary>
      Confidence score (0-100) for Flight Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceHotel">
    <summary>
      Confidence score (0-100) for Hotel Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceJob">
    <summary>
      Confidence score (0-100) for Job Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceNews">
    <summary>
      Confidence score (0-100) for News Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceNone">
    <summary>
      Confidence score (0-100) for None/Unknown.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ConfidenceRestaurant">
    <summary>
      Confidence score (0-100) for Restaurant Search.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasAPC" enum="Boolean">
    <summary>
      Whether Annotated Page Content (text) was successfully extracted.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ShouldTryOn" enum="Boolean">
    <summary>
      Is this something to try on.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ShouldViewInRoom" enum="Boolean">
    <summary>
      Is this an item to view in your room or house.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.PageAddedToReadingList">
  <owner>thegreenfrog@chromium.org</owner>
  <summary>
    Logged when the user adds a page to the Reading List.
  </summary>
  <metric name="AddedFromMessages" enum="Boolean">
    <summary>
      True if the page was added by the user tapping on the Messages prompt to
      save to Reading List.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.PageReadability">
  <owner>thegreenfrog@chromium.org</owner>
  <summary>
    Logged when the Distilibility score of the current page is returned and the
    Reading List Message is shown. Muliplied by 10X to get tenth digit
    granularity. 0.1 granularity will be recorded for scores between 0.5 and
    1.5. Otherwise, the granularity will be 0.5.
  </summary>
  <metric name="DidAccept" enum="Boolean">
    <summary>
      True if the user tapped on the Messages prompt to save the current page to
      Reading List.
    </summary>
  </metric>
  <metric name="DistilibilityLongScore">
    <summary>
      Distilibility score value indicating the &quot;long readability&quot; of
      the page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DistilibilityScore">
    <summary>
      Distilibility score value indicating the &quot;readability&quot; of the
      page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.PageZoomChanged">
  <owner>rkgibson@google.com</owner>
  <summary>
    Logged when the user changes their zoom level on iOS.
  </summary>
  <metric name="ContentSizeCategory" enum="IOSContentSizeCategory">
    <summary>
      The content size category the user is currently using.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="OverallZoomLevel">
    <summary>
      The overall zoom level. This is based on a combination of the user zoom
      level and a multiplier from the user's content size category.
    </summary>
  </metric>
  <metric name="UserZoomLevel">
    <summary>
      The current zoom multiplier (percentage-based, with 100 -&gt; 100%) the
      user has chosen.
    </summary>
  </metric>
</event>

<event name="IOS.ParcelTrackingNumberDetected">
  <owner>thegreenfrog@chromium.org</owner>
  <owner>huitingyu@google.com</owner>
  <summary>
    Logged when the current page has a valid parcel tracking number in the HTML
    of the initial page load.
  </summary>
  <metric name="ParcelCarrier" enum="IOSParcelCarrier">
    <summary>
      The parcel carrier for the parcel number detected. As a privacy measure,
      80% of the time when the event occurs, a random enum value is assigned.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ReaderMode.Distiller.Latency" singular="true">
  <owner>fernandex@google.com</owner>
  <owner>qpubert@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Records
    the latency of running the DOMDistiller distillation to evaluate its
    performance.
  </summary>
  <metric name="Latency">
    <summary>
      Records duration in milliseconds from when the page distillation is
      triggered to when the JavaScript distillation code completes.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ReaderMode.Distiller.Result" singular="true">
  <owner>fernandex@google.com</owner>
  <owner>qpubert@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Records
    the result of running the DOMDistiller distillation to evaluate its
    performance.
  </summary>
  <metric name="Result" enum="ReaderModeDistillerResult">
    <summary>
      Records the page distillation result i.e. distillable or not distillable.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ReaderMode.Heuristic.Latency" singular="true">
  <owner>fernandex@google.com</owner>
  <owner>qpubert@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads) if the
    latency data is available. Records the latency of running the DOMDistiller
    heuristic to evaluate its performance.
  </summary>
  <metric name="Latency">
    <summary>
      Records duration in milliseconds from when the heuristic JavaScript is
      executed to when all required feature values for the model are collected.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ReaderMode.Heuristic.Result" singular="true">
  <owner>fernandex@google.com</owner>
  <owner>qpubert@google.com</owner>
  <summary>
    Recorded for a subset of page loads (default: 1/1000 page loads). Describes
    the result of running the DOMDistiller heuristic to evaluate its
    performance.
  </summary>
  <metric name="Result" enum="ReaderModeHeuristicResult">
    <summary>
      Records the page distillation heuritic result i.e. kMalformedResponse,
      kReaderModeEligible, kReaderModeNotEligibleContentOnly,
      kReaderModeNotEligibleContentLength,
      kReaderModeNotEligibleContentAndLength.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.ReaderMode.ReaderModeShown.AccessPoint" singular="true">
  <owner>fernandex@google.com</owner>
  <owner>qpubert@google.com</owner>
  <summary>
    Records when Reading Mode UI was successfully displayed to the user.
    Recorded for iOS interactions only.
  </summary>
  <metric name="AccessPoint" enum="ReaderModeAccessPoint">
    <summary>
      The access point that triggered the Reading Mode UI that is shown for the
      current page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="IOS.RendererGone">
  <owner>olivierrobin@chromium.org</owner>
  <summary>
    Logged when WKWebView process is reported gone. Metrics will give
    information of the context in which some website present sad tabs. It will
    help debug some renderer issues either in Chrome or in WebKit.
  </summary>
  <metric name="AliveRecentlyRendererCount">
    <summary>
      The number of WKWebView alive in the last 2 seconds.
    </summary>
  </metric>
  <metric name="AliveRendererCount">
    <summary>
      The number of WKWebView alive at the moment this renderer is gone.
    </summary>
  </metric>
  <metric name="InForeground" enum="TabForegroundState">
    <summary>
      Whether the app/tab was in foregound or background. 0: tab in foreground,
      app in foreground, 1: tab in background, app in foreground, 2: tab in
      foreground, app in background, 3: tab in background, app in background.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SawMemoryWarning" enum="Boolean">
    <summary>
      Whether a memory warning was received less than 5 seconds before the
      renderer process is gone.
    </summary>
  </metric>
</event>

<event name="JavascriptFrameworkPageLoad" singular="True">
  <owner>houssein@chromium.org</owner>
  <owner>npm@chromium.org</owner>
  <summary>
    Metrics stating whether the main frame of a page uses certain JavaScript
    frameworks. This event is recorded when the page is going to be unloaded or
    when the app enters the background on Android. The framework detection is
    done when the document is loaded (similar to when load event is fired). If a
    framework is used after this then it would not be detected. Note that a page
    can use multiple frameworks at the same time, hence why this reports each
    framework individually instead of a single enum.
  </summary>
  <metric name="AngularPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Angular JavaScript
      framework.
    </summary>
  </metric>
  <metric name="GatsbyPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Gatsby JavaScript
      framework.
    </summary>
  </metric>
  <metric name="MediaPipePageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the MediaPipe JavaScript
      framework.
    </summary>
  </metric>
  <metric name="NextJSPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Next.js JavaScript
      framework.
    </summary>
  </metric>
  <metric name="NuxtJSPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Nuxt.js JavaScript
      framework.
    </summary>
  </metric>
  <metric name="PreactPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Preact JavaScript
      framework.
    </summary>
  </metric>
  <metric name="ReactPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the React JavaScript
      framework.
    </summary>
  </metric>
  <metric name="SapperPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Sapper JavaScript
      framework.
    </summary>
  </metric>
  <metric name="SveltePageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Svelte JavaScript
      framework.
    </summary>
  </metric>
  <metric name="TFJSPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the TensorflowJS framework.
    </summary>
  </metric>
  <metric name="TransformersJSPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Transformers.js
      framework.
    </summary>
  </metric>
  <metric name="VuePageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the Vue JavaScript
      framework.
    </summary>
  </metric>
  <metric name="VuePressPageLoad" enum="Boolean">
    <summary>
      True if the page loaded in the main frame uses the VuePress JavaScript
      framework.
    </summary>
  </metric>
</event>

<event name="Lens.Overlay.ContextualSearchbox.FocusedInSession">
  <owner>niharm@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the Lens Overlay feature is dismissed, sliced by page
    content type. Records whether the contextual searchbox was focused at least
    once in sessions in which it was shown.
  </summary>
  <metric name="FocusedInSession" enum="Boolean">
    <summary>
      Whether the searchbox was focused in the session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PageContentType" enum="MimeType">
    <summary>
      Focused in session sliced by page content type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.ContextualSearchBox.ShownInSession">
  <owner>mercerd@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the Lens Overlay feature is dismissed. Records whether
    the contextual searchbox was shown in the session.
  </summary>
  <metric name="PageContentType" enum="MimeType">
    <summary>
      The page content type the contextual searchbox was shown on.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WasShown" enum="Boolean">
    <summary>
      Whether the search box was shown.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.ContextualSuggest.QueryIssuedInSession">
  <owner>niharm@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the Lens Overlay feature is dismissed, sliced by page
    content type. Records whether at least one contextual query was issued in
    sessions in which the contextual searchbox was shown (includes zero prefix
    suggest queries and typed queries). The page content type is the intial page
    type when the lens overlay is invoked, not necessarily the same as the page
    type as when ZPS is shown.
  </summary>
  <metric name="PageContentType" enum="MimeType">
    <summary>
      Query issued in session sliced by page content type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="QueryIssuedInSession" enum="Boolean">
    <summary>
      Whether a query was issued in the session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.ContextualSuggest.ZPS.ShownInSession">
  <owner>niharm@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the Lens Overlay feature is dismissed, sliced by page
    content type. Records whether any zero prefix contextual suggestions were
    shown in sessions in which the contextual searchbox was shown. The page
    content type is the intial page content type when the lens overlay is
    invoked, not necessarily the same as the page content type as when ZPS is
    shown.
  </summary>
  <metric name="PageContentType" enum="MimeType">
    <summary>
      ZPS shown in session sliced by page content type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ShownInSession" enum="Boolean">
    <summary>
      Whether ZPS was shown in the session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.ContextualSuggest.ZPS.SuggestionUsedInSession">
  <owner>niharm@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the Lens Overlay feature is dismissed, sliced by page
    content type. Records whether at least one contextual zero prefix suggestion
    was used in sessions in which the contextual searchbox was shown. The page
    content type is the intial page content type when the lens overlay is
    invoked, not necessarily the same as the page content type as when ZPS
    suggestion was used.
  </summary>
  <metric name="PageContentType" enum="MimeType">
    <summary>
      ZPS used in session sliced by page content type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SuggestionUsedInSession" enum="Boolean">
    <summary>
      Whether ZPS was used in the session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.Overlay.UserAction">
  <owner>jdonnelly@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded each time the user interactions with the Lens Overlay, enumerated
    by those actions.
  </summary>
  <metric name="UserAction" enum="LensOverlayUserAction">
    <summary>
      The user interaction with the Lens Overlay.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.SessionEnd">
  <owner>jdonnelly@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the Lens Overlay feature is dismissed. Measures the
    invocation source of the session, the duration, and whether a search
    performed in the session.
  </summary>
  <metric name="GeneratedTabCount">
    <summary>
      The number of tabs opened by the user during a Lens Overlay session. On
      iOS the Lens Overlay opens all non-lens URLs in new tabs. New unimodal
      searches are also opened in a new tab. Additionally the user can open tabs
      in the background through the web context menu.
    </summary>
  </metric>
  <metric name="InvocationDocumentType" enum="MimeType">
    <summary>
      The type of document the Lens Overlay was invoked on.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvocationResultedInSearch" enum="Boolean">
    <summary>
      Indicates whether or not a search was performed at any point since the
      overlay was invoked.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InvocationSource" enum="LensOverlayInvocationSource">
    <summary>
      The UI entry point used to invoke the Lens Overlay feature.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SessionDuration">
    <summary>
      Measures the elapsed time between when the overlay was invoked and when it
      was dismissed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SessionForegroundDuration">
    <summary>
      Measures the total time the Lens Overlay is in the foreground, between
      invocation and dismissal. Sum of all times that the overlay tab is
      returned to the foreground.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Lens.Overlay.TimeToFirstInteraction">
  <owner>jdonnelly@google.com</owner>
  <owner>lens-chrome@google.com</owner>
  <summary>
    Recorded once when the user first interacts with the overlay. Measures the
    elapsed time (ms) between when the overlay was invoked and when the user
    first interacts with the overlay. Nothing is logged when the user enters
    through the image context menu.
  </summary>
  <metric name="AllEntryPoints">
    <summary>
      Time to first interaction for all entry points.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="AppMenu">
    <summary>
      Time to first interaction when overlay invoked through the app menu.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ContentAreaContextMenuPage">
    <summary>
      Time to first interaction when overlay invoked through the page content
      area context menu.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ContentAreaContextMenuText">
    <summary>
      Time to first interaction when overlay invoked through the selected text
      context menu.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="FindInPage">
    <summary>
      Time to first interaction when overlay invoked through the find in page
      button.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="FirstInteractionType" enum="LensOverlayFirstInteractionType">
    <summary>
      The first interaction event type.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HomeworkActionChip">
    <summary>
      Time to first interaction when overlay invoked through the omnibox Lens
      homework page action suggestion.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Omnibox">
    <summary>
      Time to first interaction when overlay invoked through the omnibox.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="OmniboxContextualSuggestion">
    <summary>
      Time to first interaction when overlay invoked through the omnibox
      contextual suggestion.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="OmniboxPageAction">
    <summary>
      Time to first interaction when overlay invoked through the omnibox Lens
      page action suggestion.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Toolbar">
    <summary>
      Time to first interaction when overlay invoked through the toolbar.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="LoadCountsPerTopLevelDocument">
  <owner>fdoray@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Counts loads of each type that occurred on a top-level document. Recorded
    when a top-level document is unloaded. This can be used to diagnose changes
    to the &quot;Total pageloads&quot; shown on stability dashboard.

    Exponential bucketing is applied to all counts. The bucketing function
    preserves exact count up until 20.
  </summary>
  <metric name="NumMainFrameSameDocumentLoads_Hidden">
    <summary>
      Number of main frame same-document loads that occurred while the page was
      hidden.
    </summary>
  </metric>
  <metric name="NumMainFrameSameDocumentLoads_Visible">
    <summary>
      Number of main frame same-document loads that occurred while the page was
      visible.
    </summary>
  </metric>
  <metric name="NumSubFrameDifferentDocumentLoads_Hidden">
    <summary>
      Number of sub frame different-document loads that occurred while the page
      was hidden.
    </summary>
  </metric>
  <metric name="NumSubFrameDifferentDocumentLoads_Visible">
    <summary>
      Number of sub frame different-document loads that occurred while the page
      was visible.
    </summary>
  </metric>
  <metric name="NumSubFrameSameDocumentLoads_Hidden">
    <summary>
      Number of sub frame same-document loads that occurred while the page was
      hidden.
    </summary>
  </metric>
  <metric name="NumSubFrameSameDocumentLoads_Visible">
    <summary>
      Number of sub frame same-document loads that occurred while the page was
      visible.
    </summary>
  </metric>
</event>

<event name="LoadingPredictor" singular="true">
  <owner>sophiechang@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Metrics that reflect the accuracy of the predictions used by the Loading
    Predictor. This event will be recorded once per page load on
    DocumentOnLoadCompletedInPrimaryMainFrame().
  </summary>
  <metric name="CorrectSubresourceOriginPreconnectsInitiated">
    <summary>
      The number of subresource origin preconnects that were initiated by the
      Loading Predictor for the navigation and were actually used by the page
      load, excluding the main frame URL's origin. If more than 100 subresource
      origins were preconnected to and were actually used by the page load, this
      will be capped at 100.
    </summary>
  </metric>
  <metric name="CorrectSubresourcePrefetchesInitiated">
    <summary>
      The number of subresource prefetches that were initiated by the Loading
      Predictor for the navigation and were actually used by the page load. If
      more than 100 subresources were prefetched and were actually used by the
      page load, this will be capped at 100.
    </summary>
  </metric>
  <metric name="LocalPredictionCorrectlyPredictedOrigins">
    <summary>
      The number of subresource origins that were correctly predicted by the
      local prediction database. This will be recorded if there is a prediction
      available in the local prediction database and does not necessarily mean
      that the prediction was used. If more than 100 subresource origins were
      correctly predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric name="LocalPredictionOrigins">
    <summary>
      The number of subresource origins that were predicted locally. This will
      be recorded if there is a prediction available in the local prediction
      database and does not necessarily mean that the prediction was used. If
      more than 100 subresource origins were predicted, this will be capped at
      100.
    </summary>
  </metric>
  <metric name="NavigationStartToFirstSubresourcePrefetchInitiated">
    <summary>
      The time (in milliseconds) that elapsed between navigation start and the
      first subresource prefetch that was initiated based on these predictions.
    </summary>
  </metric>
  <metric name="NavigationStartToNavigationCommit">
    <summary>
      The time (in milliseconds) that elapsed between navigation start and the
      commit finished.
    </summary>
  </metric>
  <metric name="NavigationStartToOptimizationGuidePredictionArrived">
    <summary>
      The time (in milliseconds) that elapsed between navigation start and the
      optimization guide prediction arriving for the navigation.
    </summary>
  </metric>
  <metric
      name="OptimizationGuidePredictionCorrectlyPredictedLowPriorityOrigins">
    <summary>
      The number of predicted subresource origins that were only used by the
      page for low-priority subresource loads before it unloaded. This will be
      recorded if the Optimization Guide was consulted for the page load and the
      Optimization Guide had a prediction for it. If more than 100 subresource
      origins were correctly predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric
      name="OptimizationGuidePredictionCorrectlyPredictedLowPrioritySubresources">
    <summary>
      The number of predicted subresources that were only used by the page for
      low-priority subresource loads before it unloaded. This will be recorded
      if the Optimization Guide was consulted for the page load and the
      Optimization Guide had a prediction for it. If more than 100 subresources
      were predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric
      name="OptimizationGuidePredictionCorrectlyPredictedLowPrioritySubresources.CrossOrigin">
    <summary>
      The number of predicted cross-origin subresources that were only used by
      the page for low-priority subresource loads before it unloaded. This will
      be recorded if the Optimization Guide was consulted for the page load and
      the Optimization Guide had a prediction for it. If more than 100
      subresources were predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric name="OptimizationGuidePredictionCorrectlyPredictedOrigins">
    <summary>
      The number of subresource origins that were correctly predicted by the
      Optimization Guide. This only counts origins of high-priority subresources
      that are used before the page finishes loading. This will be recorded if
      the Optimization Guide was consulted for the page load and the
      Optimization Guide had a prediction for it. If more than 100 subresource
      origins were correctly predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric name="OptimizationGuidePredictionCorrectlyPredictedSubresources">
    <summary>
      The number of subresources that were correctly predicted by the
      Optimization Guide. This only counts high-priority subresources used
      before the page finishes loading. This will be recorded if the
      Optimization Guide was consulted for the page load and the Optimization
      Guide had a prediction for it. If more than 100 subresources were
      predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric
      name="OptimizationGuidePredictionCorrectlyPredictedSubresources.CrossOrigin">
    <summary>
      The number of cross-origin subresources that were correctly predicted by
      the Optimization Guide. This only counts high-priority subresources used
      before the page finishes loading. This will be recorded if the
      Optimization Guide was consulted for the page load and the Optimization
      Guide had a prediction for it. If more than 100 subresources were
      predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric name="OptimizationGuidePredictionDecision"
      enum="OptimizationGuideOptimizationGuideDecision">
    <summary>
      The decision coming from the Optimization Guide for whether there was a
      prediction available for the Page Load. This will be recorded if the
      Optimization Guide was consulted for the page load.
    </summary>
  </metric>
  <metric name="OptimizationGuidePredictionOrigins">
    <summary>
      The number of subresource origins that were predicted by the Optimization
      Guide. This will be recorded if the Optimization Guide was consulted for
      the page load and the Optimization Guide had a prediction for it. If more
      than 100 subresource origins were predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric name="OptimizationGuidePredictionSubresources">
    <summary>
      The number of subresources that were predicted by the Optimization Guide.
      This will be recorded if the Optimization Guide was consulted for the page
      load and the Optimization Guide had a prediction for it. If more than 100
      subresources were predicted, this will be capped at 100.
    </summary>
  </metric>
  <metric name="OptimizationGuidePredictionSubresources.CrossOrigin">
    <summary>
      The number of cross-origin subresources that were predicted by the
      Optimization Guide. This will be recorded if the Optimization Guide was
      consulted for the page load and the Optimization Guide had a prediction
      for it. If more than 100 subresources were predicted, this will be capped
      at 100.
    </summary>
  </metric>
  <metric name="SubresourceOriginPreconnectsInitiated">
    <summary>
      The number of subresource origins that were initiated by the Loading
      Predictor and were preconnected to, excluding the main frame URL's origin.
      If more than 100 subresource origins were preconnected to, this will be
      capped at 100.
    </summary>
  </metric>
  <metric name="SubresourcePrefetchesInitiated">
    <summary>
      The number of subresource prefetches that were initiated by the Loading
      Predictor for the navigation. If more than 100 subresources were
      prefetched, this will be capped at 100.
    </summary>
  </metric>
</event>

<event name="LoginDetectionV2" singular="True">
  <owner>yigu@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <owner>web-identity-eng@chromium.org</owner>
  <summary>
    Records the info about login detected for sites based on different
    heuristics. Recorded once per page load when OAuth login was detected on
    page load. Note: the first version of LoginDetection recorded all pageload
    types including password logins and no logins etc.
  </summary>
  <metric name="Page.LoginType" enum="LoginDetectionType">
    <summary>
      An enum for representing the different ways of user login to a site. At
      this moment only OAuth logins are recorded in UKM.
    </summary>
  </metric>
</event>

<event name="LoginDetectionV2IdentityProvider" singular="True">
  <owner>yigu@chromium.org</owner>
  <owner>tbansal@chromium.org</owner>
  <owner>web-identity-eng@chromium.org</owner>
  <summary>
    Records the OAuth provider info about login detected for sites based on
    different heuristics. Recorded once per page load when OAuth login was
    detected on page load. Note: the first version of LoginDetection recorded
    all pageload types including password logins and no logins etc.
  </summary>
  <metric name="Page.LoginType" enum="LoginDetectionType">
    <summary>
      An enum for representing the different ways of user login to a site. At
      this moment only OAuth logins are recorded in UKM.
    </summary>
  </metric>
</event>

<event name="LookalikeUrl.NavigationSuggestion" singular="True">
  <owner>meacer@chromium.org</owner>
  <owner>cthomp@chromium.org</owner>
  <summary>
    Metrics recorded when a navigated URL's domain name is visually similar to a
    popular domain or a domain that the user engaged with.
  </summary>
  <metric name="MatchType">
    <summary>
      An enum value representing the type of the match (popular domain, engaged
      domain, etc.). The enum is defined in |LookalikeUrlBlockingPage|.
    </summary>
  </metric>
  <metric name="TriggeredByInitialUrl" enum="Boolean">
    <summary>
      A boolean representing whether or not the warning was triggered by the
      first URL in the chain, or whether the warning was triggered by the final
      (committed) URL.
    </summary>
  </metric>
  <metric name="UserAction">
    <summary>
      An enum value representing the decision the user made when shown an
      interstitial (ignored, suggestion_accepted, etc.). The enum is defined in
      |LookalikeUrlBlockingPage|.
    </summary>
  </metric>
</event>

<event name="MainFrameNavigation" singular="True">
  <owner>thegreenfrog@chromium.org</owner>
  <summary>
    Metric associated with a main frame navigation. Currently implemented only
    on iOS.
  </summary>
  <metric name="DidCommit" enum="Boolean">
    <summary>
      Set to 1 if the navigation successfully committed.
    </summary>
  </metric>
</event>

<event name="MainFrameNavigation.ZstdContentEncoding">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Event recorded on navigation commit when a page load is content-encoded with
    zstd and is a main frame navigation.
  </summary>
  <metric name="UsedZstd" enum="Boolean">
    <summary>
      Set to 1 if the main frame served zstd-compressed content.
    </summary>
  </metric>
</event>

<event
    name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.BrowserInitiated">
  <owner>bkeen@google.com</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when browser-initiated automatic picture-in-picture is triggered.
    This can be a dry run (the feature is enabled, but the action is not taken),
    or it can result in entering picture-in-picture. This event allows analysis
    of the feature impact.
  </summary>
  <metric name="IsDryRun" enum="Boolean">
    <summary>
      True if the event was a dry run, meaning the feature was enabled but the
      action was not taken. False if the browser actually entered
      picture-in-picture.
    </summary>
  </metric>
</event>

<event
    name="Media.AutoPictureInPicture.EnterPictureInPicture.AutomaticReason.PromptResultV2">
  <owner>bkeen@google.com</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Recorded when the user either selects an option from the Automatic
    picture-in-picture permission prompt, or when the user manually closes the
    picture-in-picture window without responding to the prompt, or when we
    decide to not show the prompt at all. When the prompt is shown, this records
    their selection (or &quot;Ignored&quot; if they did not select an option).
    When the prompt is not shown, records why it was not shown. Note that
    although &quot;Not shown because incognito&quot; is part of the
    MediaAutoPictureInPicturePromptResult enum, UKMs are not collected in
    incognito.
  </summary>
  <metric name="BrowserInitiated" enum="MediaAutoPictureInPicturePromptResult">
    <summary>
      Prompt result for entering picture in picture automatically due to browser
      initiated auto picture in picture.
    </summary>
  </metric>
  <metric name="MediaPlayback" enum="MediaAutoPictureInPicturePromptResult">
    <summary>
      Prompt result for entering picture in picture automatically due to
      &quot;MediaPlayback&quot;.
    </summary>
  </metric>
  <metric name="VideoConferencing" enum="MediaAutoPictureInPicturePromptResult">
    <summary>
      Prompt result for entering picture in picture automatically due to
      &quot;VideoConferencing&quot;.
    </summary>
  </metric>
</event>

<event name="Media.Autoplay.Attempt">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when there is an attempt to autoplay (ie. no user gesture).
    It will be recorded regardless of the result of this attempt.
  </summary>
  <metric name="AudioTrack" enum="Boolean">
    <summary>
      Whether the element had an audio track when autoplay was attempted.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HighMediaEngagement" enum="Boolean">
    <summary>
      Whether the document has a high media engagement.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Muted" enum="Boolean">
    <summary>
      Whether the element was muted when autoplay was attempted.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Source" enum="AutoplaySource">
    <summary>
      Source of the autoplay attempt: 0 for attribute; 1 for play().
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserGestureRequired" enum="Boolean">
    <summary>
      Whether a user gesture was required per autoplay rules at the time of
      attempt. By definition there is no user gesture on the stack when the
      attempt is registered.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UserGestureStatus" enum="AutoplayUserGestureStatus">
    <summary>
      Reflects the current status of user gesture/activation. This is a bit
      field with the following values: - 0b0001 if there is a user gesture on
      the stack; - 0b0010 if there was a user gesture on the page (ie. was
      activated); - 0b0100 if there was a user gesture propagated after a
      navigation.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="VideoTrack" enum="Boolean">
    <summary>
      Whether the element had a video track when autoplay was attempted.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.Autoplay.AudioContext">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records the AudioContext autoplay information.
  </summary>
  <metric name="SourceNodeStarted">
    <summary>
      A boolean indicating if start() was called for any source node associated
      to the AudioContext.
    </summary>
  </metric>
  <metric name="Status">
    <summary>
      Status of this AudioContext when the autoplay policy applies. It will
      match the values from AudioContext::AutoplayStatus.
    </summary>
  </metric>
  <metric name="UnlockType">
    <summary>
      How the AudioContext was unlocked if it was. It will match the values from
      AudioContext::AutoplayUnlockType unless the AudioContext was never
      unlocked in which case it will be equal to -1.
    </summary>
  </metric>
</event>

<event name="Media.Autoplay.Muted.UnmuteAction">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when there is an attempt to unmute an media that was
    autoplaying following the rules of autoplay muted.
  </summary>
  <metric name="Result">
    <summary>
      0 means that the unmute failed because it happened without a user gesture.
      1 means that it succeeded because it had a user gesture.
    </summary>
  </metric>
  <metric name="Source">
    <summary>
      Similar to &quot;Source&quot; in &quot;Media.Autoplay.Attempt&quot; with
      the addition of a value for both sources being used: 0 for attribute; 1
      for play(); 2 for both attempted.
    </summary>
  </metric>
</event>

<event name="Media.BasicPlayback">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Core metrics associated with a media playback through WebMediaPlayerImpl.
    Reported at the time of WatchTimeRecorder destruction or render process
    termination; whichever comes first. There will be multiple entries for a
    given playback; one for every PlaybackProperties change as well as one for
    foreground and background. Records may be aggregated based on PlayerID and
    correlated with the Media.WebMediaPlayerState event.
  </summary>
  <metric name="AudioCodec" enum="AudioCodec">
    <summary>
      media::AudioCodec enum value. Can be kUnknownAudioCodec even when HasAudio
      is true because we don't always know the codec.
    </summary>
  </metric>
  <metric name="AudioCodecProfile" enum="AudioCodecProfile">
    <summary>
      media::AudioCodecProfile enum value. Can be AudioCodecProfile::kUnknown
      even when HasAudio is true because we don't always know the codec profile.
    </summary>
  </metric>
  <metric name="AudioDecoderName" enum="AudioDecoderType">
    <summary>
      Enumeration of audio decoder implementations, zero if none or unknown
      (Cast, HLS, etc). See AudioDecoderType (media/base/decoder.h) for expected
      values.
    </summary>
  </metric>
  <metric name="AudioEncryptionScheme" enum="EncryptionScheme">
    <summary>
      media::EncryptionScheme enum value (media/base/encryption_scheme.h). Can
      be kUnencrypted if IsEME is false or if the audio track is unencrypted.
    </summary>
  </metric>
  <metric name="AutoplayInitiated" enum="Boolean">
    <summary>
      Boolean value indicating whether the initial playback was initiated via
      autoplay. Multilpe chunk records of the same player should have the same
      value. Autoplay is defined as a playback starting before there was a user
      activation on the page or without a user initiated same-domain navigation.
    </summary>
  </metric>
  <metric name="CompletedRebuffersCount">
    <summary>
      Integer count of the number of times a previous rebuffer succeeded and
      playback continued.
    </summary>
  </metric>
  <metric name="CompletedRebuffersDuration">
    <summary>
      Sum in milliseconds of all completed rebuffering events. Only reported if
      a rebuffering completion occurred.
    </summary>
  </metric>
  <metric name="Duration">
    <summary>
      Duration in milliseconds, rounded to the most significant digit, of the
      media being played. May be missing if the duration is unknown or infinite.
    </summary>
  </metric>
  <metric name="HasAudio" enum="Boolean">
    <summary>
      Boolean value indicating the presence of audio.
    </summary>
  </metric>
  <metric name="HasVideo" enum="Boolean">
    <summary>
      Boolean value indicating the presence of video.
    </summary>
  </metric>
  <metric name="IsBackground" enum="Boolean">
    <summary>
      Boolean value indicating if this event is for a background playback.
    </summary>
  </metric>
  <metric name="IsEME" enum="Boolean">
    <summary>
      Boolean value indicating if this event is for an EME playback.
    </summary>
  </metric>
  <metric name="IsMSE" enum="Boolean">
    <summary>
      Boolean value indicating if this event is for an MSE playback. If false it
      means this was a SRC playback.
    </summary>
  </metric>
  <metric name="IsMuted" enum="Boolean">
    <summary>
      Boolean value indicating if this event is for a muted playback.
    </summary>
  </metric>
  <metric name="IsTopFrame" enum="Boolean">
    <summary>
      Flag indicating whether the report comes from the top frame or some inner
      frame. For privacy, metrics from inner frames are recorded with the top
      frame's origin, so this flag helps separate top frame vs. embedded
      playbacks.
    </summary>
  </metric>
  <metric name="LastPipelineStatus" enum="PipelineStatus">
    <summary>
      media::PipelineStatusCodes enum value (media/base/pipeline_status.h).
      Always 0 if the playback succeeded; all other values indicate the playback
      ended in an error.
    </summary>
  </metric>
  <metric name="MeanTimeBetweenRebuffers">
    <summary>
      Average number of milliseconds between rebuffering events. Only reported
      if a rebuffering event occurred. Computed by dividing total watch time by
      the number of rebuffering events.
    </summary>
  </metric>
  <metric name="MediaStreamType" enum="MediaStreamType">
    <summary>
      Enum value indicating the type of MediaStream if the playback is from a
      MediaStream, or kNonMediaStream otherwise.
    </summary>
  </metric>
  <metric name="PlayerID">
    <summary>
      ID which corresponds to a given WebMediaPlayerImpl instance. May be linked
      with Media.WebMediaPlayerState events to understand playback more deeply.
    </summary>
  </metric>
  <metric name="RebuffersCount">
    <summary>
      Integer count of the number of times playback experienced rebuffering.
    </summary>
  </metric>
  <metric name="RendererType" enum="MediaRendererType">
    <summary>
      Type of media::Renderer used for the playback. In most cases we do not
      support dynamically changing RendererType during one playback.
    </summary>
  </metric>
  <metric name="VideoCodec" enum="VideoCodec">
    <summary>
      media::VideoCodec enum value. Can be kUnknownVideoCodec even when HasVideo
      is true because we don't always know the codec.
    </summary>
  </metric>
  <metric name="VideoCodecProfile" enum="VideoCodecProfile">
    <summary>
      media::VideoCodecProfile enum value. Can be VIDEO_CODEC_PROFILE_UNKNOWN
      even when HasVideo is true because we don't always know the codec profile.
    </summary>
  </metric>
  <metric name="VideoDecoderName" enum="VideoDecoderType">
    <summary>
      Enumeration of video decoder implementations, zero if none or unknown
      (Cast, HLS, etc). See VideoDecoderType (media/base/decoder.h) for expected
      values.
    </summary>
  </metric>
  <metric name="VideoEncryptionScheme" enum="EncryptionScheme">
    <summary>
      media::EncryptionScheme enum value (media/base/encryption_scheme.h). Can
      be kUnencrypted if IsEME is false or if the video track is unencrypted.
    </summary>
  </metric>
  <metric name="VideoFramesDecoded">
    <summary>
      Integer count of the video frames decoded in this record.
    </summary>
  </metric>
  <metric name="VideoFramesDropped">
    <summary>
      Integer count of the video frames dropped in this record. Should not
      exceed VideoFramesDecoded.
    </summary>
  </metric>
  <metric name="VideoNaturalHeight">
    <summary>
      Integer value indicating the natural height of the playback.
    </summary>
  </metric>
  <metric name="VideoNaturalWidth">
    <summary>
      Integer value indicating the natural width of the playback.
    </summary>
  </metric>
  <metric name="WatchTime">
    <summary>
      Watch time in milliseconds for this playback. See Media.WatchTime UMA
      metrics.
    </summary>
  </metric>
  <metric name="WatchTime.AC">
    <summary>
      Watch time on AC power in milliseconds for this playback. See
      Media.WatchTime UMA metrics.
    </summary>
  </metric>
  <metric name="WatchTime.AutoPip">
    <summary>
      Watch time for automatic picture in picture. Only reported for the
      &quot;media playback&quot; automatic picture in picture reason, regardless
      of the picture in picture window type: document vs. video.
    </summary>
  </metric>
  <metric name="WatchTime.Battery">
    <summary>
      Watch time on battery power in milliseconds for this playback. See
      Media.WatchTime UMA metrics.
    </summary>
  </metric>
  <metric name="WatchTime.DisplayFullscreen">
    <summary>
      Watch time for fullscreen in milliseconds for this playback. See
      Media.WatchTime UMA metrics. Only reported for foreground playbacks.
    </summary>
  </metric>
  <metric name="WatchTime.DisplayInline">
    <summary>
      Watch time for inline display in milliseconds for this playback. See
      Media.WatchTime UMA metrics. Only reported for foreground playbacks.
    </summary>
  </metric>
  <metric name="WatchTime.DisplayPictureInPicture">
    <summary>
      Watch time for picture in picture display in milliseconds for this
      playback. See Media.WatchTime UMA metrics. Only reported for foreground
      playbacks.
    </summary>
  </metric>
  <metric name="WatchTime.NativeControlsOff">
    <summary>
      Watch time with no controls in milliseconds for this playback. See
      Media.WatchTime UMA metrics. Only reported for foreground playbacks.
    </summary>
  </metric>
  <metric name="WatchTime.NativeControlsOn">
    <summary>
      Watch time with native controls in milliseconds for this playback. See
      Media.WatchTime UMA metrics. Only reported for foreground playbacks.
    </summary>
  </metric>
</event>

<event name="Media.EME.ApiPromiseRejection">
  <owner>xhwang@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when an Encrypted Media Extensions (EME) API promise is
    rejected. In most cases this indicates a failure.
  </summary>
  <metric name="Api" enum="EmeApiType">
    <summary>
      The EME API for which the promise is rejected.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystem" enum="MediaKeySystem">
    <summary>
      The key system associated with the current CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SystemCode" enum="CdmSystemCode">
    <summary>
      A CDM specific code providing more details about the cause of rejection.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UseHardwareSecureCodecs" enum="Boolean">
    <summary>
      Whether hardware secure codecs are required for the current CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.EME.CdmMetrics">
  <owner>frs@chromium.org</owner>
  <owner>vpasupathy@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Metrics reported by the CDM to the browser, collected in an utility process.
    This metric is reported every time on the destruction of the CdmAdapter
    object. Some fields of this metric can be left unset if the CDM does not
    report them.
  </summary>
  <metric name="CertificateSerialNumber">
    <summary>
      The certificate serial number used by the main url given by the CDM server
      certificate. Different Key systems will report the serial number in
      different ways.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DecoderBypassBlockCount">
    <summary>
      The number of blocks that can bypass the decoder present in an encrypted
      playback.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DecoderCheck1ErrorCount">
    <summary>
      The number of video frames that returned an error result when running
      decoder check1 in an encrypted playback.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DecoderCheck1SuccessCount">
    <summary>
      The number of video frames that returned a successful result when running
      decoder check1 in an encrypted playback.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DecoderCheck1WarningCount">
    <summary>
      The number of video frames that returned a warning result when running
      decoder check1 in an encrypted playback.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystemDataBool1">
    <summary>
      Whether or not the Key System is reporting true for bool 1. This is a
      general metric that is mapped to specific Key System data.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystemDataTime1">
    <summary>
      The time in seconds since the unix epoch for the date of the creation of
      time 1. This is a general metric that is mapped to specific Key System
      data.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystemDataTime2">
    <summary>
      The time in seconds since the unix epoch for the date of the creation of
      time 2. This is a general metric that is mapped to specific Key System
      data.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystemDataTime3">
    <summary>
      The time in seconds since the unix epoch for the date of the creation of
      time 3. This is a general metric that is mapped to specific Key System
      data.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LicenseSdkVersion">
    <summary>
      The SDK version of the license server of the URL that communicates with
      the CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NumberOfOnMessageEvents">
    <summary>
      The number of OnMessage events for the CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NumberOfUpdateCalls">
    <summary>
      The number of Update events for the CDM
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NumberOfVideoFrames">
    <summary>
      The number of video frames in an encrypted playback.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SessionInitDataType">
    <summary>
      The type of initialization data used in the CDM session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.EME.CdmSystemCode">
  <owner>vpasupathy@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded whenever CDM reports changed associated with keys for
    MediaKeySession.
  </summary>
  <metric name="CdmSystemCode">
    <summary>
      An integer corresponding to a system code for a singular key supplied by
      the CDM.
    </summary>
  </metric>
</event>

<event name="Media.EME.CreateMediaKeys">
  <owner>xhwang@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when createMediaKeys() is called as part of Encrypted Media
    Extensions (EME) API.
  </summary>
  <metric name="IsAdFrame" enum="Boolean">
    <summary>
      Whether the frame is an ad frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsCrossOrigin" enum="Boolean">
    <summary>
      Whether the frame is Cross-Origin to the main frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsTopFrame" enum="Boolean">
    <summary>
      Whether the frame is the main frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystem" enum="MediaKeySystemLegacy">
    <summary>
      The key system associated with this call.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.EME.GetStatusForPolicy">
  <owner>frs@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when the EME API GetStatusForPolicy promise is resolved.
  </summary>
  <metric name="IsAdFrame" enum="Boolean">
    <summary>
      Whether the frame is an ad frame. This is not set if the frame is null.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystem" enum="MediaKeySystem">
    <summary>
      The key system associated with the current CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MinHdcpVersion" enum="HdcpVersion">
    <summary>
      The minimum HDCP version requested for EME API GetStatusForPolicy.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UseHardwareSecureCodecs" enum="Boolean">
    <summary>
      Whether hardware secure codecs are required for the current CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.EME.RequestMediaKeySystemAccess">
  <owner>xhwang@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when RequestMediaKeySystemAccess() is called as part of
    Encrypted Media Extensions (EME) API.
  </summary>
  <metric name="IsAdFrame" enum="Boolean">
    <summary>
      Whether the frame is an ad frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsCrossOrigin" enum="Boolean">
    <summary>
      Whether the frame is Cross-Origin to the main frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsFromMediaCapabilities" enum="Boolean">
    <summary>
      Whether called by MediaCapabilities or not.
    </summary>
  </metric>
  <metric name="IsTopFrame" enum="Boolean">
    <summary>
      Whether the frame is the main frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystem" enum="MediaKeySystemLegacy">
    <summary>
      The key system passed in requestMediaKeySystemAccess() call.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="VideoCapabilities" enum="Boolean">
    <summary>
      Whether there are any &quot;videoCapabilities&quot;.
    </summary>
  </metric>
  <metric name="VideoCapabilities.HasEmptyRobustness" enum="Boolean">
    <summary>
      Whether there are any &quot;videoCapabilities&quot; with empty robustness.
    </summary>
  </metric>
  <metric name="VideoCapabilities.HasHwSecureAllRobustness" enum="Boolean">
    <summary>
      Whether there are any &quot;videoCapabilities&quot; with robustness being
      &quot;HW_SECURE_ALL&quot;.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.EME.Usage">
  <owner>jrummell@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when an Encrypted Media Extensions (EME) API is called.
  </summary>
  <metric name="Api" enum="EmeApiType">
    <summary>
      The EME API that is called.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsPersistentSession" enum="Boolean">
    <summary>
      For EME API calls done on MediaKeySession, whether the session is
      persistent or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="KeySystem" enum="MediaKeySystem">
    <summary>
      The key system associated with the current CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UseHardwareSecureCodecs" enum="Boolean">
    <summary>
      Whether hardware secure codecs are required for the current CDM.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.Engagement.SessionFinished">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The Media Engagement index stores the number of significant media playbacks
    per origin and the number of visits. From that we calculate a Media
    Engagement Score.

    To tweak the scoring function we are logging the total number of significant
    media playbacks, the total number of visits, the calculated engagement score
    and the new number of significant media playbacks that occurred this visit.
  </summary>
  <metric name="Engagement.IsHigh">
    <summary>
      Whether the Media Engagement Service considers the score to be high (we
      are using a two threshold approach so there is one threshold to be
      considered high and another one to lose that status to reduce jitter).
    </summary>
  </metric>
  <metric name="Engagement.Score">
    <summary>
      The calculated Media Engagement score for the current origin. The score is
      calculated by dividing the number of significant media playbacks by the
      number of visits. If the number of visits is below 5 then the score will
      be zero. This score is taken from MediaEngagementService.
    </summary>
  </metric>
  <metric name="Playbacks.Total">
    <summary>
      The total number of significant media playbacks on this origin.
    </summary>
  </metric>
  <metric name="Player.Audible.Delta">
    <summary>
      The number of unique audio/video players on a page that was audible (made
      sound) during a visit.
    </summary>
  </metric>
  <metric name="Player.Significant.Delta">
    <summary>
      The number of unique audio/video players on a page that was audible (made
      sound) and considered significant (played for at least 7 seconds) during a
      visit.
    </summary>
  </metric>
  <metric name="Visits.Total">
    <summary>
      The total number of visits to this origin.
    </summary>
  </metric>
</event>

<event name="Media.Engagement.ShortPlaybackIgnored">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    The Media Engagement index stores the number of significant media playbacks
    per origin and the number of audible players. From that we calculate a Media
    Engagement Score.

    Media with a short playback length is ignored so we are logging any time the
    player is ignored with the length in msec. This will allow us to identify
    whether sites are being penalized or there is abuse and allow us to tweak
    the length considered &quot;short&quot;.
  </summary>
  <metric name="Length"/>
</event>

<event name="Media.Feed.Discover">
  <owner>beccahughes@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Media Feeds are out of band feeds of media recommendations that are fetched
    by the browser. This records when we discover a feed that has been placed in
    a meta tag on a website.
  </summary>
  <metric name="HasMediaFeed">
    <summary>
      Whether the site has a media feed.
    </summary>
  </metric>
</event>

<event name="Media.GlobalMediaControls.ActionButtonPressed">
  <owner>steimel@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Records when a user presses a button in the Global Media Controls. Records
    no more than 100 actions per source per session. Records which button was
    pressed (e.g. play, pause, next track, picture-in-picture).
  </summary>
  <metric name="MediaSessionAction" enum="MediaSessionAction">
    <summary>
      The action of the button that was pressed (e.g. play, pause, next track,
      picture-in-picture).
    </summary>
  </metric>
</event>

<event name="Media.Learning.PredictionRecord">
  <owner>liberato@chromium.org</owner>
  <summary>
    A record of some predicted value vs. an observation. If the prediction is
    for a regression-style task (e.g., &quot;predict a number&quot; rather than
    &quot;predict an enum value&quot;), then the predicted and observed values
    are the numeric values, scaled by default to be in the integer range 0-100.

    The exact scaling used depends on the particular regression problem. Please
    see the LearningTask structure for the task of interest to find out how it
    maps values into the [0, 100] output range.

    A record is created for every prediction separately.

    For example, in the MediaCapabilities experiments, each playback generates a
    record. The predicted / observed values are the ratio of dropped to decoded
    frames, expressed as a percentage scaled to 0-100.
  </summary>
  <metric name="LearningTask">
    <summary>
      The learning task to which this record applies. This is a persistent hash
      of the |name| field in the LearningTask. Presumably, you'll want to
      include only records of a particular task when analyzing results.
    </summary>
  </metric>
  <metric name="ObservedValue">
    <summary>
      Observed value for this sample, scaled into the range [0, 100]. The exact
      scaling factor depends on the particular task.

      MediaCapabilities, for example, reports 100 * percentage_of_dropped_frames
      in this field.
    </summary>
  </metric>
  <metric name="PredictedValue">
    <summary>
      Predicted value for this sample, scaled into the range [0, 100]. The exact
      scaling factor depends on the particular task.

      MediaCapabilities, for example, reports 100 * percentage_of_dropped_frames
      in this field.
    </summary>
  </metric>
  <metric name="TrainingDataSize">
    <summary>
      Number of training examples that were used to train this model.
    </summary>
  </metric>
  <metric name="TrainingDataTotalWeight">
    <summary>
      Total weight of all examples that were used to train this model.
    </summary>
  </metric>
</event>

<event name="Media.SiteMuted" singular="True">
  <owner>steimel@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Event recorded when a website tries to play audio but is muted by the sound
    content setting.
  </summary>
  <metric name="MuteReason">
    <summary>
      Enum value giving the reason the site was muted. Defined as
      |SoundContentSettingObserver::MuteReason|.
    </summary>
  </metric>
</event>

<event name="Media.VideoDecodePerfRecord">
  <owner>chcunningham@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    A record of decoding performance metrics from a video playback with the
    given stream characteristics (profile, resolution, fps). Also includes what
    Media Capabilities API would claim for such a stream as a means of assessing
    the API's accuracy.
  </summary>
  <metric name="Perf.ApiWouldClaimIsPowerEfficient">
    <summary>
      Boolean signaling whether MediaCapabilities would classify streams with
      these characteristics as power efficient prior to considering this latest
      record. MediaCapabilities prediction is accurate when this value matches
      RecordIsPowerEfficient.
    </summary>
  </metric>
  <metric name="Perf.ApiWouldClaimIsSmooth">
    <summary>
      Boolean signaling whether MediaCapabilities would classify streams with
      these characteristics as smooth prior to considering this latest record.
      MediaCapabilities prediction is accurate when this value matches
      RecordIsSmooth.
    </summary>
  </metric>
  <metric name="Perf.PastVideoFramesDecoded">
    <summary>
      Integer count of past video frames decoded for the given video type.
    </summary>
  </metric>
  <metric name="Perf.PastVideoFramesDropped">
    <summary>
      Integer count of past video frames dropped for the given video type.
    </summary>
  </metric>
  <metric name="Perf.PastVideoFramesPowerEfficient">
    <summary>
      Integer count of past video frames power efficient for the given video
      type.
    </summary>
  </metric>
  <metric name="Perf.RecordIsPowerEfficient">
    <summary>
      Boolean signaling whether MediaCapabilities would classify this isolated
      playback record as power efficient.
    </summary>
  </metric>
  <metric name="Perf.RecordIsSmooth">
    <summary>
      Boolean signaling whether MediaCapabilities would classify this isolated
      playback record as smooth.
    </summary>
  </metric>
  <metric name="Perf.VideoFramesDecoded">
    <summary>
      Integer count of the video frames decoded in this record.
    </summary>
  </metric>
  <metric name="Perf.VideoFramesDropped">
    <summary>
      Integer count of the video frames dropped in this record. Should not
      exceed VideoFramesDecoded.
    </summary>
  </metric>
  <metric name="Perf.VideoFramesPowerEfficient">
    <summary>
      Integer count of the video frames decoded via power efficient means in
      this record. Should not exceed VideoFramesDecoded.
    </summary>
  </metric>
  <metric name="Video.CodecProfile">
    <summary>
      media::VideoCodecProfile enum value. Can be VIDEO_CODEC_PROFILE_UNKNOWN if
      we don't know the video codec.
    </summary>
  </metric>
  <metric name="Video.EME.KeySystem" enum="MediaKeySystem">
    <summary>
      Name of the KeySystem used during for an encrypted (EME) playback. Will be
      unset when EME is not used.
    </summary>
  </metric>
  <metric name="Video.EME.UseHwSecureCodecs">
    <summary>
      Boolean indicating whether content decryption module (CDM) was configured
      to use hardware secure decoding. May be true or false for EME playbacks.
      Will be unset for non-EME playbacks.
    </summary>
  </metric>
  <metric name="Video.FramesPerSecond">
    <summary>
      Integer representing video frames per second. This is the cadence of video
      frames as described by stream timestamps multiplied by
      HTMLMediaELement.playbackRate.
    </summary>
  </metric>
  <metric name="Video.InTopFrame">
    <summary>
      Flag indicating whether the record comes from the top frame or some inner
      frame. For privacy, metrics from inner frames are recorded with the top
      frame's origin, so this flag helps separate top frame vs. embedded
      playbacks.
    </summary>
  </metric>
  <metric name="Video.NaturalHeight">
    <summary>
      Integer representing height of video natural size.
    </summary>
  </metric>
  <metric name="Video.NaturalWidth">
    <summary>
      Integer representing width of video natural size.
    </summary>
  </metric>
  <metric name="Video.PlayerID">
    <summary>
      ID which corresponds to a given WebMediaPlayerImpl instance. May be linked
      with Media.WebMediaPlayerState events to understand playback more deeply.
    </summary>
  </metric>
</event>

<event name="Media.VideoEncoderMetrics">
  <owner>hiroh@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    A record of encoding usage metrics in chrome, for example, for cast
    mirroring and webcodecs. This is recorded in the end of each video encoding
    session.
  </summary>
  <metric name="Height">
    <summary>
      Integer value indicating the height of the encoded stream. This is
      bucketed per 100 and capped by 8200.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsHardware" enum="Boolean">
    <summary>
      Boolean value indicating whether the encoder implementation is hardware
      accelerated one or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NumEncodedFrames">
    <summary>
      Integer value indicating the number of the successfully encoded frames.
      This is bucketed per 100.
    </summary>
  </metric>
  <metric name="Profile" enum="VideoCodecProfile">
    <summary>
      media::VideoCodecProfile enum value. The codec profile configured to
      encode the video.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Status" enum="EncoderStatus">
    <summary>
      media::EncoderStatus::Codes enum value. The first error status code on
      error, otherwise media::EncoderStatus::Codes::kOk.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SVCMode" enum="SVCScalabilityMode">
    <summary>
      Integer value indicating the SVC configuration of the encoding. The value
      corresponds to media::SVCScalabilityMode.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UseCase" enum="VideoEncoderUseCase">
    <summary>
      Integer value indicating the video encoder use case. The value corresponds
      to media:::mojom::VideoEncoderUseCase.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Width">
    <summary>
      Integer value indicating the width of the encoded stream. This is bucketed
      per 100 and capped by 8200.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Media.WebAudio.AudioContext.AudibleTime">
  <owner>hongchan@chromium.org</owner>
  <owner>mjwilson@chromium.org</owner>
  <owner>webaudio-dev@chromium.org</owner>
  <summary>
    Records the AudioContext audible time information.
  </summary>
  <metric name="AudibleTime">
    <summary>
      Audible time in milliseconds for this event.
    </summary>
  </metric>
  <metric name="IsMainFrame">
    <summary>
      Indicates whether the event is fired from main frame.
    </summary>
  </metric>
</event>

<event name="Media.WebAudio.ScriptProcessorNode">
  <owner>hongchan@chromium.org</owner>
  <owner>mjwilson@chromium.org</owner>
  <owner>webaudio-dev@chromium.org</owner>
  <summary>
    Records the creation of a ScriptProcessorNode to monitor usage of this
    deprecated API. ScriptProcessorNode has been deprecated and developers are
    strongly encouraged to use AudioWorklet instead. This data helps gauge
    migration progress and the impact if it were to be removed.
  </summary>
  <metric name="Creation" enum="Boolean">
    <summary>
      Fired and set to true when a ScriptProcessorNode is constructed.
    </summary>
  </metric>
</event>

<event name="Media.WebMediaPlayerState">
  <owner>dalecurtis@chromium.org</owner>
  <owner>media-dev@chromium.org</owner>
  <summary>
    Final state of WebMediaPlayerImpl instance. Records only immutable playback
    properties. Contains a PlaybackID which links to Media.BasicPlayback events.
  </summary>
  <metric name="AudioEncryptionType" enum="MediaEncryptionType">
    <summary>
      Encryption type of the audio stream such as whether audio is encrypted and
      if so whether it has clear lead.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ContainerName">
    <summary>
      media::container_names::MediaContainerName enum value. Only recorded for
      !IsMSE src=URL playbacks, this is the container of the media being played
      back; E.g., mp4, avi, mp3, etc.
    </summary>
  </metric>
  <metric name="DemuxerType" enum="MediaDemuxerType">
    <summary>
      Type of media::Demuxer used for the playback. DemuxerType does not change
      dynamically during one playback, and is only determined after any HLS
      fallback might happen.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="FinalPipelineStatus" enum="PipelineStatus">
    <summary>
      media::PipelineStatus enum value. Always 0 if the playback succeeded; all
      other values indicate the playback ended in an error.
    </summary>
  </metric>
  <metric name="HasWaitingForKey" enum="Boolean">
    <summary>
      Boolean value indicating whether an EME playback has been blocked waiting
      for the CDM to be set or waiting for decryption key. For an non-EME
      playback, this is always reported as false.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsEME">
    <summary>
      Boolean value indicating if this event is for an EME playback. Note: EME
      can be attached anytime during the lifecycle of a WebMediaPlayerImpl, but
      once attached can't be removed.
    </summary>
  </metric>
  <metric name="IsHardwareSecure" enum="Boolean">
    <summary>
      Boolean value indicating whether the EME playback is using hardware secure
      pipeline. For clear playback, this will always be false.
    </summary>
  </metric>
  <metric name="IsMSE">
    <summary>
      Boolean value indicating if this event is for an MSE playback. If false it
      means this was a SRC playback.
    </summary>
  </metric>
  <metric name="IsTopFrame">
    <summary>
      Flag indicating whether the report comes from the top frame or some inner
      frame. For privacy, metrics from inner frames are recorded with the top
      frame's origin, so this flag helps separate top frame vs. embedded
      playbacks.
    </summary>
  </metric>
  <metric name="KeySystem" enum="MediaKeySystem">
    <summary>
      For EME playback, this is the key system used. For clear playback, this
      will always be the default value 0 (kUnknownKeySystemForUkm).
    </summary>
  </metric>
  <metric name="PlayerID">
    <summary>
      ID which corresponds to a given WebMediaPlayerImpl instance. May be linked
      with Media.BasicPlayback events to understand a playback more deeply.
    </summary>
  </metric>
  <metric name="RendererType" enum="MediaRendererType">
    <summary>
      Type of media::Renderer used for the playback. In most cases we do not
      support dynamically changing RendererType during one playback.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToFirstFrame">
    <summary>
      Time in milliseconds from when WebMediaPlayerImpl starts loading until the
      first video frame has been shown.
    </summary>
  </metric>
  <metric name="TimeToMetadata">
    <summary>
      Time in milliseconds from when WebMediaPlayerImpl starts loading until
      metadata is known.
    </summary>
  </metric>
  <metric name="TimeToPlayReady">
    <summary>
      Time in milliseconds from when WebMediaPlayerImpl starts loading until it
      has buffered enough to start playback.
    </summary>
  </metric>
  <metric name="URLScheme">
    <summary>
      media::mojom::MediaURLScheme enum value. Only recorded for !IsMSE src=URL
      playbacks, this is the scheme of that URL; E.g., http, https, filesystem,
      etc.
    </summary>
  </metric>
  <metric name="VideoEncryptionType" enum="MediaEncryptionType">
    <summary>
      Encryption type of the video stream such as whether video is encrypted and
      if so whether it has clear lead.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="VisibilityRatioAtPlaybackStart">
    <summary>
      The visibility ratio of the video element at the time playback started, as
      a percentage from 0 to 100. 0 means that the element is not visible due to
      factors like being off-screen, clipped, occluded by other elements, or
      styled as invisible (e.g., opacity:0). 100 means that the element is fully
      visible. This value is currently set only for encrypted media using
      hardware secure codecs, and if the kEncryptedMediaOcclusionTracking flag
      is enabled.
    </summary>
  </metric>
</event>

<event name="MediaRouter.CastWebSenderExtensionLoadUrl" singular="True">
  <owner>rwkeane@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Records that the a resource has been loaded from the Media Router Component
    Extension.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred; only records true values.
    </summary>
  </metric>
</event>

<event name="MediaRouter.SiteInitiatedMirroringStarted">
  <owner>muyaoxu@google.com</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Recorded whenever user starts a site-initiated mirroring session via Media
    Router.
  </summary>
  <metric name="AllowAudioCapture" enum="BooleanAllowed">
    <summary>
      Whether audio capture is allowed in the cast session. If allowed, audio
      playback will happen on the receiver side. If not allowed, audio playback
      will happen on the sender side.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="MediaRouter.TabMirroringStarted">
  <owner>takumif@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Recorded whenever user starts a tab mirroring session via Media Router.
  </summary>
  <metric name="AudioState" enum="WebContentsAudioState">
    <summary>
      The audio playback state of the WebContents at the start of the tab
      mirroring session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="MediaStream.Device">
  <owner>mfoltz@chromium.org</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Events recorded when a page requests access device media, i.e. by starting
    screen capture or opening a webcam or microphone, and the result of that
    request.
  </summary>
  <metric name="VideoCaptureGenerateStreamResult3"
      enum="MediaStreamRequestResult">
    <summary>
      The result of a page's request to open a video capture device (e.g.,
      webcam). The suffix 3 was added when the MediaStreamRequestResult enum was
      updated with new entries.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Memory.Experimental">
  <owner>erikchen@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Metrics associated with memory consumption, in MB.
  </summary>
  <metric name="ArrayBuffer">
    <summary>
      Measure of memory consumed by Array Buffer.
    </summary>
  </metric>
  <metric name="BlinkGC">
    <summary>
      Measure of memory consumed by Oilpan.
    </summary>
  </metric>
  <metric name="BlinkGC.AllocatedObjects">
    <summary>
      Measure of memory consumed by live allocations made from Oilpan.
    </summary>
  </metric>
  <metric name="CommandBuffer">
    <summary>
      Measure of memory consumed by GL command buffer.
    </summary>
  </metric>
  <metric name="Discardable">
    <summary>
      Measure of memory consumed by Discardable memory service.
    </summary>
  </metric>
  <metric name="DownloadService">
    <summary>
      Measure of memory used by download service.
    </summary>
  </metric>
  <metric name="Extensions.ValueStore">
    <summary>
      Measure of memory consumed by Key Value Store databases of extensions.
    </summary>
  </metric>
  <metric name="FontCaches">
    <summary>
      Measure of memory used by font platform and shape caches in renderer
      process.
    </summary>
  </metric>
  <metric name="GpuMemory">
    <summary>
      Measure of GPU memory used by Chrome.
    </summary>
  </metric>
  <metric name="History">
    <summary>
      Approximate measure of memory consumed by History service.
    </summary>
  </metric>
  <metric name="IsVisible">
    <summary>
      Indicates whether the tab is visible or not at the time of metric
      collection.
    </summary>
  </metric>
  <metric name="JavaHeap">
    <summary>
      Measure of memory consumed by java heap on Android.
    </summary>
  </metric>
  <metric name="LevelDatabase">
    <summary>
      Measure of memory consumed by unaccounted level databases.
    </summary>
  </metric>
  <metric name="Malloc">
    <summary>
      Measure of memory allocated by malloc, that is not classified by other
      metrics.
    </summary>
  </metric>
  <metric name="Malloc.AllocatedObjects">
    <summary>
      Measure of total memory used by objects allocated using malloc.
    </summary>
  </metric>
  <metric name="NumberOfAdSubframes">
    <summary>
      The number of ad subframes that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfArrayBufferContents">
    <summary>
      The number of arraybuffer contents that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfDetachedScriptStates">
    <summary>
      The number of detached ScriptState that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfDocuments">
    <summary>
      The number of documents that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfExtensions">
    <summary>
      The number of extensions that are served from the associated renderer
      process.
    </summary>
  </metric>
  <metric name="NumberOfFrames">
    <summary>
      The number of frames that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfLayoutObjects">
    <summary>
      The number of layout objects that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfMojoHandles">
    <summary>
      The number of mojo handles stored in HandleTable.
    </summary>
  </metric>
  <metric name="NumberOfNodes">
    <summary>
      The number of nodes that the associated renderer owns.
    </summary>
  </metric>
  <metric name="NumberOfWebMediaPlayers">
    <summary>
      The number of web media players in the associated renderer.
    </summary>
  </metric>
  <metric name="OmniboxSuggestions">
    <summary>
      Measure of memory used due to URL indexing and autocomplete suggestions.
    </summary>
  </metric>
  <metric name="PartitionAlloc">
    <summary>
      Measure of memory allocated by PartitionAlloc allocator.
    </summary>
  </metric>
  <metric name="PartitionAlloc.AllocatedObjects">
    <summary>
      Measure of total memory used by objects allocated using PartitionAlloc.
    </summary>
  </metric>
  <metric name="PartitionAlloc.Partitions.ArrayBuffer">
    <summary>
      Measure of memory used by Array Buffer partition in PartitionAlloc.
    </summary>
  </metric>
  <metric name="PartitionAlloc.Partitions.Buffer">
    <summary>
      Measure of memory used by Buffer partition in PartitionAlloc.
    </summary>
  </metric>
  <metric name="PartitionAlloc.Partitions.FastMalloc">
    <summary>
      Measure of memory used by Fast Malloc partition in PartitionAlloc.
    </summary>
  </metric>
  <metric name="PartitionAlloc.Partitions.Layout">
    <summary>
      Measure of memory used by Layout partition in PartitionAlloc.
    </summary>
  </metric>
  <metric name="PrivateMemoryFootprint">
    <summary>
      Measure of total private memory consumed by process.
    </summary>
    <aggregation>
      <history>
        <index fields="metrics.ProcessType"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PrivateSwapFootprint">
    <summary>
      Measure of private swap memory consumed by a process. Available on Linux
      and Android.
    </summary>
  </metric>
  <metric name="ProcessType">
    <summary>
      Type of process (e.g. browser, renderer, GPU --- see
      services/resource_coordinator/public/mojom/memory_instrumentation/memory_instrumentation.mojom)
      of associated metrics.
    </summary>
    <aggregation>
      <history>
        <statistics export="False">
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Resident">
    <summary>
      Size of process' working set.
    </summary>
  </metric>
  <metric name="SharedMemoryFootprint">
    <summary>
      Measure of total shared memory consumed by process.
    </summary>
  </metric>
  <metric name="SiteStorage">
    <summary>
      Measure of memory used due to web storage APIs in browser process.
    </summary>
  </metric>
  <metric name="SiteStorage.BlobStorage">
    <summary>
      Measure of memory used by in-memory blob file API in browser process.
    </summary>
  </metric>
  <metric name="SiteStorage.IndexDB">
    <summary>
      Measure of memory used due to IndexedDB API in browser process.
    </summary>
  </metric>
  <metric name="SiteStorage.LocalStorage">
    <summary>
      Measure of memory used due to Local Storage API in browser process.
    </summary>
  </metric>
  <metric name="SiteStorage.SessionStorage">
    <summary>
      Measure of memory used due to Session Storage API in browser process.
    </summary>
  </metric>
  <metric name="Skia">
    <summary>
      Measure of memory used by Skia.
    </summary>
  </metric>
  <metric name="Skia.SkGlyphCache">
    <summary>
      Measure of memory used by Skia Glyph Cache.
    </summary>
  </metric>
  <metric name="Skia.SkResourceCache">
    <summary>
      Measure of memory used by Skia Resource Cache.
    </summary>
  </metric>
  <metric name="Sqlite">
    <summary>
      Measure of memory used by all sqlite databases.
    </summary>
  </metric>
  <metric name="Sync">
    <summary>
      Measure of memory used by Sync storage.
    </summary>
  </metric>
  <metric name="TabRestore">
    <summary>
      Approximate measure of memory used by Tab restore service.
    </summary>
  </metric>
  <metric name="TimeSinceLastNavigation">
    <summary>
      The time in seconds since the Tab navigated. Only emitted for tabs that
      are not sharing a process.
    </summary>
  </metric>
  <metric name="TimeSinceLastVisibilityChange">
    <summary>
      The time in seconds since the Tab changed visibility. Only emitted for
      tabs that are not sharing a process.
    </summary>
  </metric>
  <metric name="Total2.PrivateMemoryFootprint">
    <summary>
      Measure of total private memory consumed by all processes.
    </summary>
  </metric>
  <metric name="Total2.SharedMemoryFootprint">
    <summary>
      Measure of total shared memory consumed by all processes.
    </summary>
  </metric>
  <metric name="UI">
    <summary>
      Measure of memory used by Android UI bitmaps.
    </summary>
  </metric>
  <metric name="Uptime">
    <summary>
      Process uptime.
    </summary>
  </metric>
  <metric name="V8">
    <summary>
      Measure of memory consumed by V8.
    </summary>
    <aggregation>
      <history>
        <index fields="metrics.ProcessType"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="V8.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in V8.
    </summary>
    <aggregation>
      <history>
        <index fields="metrics.ProcessType"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="V8.Main">
    <summary>
      Measure of memory consumed by the main isolate of V8.
    </summary>
  </metric>
  <metric name="V8.Main.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the main isolate of V8.
    </summary>
  </metric>
  <metric name="V8.Main.GlobalHandles">
    <summary>
      Measure of memory consumed by global handles in V8.
    </summary>
  </metric>
  <metric name="V8.Main.GlobalHandles.AllocatedObjects">
    <summary>
      Measure of memory consumed by used global handles in V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap">
    <summary>
      Measure of memory consumed by the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.CodeLargeObjectSpace">
    <summary>
      Measure of memory consumed by the code large object space of the main heap
      of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.CodeLargeObjectSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the code large object space
      of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.CodeSpace">
    <summary>
      Measure of memory consumed by the code space of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.CodeSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the code space of the main
      heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.LargeObjectSpace">
    <summary>
      Measure of memory consumed by the large object space of the main heap of
      V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.LargeObjectSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the large object space of
      the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.MapSpace">
    <summary>
      Measure of memory consumed by the map space of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.MapSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the map space of the main
      heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.NewLargeObjectSpace">
    <summary>
      Measure of memory consumed by the new large object space of the main heap
      of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.NewLargeObjectSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the new large object space
      of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.NewSpace">
    <summary>
      Measure of memory consumed by the new space of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.NewSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the new space of the main
      heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.OldSpace">
    <summary>
      Measure of memory consumed by the old space of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.OldSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the old space of the main
      heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.ReadOnlySpace">
    <summary>
      Measure of memory consumed by the read-only space of the main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.ReadOnlySpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the read-only space of the
      main heap of V8.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.SharedLargeObjectSpace">
    <summary>
      Measure of memory consumed by the shared large object space of the main
      heap of V8. Measured in bytes.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.SharedLargeObjectSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the shared large object
      space of the main heap of V8. Measured in bytes.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.SharedSpace">
    <summary>
      Measure of memory consumed by the shared space of the main heap of V8.
      Measured in bytes.
    </summary>
  </metric>
  <metric name="V8.Main.Heap.SharedSpace.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in the shared space of the main
      heap of V8. Measured in bytes.
    </summary>
  </metric>
  <metric name="V8.Main.Malloc">
    <summary>
      Measure of memory allocated by malloc in the main isolate of V8.
    </summary>
  </metric>
  <metric name="V8.Workers">
    <summary>
      Measure of memory consumed by worker isolates of V8.
    </summary>
  </metric>
  <metric name="V8.Workers.AllocatedObjects">
    <summary>
      Measure of memory consumed by live objects in worker isolates of V8.
    </summary>
  </metric>
  <metric name="WebCache">
    <summary>
      Measure of memory consumed by all resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.CSSStylesheetResources">
    <summary>
      Measure of memory consumed by CSS Stylesheet resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.EncodedSizeDuplicatedInDataUrls">
    <summary>
      Measure of memory consumed by data URLs of Image resources in Blink Web
      Cache.
    </summary>
  </metric>
  <metric name="WebCache.FontResources">
    <summary>
      Measure of memory consumed by Font resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.ImageResources">
    <summary>
      Measure of memory consumed by Image resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.OtherResources">
    <summary>
      Measure of memory consumed by other resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.ScriptResources">
    <summary>
      Measure of memory consumed by Script resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.V8CodeCache">
    <summary>
      Measure of memory consumed by V8 code cache held by Script resources in
      Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebCache.XSLStylesheetResources">
    <summary>
      Measure of memory consumed by XSL Stylesheet resources in Blink Web Cache.
    </summary>
  </metric>
  <metric name="WebMediaPlayer.Audio">
    <summary>
      Measure of total memory used by media/webmediaplayer/audio.
    </summary>
  </metric>
  <metric name="WebMediaPlayer.DataSource">
    <summary>
      Measure of total memory used by media/webmediaplayer/data_source.
    </summary>
  </metric>
  <metric name="WebMediaPlayer.Demuxer">
    <summary>
      Measure of total memory used by media/webmediaplayer/demuxer.
    </summary>
  </metric>
  <metric name="WebMediaPlayer.Video">
    <summary>
      Measure of total memory used by media/webmediaplayer/video.
    </summary>
  </metric>
  <metric name="WebNN">
    <summary>
      Measure of the backing memory consumed by the WebNN service.
    </summary>
  </metric>
</event>

<event name="Memory.TabFootprint">
  <owner>tommckee@chromium.org</owner>
  <summary>
    Measure of memory used by the processes that host an instance of a tab.
    Intended as a high-level metric for analyzing effective memory use of
    individual sites.
  </summary>
  <metric name="MainFrameProcessPMF">
    <summary>
      Measure of private memory, in MB, consumed by the render process dedicated
      to hosting the main frame. Undefined if the main frame is hosted by a
      render process used by other tabs. If this is undefined, TabPMF will be
      undefined.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SubFrameProcessPMF.Excluded">
    <summary>
      Number of render processes that were blocked from contributing to
      SubFrameProcessPMF.Total. A process can have its contribution blocked if
      the process has responsibilities outside the scope of the relevant tab. If
      this is non-zero, TabPMF will be undefined.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SubFrameProcessPMF.Included">
    <summary>
      Number of render processes that contributed to SubFrameProcessPMF.Total.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SubFrameProcessPMF.Total">
    <summary>
      Measure of total private memory, in MB, consumed by the render processes
      dedicated to hosting sub-frames of the tab. Note that, if a render process
      hosts frames of other tabs, it isn't considered to be 'dedicated' and so
      it doesn't contribute to this total.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TabPMF">
    <summary>
      Measure of private memory, in MB, consumed by all render processes
      dedicated to hosting some part of a tab. Undefined if there are processes
      responsible for hosting parts of this tab while hosting parts of other
      tabs.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="MixedContentAutoupgrade.ResourceRequest">
  <owner>carlosil@chromium.org</owner>
  <summary>
    Status and Network error or HTTP response code for a resource request that
    was autoupgraded to HTTPS as part of the mixed content autoupgrade
    experiment.
  </summary>
  <metric name="Code">
    <summary>
      The HTTP response or network error code for an autoupgraded request.
    </summary>
  </metric>
  <metric name="Status">
    <summary>
      An enum with 0 representing started, 1 failed, and 2 response received.
    </summary>
  </metric>
</event>

<event name="MobileFriendliness" singular="True">
  <owner>kumagi@google.com</owner>
  <owner>gaul@google.com</owner>
  <metric name="AllowUserZoom" enum="Boolean">
    <summary>
      Whether the page allows the user to zoom in/out.
    </summary>
  </metric>
  <metric name="SmallTextRatio">
    <summary>
      Percentage of small font text area in total text area.
    </summary>
  </metric>
  <metric name="TextContentOutsideViewportPercentage">
    <summary>
      Percentage of pixels of text and images horizontally outside the viewport,
      relative to the frame width.
    </summary>
  </metric>
  <metric name="ViewportDeviceWidth" enum="Boolean">
    <summary>
      Whether the width of the viewport specified as device-width or not.
    </summary>
  </metric>
  <metric name="ViewportHardcodedWidth">
    <summary>
      Specified hardcoded viewport width in CSS pixels.
    </summary>
  </metric>
  <metric name="ViewportInitialScaleX10">
    <summary>
      Specified initial viewport scaling multiplied by 10. 1 means 0.1, 100
      means 10. [1-100].
    </summary>
  </metric>
</event>

<event name="MobileFriendliness.TappedBadTargets">
  <owner>kumagi@google.com</owner>
  <owner>gaul@google.com</owner>
  <metric name="CloseDisplayEdge" enum="Boolean">
    <summary>
      The distance from the center position of tapped target to display's edge
      is less than 5mm.
    </summary>
  </metric>
  <metric name="HighlyZoomed" enum="Boolean">
    <summary>
      Whether the page is manually 100%+ zoomed when tapped.
    </summary>
  </metric>
  <metric name="TooClose" enum="Boolean">
    <summary>
      Whether the center of the tapped tap target is close less than 5mm to
      other tap target's edge.
    </summary>
  </metric>
  <metric name="TooSmall" enum="Boolean">
    <summary>
      Whether the tapped tap target is small as both width and height is less
      than 7mm.
    </summary>
  </metric>
  <metric name="Zoomed" enum="Boolean">
    <summary>
      Whether the page is manually 20%+ zoomed when tapped.
    </summary>
  </metric>
</event>

<event name="MobileMenu.DirectShare">
  <owner>sayman@chromium.org</owner>
  <summary>
    User pressed 'Share' in the app menu. The intent most recently used to share
    was invoked directly. See also MobileMenu.Share.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred; only records true values.
    </summary>
  </metric>
</event>

<event name="MobileMenu.FindInPage">
  <owner>frechette@chromium.org</owner>
  <summary>
    User pressed 'Find in page' in the app menu.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred (typically only records
      true values).
    </summary>
  </metric>
</event>

<event name="MobileMenu.Share">
  <owner>sayman@chromium.org</owner>
  <summary>
    User pressed 'Share' in the app menu. A picker was shown. See also
    MobileMenu.DirectShare.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred; only records true values.
    </summary>
  </metric>
</event>

<event name="MultistepFilter.ApplicationSession">
  <owner>jihadghanna@google.com</owner>
  <owner>chrome-multistep-filter-eng@google.com</owner>
  <summary>
    Recorded when a Multistep Filter suggestion application session is
    concluded. The session starts when a suggestion is accepted. If the
    application is unsuccessful, the session ends immediately. If successful,
    the session continues to track post-application user engagement, ending when
    the user navigates away or closes the tab. This event records the final
    application outcome (represented by SuggestionApplicationResult enum) and
    any post-application engagement metrics.
  </summary>
  <metric name="ApplicationOutcome" enum="SuggestionApplicationResult">
    <summary>
      The overall technical filter application outcome (AllFiltersApplied,
      AbandonedBeforeVerification, or various Failure reasons) after a user
      accepts a Multistep Filter suggestion.
    </summary>
  </metric>
  <metric name="NumOfFilterFacetsAppliedSuccessfully">
    <summary>
      The number of filter facets successfully applied (clamped to
      multistep_filter::kMultistepFilterMaxFacetsShownUkmClampingLimit). Logged
      only if outcome is AllFiltersApplied.
    </summary>
  </metric>
  <metric name="PostApplicationUserEngagement"
      enum="MultistepFilterPostSuggestionApplicationUserEngagement">
    <summary>
      The user's engagement after the filters were applied (e.g. further
      navigation, tab close, omnibox navigation) distinguished by whether it
      happened within the
      multistep_filter::kMultistepFilterPostApplicationSessionDuration window.
    </summary>
  </metric>
  <metric name="RetentionState" enum="MultistepFilterRetentionState">
    <summary>
      The user's retention history state at the time the suggestion was shown
      (must match the UI session).
    </summary>
  </metric>
  <metric name="SessionId">
    <summary>
      A transient, randomly generated identifier used to correlate the UI
      session event (MultistepFilter.UiSession) with the subsequent landing page
      application session event (MultistepFilter.ApplicationSession).
    </summary>
  </metric>
  <metric name="SuggestedFilterFacetTypes">
    <summary>
      A bitmask representing the types of filter facets in the accepted
      suggestion. Each bit N corresponds to a filter facet type with enum value
      N defined in MultistepFilterFacetType enum (e.g. Bit 1 is kAgeChild (1),
      Bit 11 is kDateCheckin (11), Bit 0 is unused). This must match the UI
      session.
    </summary>
  </metric>
  <metric name="SuggestionAcceptedToAppliedTimeInMs">
    <summary>
      Time from the user accepting the suggestion to when the filters are
      successfully applied on the landing page (in milliseconds, exponentially
      bucketed). Logged only if outcome is AllApplied.
    </summary>
  </metric>
  <metric name="TaskType" enum="MultistepFilterTaskType">
    <summary>
      The task type of the applied suggestion (must match the UI session).
    </summary>
  </metric>
</event>

<event name="MultistepFilter.UiSession">
  <owner>jihadghanna@google.com</owner>
  <owner>chrome-multistep-filter-eng@google.com</owner>
  <summary>
    Recorded when a Multistep Filter suggestion UI session is flushed
    (concluded). This event captures the full lifecycle of the UI session,
    including whether the suggestion was accepted, dismissed, or ignored, and
    the associated latencies and age of the suggestion.
  </summary>
  <metric name="AcceptedAgeInMinutes">
    <summary>
      Measures the time elapsed (in minutes, clamped to
      multistep_filter::kMultistepFilterSessionDuration) from when the potential
      suggestion was extracted to when the user accepted it. Logged only if the
      suggestion was accepted.
    </summary>
  </metric>
  <metric name="IsSameDomain" enum="Boolean">
    <summary>
      True if the suggestion was shown on the same eTLD+1 as the page from which
      it was extracted.
    </summary>
  </metric>
  <metric name="NavigationToSuggestionAcceptedTimeInMs">
    <summary>
      Time from the end of the navigation that triggered the suggestion
      generation to when the user accepted it (in milliseconds, exponentially
      bucketed). Logged only if accepted.
    </summary>
  </metric>
  <metric name="NavigationToSuggestionShownTimeInMs">
    <summary>
      Time from the end of the navigation that triggered the suggestion
      generation to when it was first shown (in milliseconds, exponentially
      bucketed).
    </summary>
  </metric>
  <metric name="NumOfFilterFacetsShown">
    <summary>
      The number of filter facets which were part of the suggestion which was
      shown (clamped to
      multistep_filter::kMultistepFilterMaxFacetsShownUkmClampingLimit).
    </summary>
  </metric>
  <metric name="ReopenedCueShown" enum="Boolean">
    <summary>
      True if the suggestion cue was reopened from the Omnibox.
    </summary>
  </metric>
  <metric name="RetentionState" enum="MultistepFilterRetentionState">
    <summary>
      The user's retention history state at the time the suggestion was shown.
    </summary>
  </metric>
  <metric name="SessionId">
    <summary>
      A transient, randomly generated identifier used to correlate the UI
      session event (MultistepFilter.UiSession) with the subsequent landing page
      application session event (MultistepFilter.ApplicationSession).
    </summary>
  </metric>
  <metric name="ShownAgeInMinutes">
    <summary>
      Measures the time elapsed (in minutes, clamped to
      multistep_filter::kMultistepFilterSessionDuration) from when the potential
      suggestion was extracted to when it was first shown to the user.
    </summary>
  </metric>
  <metric name="SuggestedFilterFacetTypes">
    <summary>
      A bitmask representing the types of filter facets in the suggestion shown
      to the user. Each bit N corresponds to a filter facet type with enum value
      N defined in MultistepFilterFacetType enum (e.g. Bit 1 is kAgeChild (1),
      Bit 11 is kDateCheckin (11), Bit 0 is unused).
    </summary>
  </metric>
  <metric name="SuggestionShownToAcceptedTimeInMs">
    <summary>
      Time from when the suggestion was first shown to when the user accepted it
      (in milliseconds, exponentially bucketed). Logged only if accepted.
    </summary>
  </metric>
  <metric name="TaskType" enum="MultistepFilterTaskType">
    <summary>
      The task type of the suggestion (e.g. Flight, Accommodation, etc).
    </summary>
  </metric>
  <metric name="UserDecision" enum="SuggestionUserDecision">
    <summary>
      The user's final decision on the suggestion (Accepted, Dismissed, Settings
      Opened, Ignored).
    </summary>
  </metric>
</event>

<event name="Navigation.DuplicateNavigationsIgnored">
  <owner>annasato@chromium.org</owner>
  <owner>chrome-navigation@google.com</owner>
  <summary>
    Records the number of subsequent duplicate navigation requests that were
    ignored in favor of an ongoing navigation. This is caused by
    IgnoreDuplicateNavs.
  </summary>
  <metric name="IgnoredDuplicateNavigationCount">
    <summary>
      The number of duplicate navigations that were ignored.
      ukm::GetExponentialBucketMinForCounts1000() is applied.
    </summary>
  </metric>
</event>

<event name="Navigation.FromGoogleSearch.Abandoned">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics recorded each time a navigation from Google Search is abandoned
    (e.g. the navigation got cancelled, or the user backgrounded the app while
    the page load is not finished yet, etc. See AbandonedPageLoadMetricsObserver
    for more details).
  </summary>
  <metric name="AbandonReason">
    <summary>
      The reason the navigation/page load gets abandoned.
    </summary>
  </metric>
  <metric name="AbandonTimingFromLastMilestone">
    <summary>
      The time when the navigation/page load is abandoned, relative to the last
      milestone.
    </summary>
  </metric>
  <metric name="AbandonTimingFromNavigationStart">
    <summary>
      The time when the navigation/page load is abandoned, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="LastMilestoneBeforeAbandon">
    <summary>
      The last milestone before the navigation is abandoned.
    </summary>
  </metric>
  <metric name="Net.ErrorCode" enum="NetErrorCodes">
    <summary>
      The `net::Error` code for this page load. Only logged for failed
      provisional navigations (i.e. abandoned before commit).
    </summary>
  </metric>
  <metric name="Net.ExtendedErrorCode" enum="ErrorNavigationTrigger">
    <summary>
      The extended error code for the net error for this page load, which
      represents the detailed context of why the net error happened. Only logged
      for failed provisional navigations.
    </summary>
  </metric>
  <metric name="PreviousBackgroundedTime">
    <summary>
      If we've experienced backgrounding while the navigation/page load is
      running before this abandonment event happened, this will have the time
      when the backgrounding happened, relative to navigation start.
    </summary>
  </metric>
  <metric name="PreviousHiddenTime">
    <summary>
      If we've experienced hiding while the navigation/page load is running
      before this abandonment event happened, this will have the time when the
      hiding happened, relative to navigation start.
    </summary>
  </metric>
  <metric name="RendererProcessInitTime">
    <summary>
      The time when the final renderer process for the navigation is
      initialized, relative to navigation start.
    </summary>
  </metric>
</event>

<event name="Navigation.FromGoogleSearch.TimingInformation">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Records the navigation milestone timing information. This is triggered
    either when we are navigating away from the page (i.e. `OnComplete` of the
    `PageLoadMetricsObserver`) or when the navigation is being abandoned. For
    non-terminal abandonments such as tab hidden or app backgrounded, we record
    this field every time the abandonment happens so that we have an entry
    recorded even if app / tab is killed. Note that there may be more than one
    entry per navigation if non-terminal abandonment is involved, as a terminal
    abandonment may happen after recording and also non-terminal abandonment may
    happen multiple times within a navigation, and we may pass succeeding
    milestones after the last record.
  </summary>
  <metric name="Category">
    <summary>
      An 8-bit integer that can be manually mapped to a specific URL param
      &quot;category=&quot; value. Note that only the number is logged.
    </summary>
  </metric>
  <metric name="CommitReceivedTime">
    <summary>
      The time when the CommitNavigation IPC for the navigation is received in
      the renderer process, relative to navigation start.
    </summary>
  </metric>
  <metric name="CommitSentTime">
    <summary>
      The time when the CommitNavigation IPC for the navigation is sent from the
      browser process, relative to navigation start.
    </summary>
  </metric>
  <metric name="DidCommitTime">
    <summary>
      The time when the DidCommit IPC for the navigation is received, relative
      to navigation start.
    </summary>
  </metric>
  <metric name="DOMContentLoadedTime">
    <summary>
      The timestamp of when the &quot;DOMContentLoaded&quot; event is fired for
      the page load, relative to navigation start.
    </summary>
  </metric>
  <metric name="FirstContentfulPaintTime">
    <summary>
      The timestamp of the first contentful paint for the page load, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="FirstRedirectedRequestStartTime">
    <summary>
      The time when the first network request that got redirected for the
      navigation started, relative to navigation start.
    </summary>
  </metric>
  <metric name="FirstRedirectResponseReceived">
    <summary>
      Whether the first redirect response is received yet.
    </summary>
  </metric>
  <metric name="FirstRequestConnectDelayMs">
    <summary>
      The delay in milliseconds caused by connection setup for the first HTTP
      request which is sent for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FirstRequestDomainLookupDelayMs">
    <summary>
      The delay in milliseconds caused by domain lookup for the first HTTP
      request which is sent for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FirstRequestSslDelayMs">
    <summary>
      The delay in milliseconds caused by SSL handshake for the first HTTP
      request which is sent for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="IsCommitted" enum="Boolean">
    <summary>
      Determines whether the navigation is committed or not.
    </summary>
  </metric>
  <metric name="LargestContentfulPaintTime">
    <summary>
      The timestamp of the largest contentful paint for the page load, relative
      to navigation start.
    </summary>
  </metric>
  <metric name="LoaderStartTime">
    <summary>
      The time when the URLLoader for the navigation started, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="LoadEventStartedTime">
    <summary>
      The timestamp of when the &quot;load&quot; event is fired for the page
      load, relative to navigation start.
    </summary>
  </metric>
  <metric name="NonRedirectedRequestStartTime">
    <summary>
      The time when the final network request that didn't got redirected for the
      navigation started, relative to navigation start.
    </summary>
  </metric>
  <metric name="NonRedirectResponseReceived">
    <summary>
      Whether the non-redirect/final response is received yet.
    </summary>
  </metric>
  <metric name="ParseStartTime">
    <summary>
      The time when the parsing of the HTTP response body started, relative to
      navigation start.
    </summary>
  </metric>
  <metric name="RedirectCount">
    <summary>
      The total number of redirects that happened within the navigation. If the
      navigation is abandoned before commit, we record the number of redirects
      up until that point.
    </summary>
  </metric>
  <metric name="SecondRedirectedRequestStartTime">
    <summary>
      The time when the second network request that got redirected for the
      navigation started, relative to navigation start.
    </summary>
  </metric>
  <metric name="SecondRedirectResponseReceived">
    <summary>
      Whether the second redirect response is received yet.
    </summary>
  </metric>
</event>

<event name="Navigation.IDNA2008Transition" singular="True">
  <owner>meacer@google.com</owner>
  <owner>chrome-trusty-transport@google.com</owner>
  <summary>
    Recorded upon main frame navigations to hostnames that contain characters
    that are treated differently between IDNA 2003 and IDNA 2008, aka deviation
    characters. Ignores reload navigations.
  </summary>
  <metric name="Character" enum="IDNA2008DeviationCharacter">
    <summary>
      The deviation character in the URLs eTLD+1. Chrome's URL parsing code
      normalizes deviation characters so the characters don't appear in the
      recorded URL. This is recorded to make the deviation character
      identification simpler.
    </summary>
  </metric>
</event>

<event name="Navigation.ReceivedResponse">
  <owner>miketaylr@chromium.org</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    Recorded when the navigation receives a response from the networking layer.
    Only recorded for main frames (i.e. top-level frames).
  </summary>
  <metric name="HasAcceptCHFrame">
    <summary>
      A boolean value representing whether the navigation included the
      processing of an ACCEPT_CH ALPS frame.
    </summary>
  </metric>
  <metric name="NavigationFirstResponseLatency">
    <summary>
      The duration (in milliseconds) for how long it took from the time the
      navigation loader is created to the time the navigation loader receives
      the response from the networking layer.
    </summary>
  </metric>
</event>

<event name="Navigation.TypedAndDefault">
  <owner>koretadaniel@chromium.org</owner>
  <owner>chrome-desktop-ui-waterloo@google.com</owner>
  <summary>
    Recorded immediately after a successful navigation completes if the user
    explicitly navigates to a domain via the Omnibox.
  </summary>
  <metric name="IsSameAsDefault" enum="Boolean">
    <summary>
      Recorded as 1 if the explicitly typed search engine destination matches
      the user's currently active Default Search Engine (DSE), and 0 if it
      differs.
    </summary>
  </metric>
</event>

<event name="NavigationPredictorAnchorElementMetrics">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Metrics that describe an anchor element's data. This event is emitted at
    most 10 times per page load, once for each of the top n URLs on a page, and
    the order of the events is randomized. If there is no nth anchor element, no
    value is returned.
  </summary>
  <metric name="AnchorIndex">
    <summary>
      The index of the clicked-on anchor element in the tracked list.
    </summary>
  </metric>
  <metric name="BucketedPathHash">
    <summary>
      The anchor element's href URL path is hashed, then bucketed using 10
      different buckets. The bucket ({0, 1, ..., 9}) the hash falls into is
      logged in this field.
    </summary>
  </metric>
  <metric name="ContainsImage">
    <summary>
      1 if the anchor element contains an image.
    </summary>
  </metric>
  <metric name="FontSize">
    <summary>
      The bucketed font size of the anchor element, according to its computed
      style. 1 corresponds to a pixel font size in [0, 10), 2 corresponds to a
      fonts size in [10, 18) and 3 is logged when the font size is 18 pixels or
      larger.
    </summary>
  </metric>
  <metric name="HasTextSibling">
    <summary>
      1 if the anchor element has an immediate text sibling, 0 otherwise.
    </summary>
  </metric>
  <metric name="IsBold">
    <summary>
      1 if the anchor's computed style's font-weight is greater than 500, 0
      otherwise.
    </summary>
  </metric>
  <metric name="IsInIframe">
    <summary>
      1 if the anchor element is in an iframe.
    </summary>
  </metric>
  <metric name="IsURLIncrementedByOne">
    <summary>
      1 if the anchor element's target URL and the document's source URL only
      differ by one number, and the target URL increments that number in the
      source URL by 1.
    </summary>
  </metric>
  <metric name="NavigationStartToLinkLoggedMs">
    <summary>
      The time in ms between navigation start and the moment this entry was
      logged. Exponentially bucketed using GetExponentialBucketMin a value of
      1.3.
    </summary>
  </metric>
  <metric name="PathDepth">
    <summary>
      The number of slashes in the anchor element's href URL path. Truncated at
      5.
    </summary>
  </metric>
  <metric name="PathLength">
    <summary>
      The number of characters in the anchor element's href URL path. Buckets of
      size 10, truncated at 100.
    </summary>
  </metric>
  <metric name="PercentClickableArea">
    <summary>
      The percent of the total document area that this anchor element's
      clickable area occupies.
    </summary>
  </metric>
  <metric name="PercentVerticalDistance">
    <summary>
      How far down the document the top of the anchor element is, expressed as a
      ratio with the total document height.
    </summary>
  </metric>
  <metric name="SameOrigin">
    <summary>
      1 if the anchor element's target URL and the document's source URL are the
      same origin.
    </summary>
  </metric>
</event>

<event name="NavigationPredictorPageLinkClick">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Sent on an in-page link click.
  </summary>
  <metric name="AnchorElementIndex">
    <summary>
      An integer (0-indexed), corresponding to the index of that anchor element
      in the list of top ten anchor elements on that page, sorted by their
      navigation scores. If an anchor element is clicked that is not in
      NavigationPredictorAnchorElementMetrics, -1 is returned.
    </summary>
  </metric>
  <metric name="HrefUnchanged">
    <summary>
      1 if the href of the anchor element at the time the click is handled is
      the same as the href when the element was created. 0 if the href changed.
    </summary>
  </metric>
  <metric name="NavigationStartToLinkClickedMs">
    <summary>
      The time in milliseconds between the moment an entry for the anchor
      element was logged to UKM and the moment the user clicked on it.
      Exponentially bucketed, 1.3 factor.
    </summary>
  </metric>
</event>

<event name="NavigationPredictorPageLinkMetrics" singular="True">
  <owner>ryansturm@chromium.org</owner>
  <summary>
    Metrics that describe aggregate information about the links within a page.
    Some anchor elements present on a page may not be represented in these
    metrics, if they are outside the viewport or if their placement in the page
    is after the 40th anchor element. This event is emitted at most once per
    page load. Unless otherwise specified, each of the aggregate metrics is
    bucketted with exponential buckets of size 1.3.
  </summary>
  <metric name="MedianLinkLocation">
    <summary>
      The median vertical link location in the viewport, as a ratio of the
      distance from the top of the link to the visible top of the page.
      Bucketted with a linear bucket size of 10.
    </summary>
  </metric>
  <metric name="NumberOfAnchors.ContainsImage">
    <summary>
      The total number of links in the page that are images.
    </summary>
  </metric>
  <metric name="NumberOfAnchors.InIframe">
    <summary>
      The total number of links in the page in any iframe.
    </summary>
  </metric>
  <metric name="NumberOfAnchors.SameHost">
    <summary>
      The total number of links in the page that point to the same origin as the
      current page's origin.
    </summary>
  </metric>
  <metric name="NumberOfAnchors.Total">
    <summary>
      The total number of links within a page.
    </summary>
  </metric>
  <metric name="NumberOfAnchors.URLIncremented">
    <summary>
      The total number of links on the page, where each link only differs from
      the current page's URL by a number, and that number is incremented by 1 in
      the link.
    </summary>
  </metric>
  <metric name="TotalClickableSpace">
    <summary>
      The total clickable space in the entire page, expressed as a ratio of the
      visible clickable region to the entire viewport region.
    </summary>
  </metric>
  <metric name="Viewport.Height">
    <summary>
      The height of the viewport, in pixels.
    </summary>
  </metric>
  <metric name="Viewport.Width">
    <summary>
      The width of the viewport, in pixels.
    </summary>
  </metric>
</event>

<event name="NavigationPredictorPreloadOnHover">
  <owner>ryansturm@chromium.org</owner>
  <owner>domenic@chromium.org</owner>
  <owner>isaboori@google.com</owner>
  <summary>
    This event records required data to assess and fine-tune the preloading
    on-hover and on pointer down heuristics, and is submitted once per mouse
    over, mouse out, mouse down and mouse up events for randomly selected anchor
    elements.
  </summary>
  <metric name="HoverNotTakenMs">
    <summary>
      Duration that the user was hovering over the anchor element and it did not
      result in a navigation to that link. Exponentially bucketed using
      GetExponentialBucketMin with a spacing of 1.3.
    </summary>
  </metric>
  <metric name="HoverTakenMs">
    <summary>
      Duration that the user was hovering over the anchor element and it
      resulted in a navigation to that link. Exponentially bucketed using
      GetExponentialBucketMin with a spacing of 1.3.
    </summary>
  </metric>
  <metric name="MouseDownNotTakenMs">
    <summary>
      Time since the user pressed the left/middle mouse button over the anchor
      element and that did not result in a navigation to that link.
      Exponentially bucketed using GetExponentialBucketMin with a spacing of
      1.3.
    </summary>
  </metric>
  <metric name="MouseDownTakenMs">
    <summary>
      Time since the user presses the left/middle mouse button over the anchor
      element and that resulted in a navigation to that link. Exponentially
      bucketed using GetExponentialBucketMin with a spacing of 1.3.
    </summary>
  </metric>
</event>

<event name="NavigationPredictorUserInteractions">
  <owner>ryansturm@chromium.org</owner>
  <owner>isaboori@google.com</owner>
  <summary>
    Metrics that describe user interaction with an anchor element. This event is
    emitted once per randomly selected anchor elements.
  </summary>
  <metric name="AnchorIndex">
    <summary>
      The index of the anchor element in NavigationPredictor's |top_urls_|.
    </summary>
  </metric>
  <metric name="DistanceFromLastPointerDown">
    <summary>
      Vertical distance from the center of the anchor element to the most recent
      pointerdown that started a scroll, as a percentage of screen height. This
      value is between -100 and 100 (inclusive), and is negative when the
      pointerdown was below the anchor's center (positive otherwise). This will
      only be set for anchor elements that are in the viewport. Linearly
      bucketed with a bucket size of 10.
    </summary>
  </metric>
  <metric name="EnteredViewportCount">
    <summary>
      How many times the anchor element entered the viewport. Exponentially
      bucketed using GetExponentialBucketMin a value of 1.3.
    </summary>
  </metric>
  <metric name="IsInViewport">
    <summary>
      1 if anchor element is in viewport, otherwise 0.
    </summary>
  </metric>
  <metric name="IsPointerHoveringOver">
    <summary>
      1 if the pointer is hovering over the anchor element, otherwise 0.
    </summary>
  </metric>
  <metric name="MaxEnteredViewportToLeftViewportMs">
    <summary>
      Maximum time between the moment the anchor element entered the viewport
      and the moment it left the viewport in milliseconds. Exponentially
      bucketed using GetExponentialBucketMin a value of 1.3.
    </summary>
  </metric>
  <metric name="MaxHoverDwellTimeMs">
    <summary>
      Maximum dwelltime of pointer hovering over the anchor element in
      milliseconds. Exponentially bucketed using GetExponentialBucketMin a value
      of 1.3.
    </summary>
  </metric>
  <metric name="MouseAcceleration">
    <summary>
      Mouse acceleration when the OnHover event triggered. Exponentially
      bucketed using GetExponentialBucketMin a value of 1.3.
    </summary>
  </metric>
  <metric name="MouseVelocity">
    <summary>
      Mouse velocity when the OnHover event triggered. Exponentially bucketed
      using GetExponentialBucketMin a value of 1.3.
    </summary>
  </metric>
  <metric name="PointerHoveringOverCount">
    <summary>
      How many times the pointer was hovering over the anchor element.
      Exponentially bucketed using GetExponentialBucketMin a value of 1.3.
    </summary>
  </metric>
  <metric name="VerticalPositionInViewport">
    <summary>
      Vertical position of the center of the anchor element (y-coordinate of the
      center), as a percentage of the viewport's height. This value is between 0
      and 100 (inclusive). This will only be set for anchor elements that are in
      the viewport. Linearly bucketed with a bucket size of 10.
    </summary>
  </metric>
</event>

<event name="NavigationRequestBreakDown" singular="True">
  <owner>chikamune@chromium.org</owner>
  <owner>hayato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics to measure the main frame navigation timings by tracking
    NavigationRequest in the browser process. This is recorded at the frequency
    of 0.001.
  </summary>
  <metric name="BeginNavigationToLoaderStart">
    <summary>
      Measures the duration from BeginNavigation to LoaderStart, in
      milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="FetchStartToRequestStart">
    <summary>
      Measures the duration from FetchStart to RequestStart, in milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LoaderStartToFetchStart">
    <summary>
      Measures the duration from LoaderStart to FetchStart, in milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LoaderStartToReceiveResponse">
    <summary>
      Measures the duration from LoaderStart to ReceiveResponse, in
      milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NavigationStartToBeginNavigation">
    <summary>
      Measures the duration from NavigationStart to BeginNavigation, in
      milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ReceiveResponseToCommitNavigation">
    <summary>
      Measures the duration from ReceiveResponse to CommitNavigation, in
      milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="NavigationThrottleDeferredTime">
  <owner>ryansturm@chromium.org</owner>
  <owner>chrome-brapp-loading@google.com</owner>
  <summary>
    Information recorded about a navigation throttle when a navigation is
    deferred at any stage of the navigation. Only recorded for main frame
    navigations that were deferred and later resumed.
  </summary>
  <metric name="DurationOfNavigationDeferralMs">
    <summary>
      The duration from the start of the navigation deferral until the throttle
      resumes the navigation recorded in milliseconds.
    </summary>
  </metric>
  <metric name="NavigationThrottleEventType">
    <summary>
      An enum representing each event that can cause deferral method
      (WillFailRequest, WillProcessResponse, WillRedirectRequest,
      WillStartRequest). See NavigationThrottleRunner::Event for enum details.
    </summary>
  </metric>
  <metric name="NavigationThrottleNameHash">
    <summary>
      A (MD5) hash of the logging name string which represents a unique
      navigation throttle class (subclass of NavigationThrottle). See
      NavigationThrottle::GetNameForLogging().
    </summary>
  </metric>
</event>

<event name="NavigationTimeline" singular="True">
  <owner>hayato@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics to measure the navigation timings. These are recorded for 1 out of
    1,000 navigations. These metrics are based on the equivalent UMA metrics
    defined under Navigation.Timeline.{DurationFromTo}.Duration.
  </summary>
  <metric name="BeforeUnloadPhase1Duration">
    <summary>
      The start and end of beforeunload phase 1 in the initiating renderer
      process, if that phase runs in a given navigation.
    </summary>
  </metric>
  <metric name="BeforeUnloadPhase1ToNavigationRequestCreationDuration">
    <summary>
      When beforeunload phase 1 is finished to when the NavigationRequest is
      created.
    </summary>
  </metric>
  <metric name="BeforeUnloadPhase2Duration">
    <summary>
      The start and end of beforeunload phase 2 in the browser process, if that
      phase runs in a given navigation.
    </summary>
  </metric>
  <metric name="BeforeUnloadPhase2ToBeginNavigationDuration">
    <summary>
      When beforeunload phase 2 is finished to when
      NavigationRequest::BeginNavigation() is called.
    </summary>
  </metric>
  <metric name="BeginNavigationToCommitDuration">
    <summary>
      When NavigationRequest::BeginNavigation() is called to start the
      navigation, to when the CommitNavigation message is sent. This is only
      logged for navigations that don't go through the network stack, such as
      about:blank navigations or browser-initiated same-document navigations.
    </summary>
  </metric>
  <metric name="BeginNavigationToLoaderStartDuration">
    <summary>
      When NavigationRequest::BeginNavigation() is called to when the
      NavigationURLLoader starts. Represents the browser process initialization
      work between beforeunload processing and starting the network request.
    </summary>
  </metric>
  <metric name="CommitToDidCommitDuration">
    <summary>
      When the CommitNavigation IPC is sent to the renderer process to when its
      reply is received by RenderFrameHostImpl::DidCommitNavigation.
    </summary>
  </metric>
  <metric name="DidCommitToFinishDuration">
    <summary>
      When the browser process receives the DidCommitNavigation IPC to when the
      browser process finishes processing that IPC, making the navigation
      committed.
    </summary>
  </metric>
  <metric name="FetchStartToReceiveHeadersDuration">
    <summary>
      When fetch of the document via an HTTP(S) request starts, to when the
      final response headers are received in the network service. This can
      include redirects.
    </summary>
  </metric>
  <metric name="IgnoredCorrectlyDuration">
    <summary>
      Reports how much time from beforeunload phases 1 and 2 was correctly
      excluded from the Navigation.Timeline.TotalExcludingBeforeUnload.Duration
      metric, so that beforeunload handlers and dialogs would not be counted as
      part of the navigation.

      Recorded at the point when a navigation finishes committing, i.e. finishes
      processing the DidCommitNavigation message. A corresponding event is also
      emitted for tracing.
    </summary>
  </metric>
  <metric name="IgnoredIncorrectlyDuration">
    <summary>
      Reports how much time navigation guardrail metrics like FCP are
      incorrectly excluding from the navigation duration, due to collecting
      start times after beforeunload phase 1 finishes and possibly adjusting
      them to after beforeunload phase 2 finishes. This excluded time represents
      actual time the user is waiting that is not accounted for in current
      metrics.

      Recorded at the point when a navigation finishes committing, i.e. finishes
      processing the DidCommitNavigation message. A corresponding event is also
      emitted for tracing.
    </summary>
  </metric>
  <metric name="InteractionToActualNavigationStartDurationMs">
    <summary>
      The duration in milliseconds from a) the OS-level timestamp of the user
      input event that started a navigation to b) when the navigation starts.
      This metric is recorded only for cross-document navigations where a user
      interaction timestamp is available.
    </summary>
  </metric>
  <metric name="InteractionToNavigationFinishedDurationMs">
    <summary>
      The duration in milliseconds from a) the OS-level timestamp of the user
      input event that started a navigation to b) when the navigation finishes
      committing. This metric is recorded only for cross-document navigations
      where a user interaction timestamp is available.
    </summary>
  </metric>
  <metric name="InteractionToNavigationFinishedExcludingBeforeUnloadDurationMs">
    <summary>
      The duration in milliseconds from a) the OS-level timestamp of the user
      input event that started a navigation to b) when the navigation finishes,
      excluding the time spent running beforeunload handlers/dialogs. This
      metric is recorded only for cross-document navigations where a user
      interaction timestamp is available.
    </summary>
  </metric>
  <metric name="LoaderStartToFetchStartDuration">
    <summary>
      When the NavigationURLLoader starts, to when the browser is ready to fetch
      the document using an HTTP(S) request.
    </summary>
  </metric>
  <metric name="LoaderStartToReceiveResponseDuration">
    <summary>
      When the NavigationURLLoader starts to when
      NavigationRequest::OnResponseStarted() is called.
    </summary>
  </metric>
  <metric name="NavigationRequestToBeforeUnloadPhase2Duration">
    <summary>
      When the NavigationRequest is created to when beforeunload phase 2 is
      started in the browser process. Includes time to pick a target
      RenderFrameHost, SiteInstance, and process.
    </summary>
  </metric>
  <metric name="NavigationRequestToBeginNavigationDuration">
    <summary>
      When the NavigationRequest is created to when
      NavigationRequest::BeginNavigation() is called. Logged only when no
      beforeunload handler processing occurs (otherwise, see
      NavigationRequestToBeforeUnloadPhase2Duration and
      BeforeUnloadPhase2ToBeginNavigationDuration). Includes time to pick a
      target RenderFrameHost, SiteInstance, and proces.
    </summary>
  </metric>
  <metric name="ReceiveHeadersToReceiveResponseDuration">
    <summary>
      When the final response headers are received in the network service to
      when NavigationRequest::OnResponseStarted() is called in the browser
      process.
    </summary>
  </metric>
  <metric name="ReceiveResponseToCommitDuration">
    <summary>
      When NavigationRequest::OnResponseStarted() is called to when the
      CommitNavigation IPC is sent to the renderer process.
    </summary>
  </metric>
  <metric name="RendererCommitToDidCommitDuration">
    <summary>
      When the renderer process receives a CommitNavigation IPC to when the
      renderer process sends a DidCommitNavigation reply.
    </summary>
  </metric>
  <metric name="RendererProcessCreated">
    <summary>
      The time when the renderer process was created.
    </summary>
  </metric>
  <metric name="RendererProcessLaunched">
    <summary>
      The time when the renderer process was launched.
    </summary>
  </metric>
  <metric name="StartToBeforeUnloadPhase1Duration">
    <summary>
      When the navigation starts, which could be in the renderer process, to
      when beforeunload phase 1 starts in that process.
    </summary>
  </metric>
  <metric name="StartToNavigationRequestCreationDuration">
    <summary>
      When the navigation starts, which could be in the renderer process, to
      when the NavigationRequest is created.
    </summary>
  </metric>
  <metric name="StartToSyncRendererCommitDuration">
    <summary>
      When the navigation starts in the renderer process, to when the renderer
      process begins a synchronous renderer commit.
    </summary>
  </metric>
  <metric name="TotalDuration">
    <summary>
      When the navigation starts to when the browser process finishes processing
      the DidCommitNavigation IPC, at which point the navigation is committed.
      Includes the time spent running any beforeunload handlers/dialogs.
    </summary>
  </metric>
  <metric name="TotalExcludingBeforeUnloadDuration">
    <summary>
      When the navigation starts to when the browser process finishes processing
      the DidCommitNavigation IPC, at which point the navigation is committed.
      Excludes the time spent running any beforeunload handlers/dialogs.
    </summary>
  </metric>
</event>

<event name="NavigationTiming" singular="True">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics associated with main frame navigation.
  </summary>
  <metric name="FinalLoaderCallback">
    <summary>
      The time relative to navigation start that a callback for the navigation
      loader is last invoked for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FinalRequestStart">
    <summary>
      The time relative to navigation start that the final HTTP request is sent
      for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FinalResponseStart">
    <summary>
      The time relative to navigation start that the headers of the final HTTP
      response are received for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FirstLoaderCallback">
    <summary>
      The time relative to navigation start that a callback for the navigation
      loader is first invoked for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FirstRequestStart">
    <summary>
      The time relative to navigation start that the first HTTP request is sent
      for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="FirstResponseStart">
    <summary>
      The time relative to navigation start that the headers of the first HTTP
      response are received for the main resource of a main frame navigation.
    </summary>
  </metric>
  <metric name="NavigationCommitSent">
    <summary>
      The time relative to navigation start that navigation commit message for a
      main frame navigation is sent to a renderer process.
    </summary>
  </metric>
</event>

<event name="Network.DataUrls">
  <owner>nidhijaju@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Recorded per resource request when parsing for a data URL is completed.
  </summary>
  <metric name="IsImage" enum="Boolean">
    <summary>
      If the data URL is for an image resource.
    </summary>
  </metric>
  <metric name="ParseTime">
    <summary>
      The time taken (ms) to parse the data URL. This includes base64 decoding
      and building the response.
    </summary>
  </metric>
  <metric name="UrlLength">
    <summary>
      The length of the data URL, indicating the size of the resource.
    </summary>
  </metric>
</event>

<event name="NewTabPage.HistoryClusters">
  <owner>sophiechang@chromium.org</owner>
  <owner>tiborg@chromium.org</owner>
  <summary>
    Metrics related to a History Clusters module shown on the New Tab Page.
    Recorded for each History Clusters module shown on a 1P New Tab Page load,
    which can be multiple for a page load.
  </summary>
  <metric name="BelongsToBoostedCategory" enum="Boolean">
    <summary>
      Cluster is of a boosted category.
    </summary>
  </metric>
  <metric name="BelongsToMostSeenCategory" enum="Boolean">
    <summary>
      Cluster is of the most frequently seen category.
    </summary>
  </metric>
  <metric name="BelongsToMostUsedCategory" enum="Boolean">
    <summary>
      Cluster is of the most frequently used category.
    </summary>
  </metric>
  <metric name="DidDisableModule" enum="Boolean">
    <summary>
      Whether the user disabled the module.
    </summary>
  </metric>
  <metric name="DidDismissModule" enum="Boolean">
    <summary>
      Whether the user dismissed the specific journey shown in this module.
    </summary>
  </metric>
  <metric name="DidEngageWithModule" enum="Boolean">
    <summary>
      Whether the user engaged with the module.
    </summary>
  </metric>
  <metric name="DidMarkAsDone" enum="Boolean">
    <summary>
      Whether the user dismissed with positive intent the cluster shown in this
      module.
    </summary>
  </metric>
  <metric name="LayoutTypeShown" enum="NTPHistoryClustersModuleDisplayLayout">
    <summary>
      The layout type that was shown to the user for this module.
    </summary>
  </metric>
  <metric name="MinutesSinceMostRecentVisit">
    <summary>
      Minutes since the shown cluster's most recent visit, exponentially
      bucketed using GetExponentialBucketMin with a spacing of 1.3.
    </summary>
  </metric>
  <metric name="MostFrequentSeenCategoryCount">
    <summary>
      The number of times the most frequently seen category by a user occurred
      in a fixed time period.
    </summary>
  </metric>
  <metric name="MostFrequentUsedCategoryCount">
    <summary>
      The number of times the most frequently used category by a user occurred
      in a fixed time period.
    </summary>
  </metric>
  <metric name="NumAbandonedCarts">
    <summary>
      Number of abandoned carts associated with the cluster.
    </summary>
  </metric>
  <metric name="NumAssociatedCategories">
    <summary>
      Number of categories associated with the cluster.
    </summary>
  </metric>
  <metric name="NumTimesSeenLast24h">
    <summary>
      Number of times the cluster was seen by the user in the last 24 hours.
    </summary>
  </metric>
  <metric name="NumTimesUsedLast24h">
    <summary>
      Number of times the cluster was used by the user in the last 24 hours.
    </summary>
  </metric>
  <metric name="NumTotalVisits">
    <summary>
      Number of total visits in the same cluster including ones that are not
      necessarily shown in the module.
    </summary>
  </metric>
  <metric name="NumUniqueHosts">
    <summary>
      Number of unique hosts represented in the cluster.
    </summary>
  </metric>
  <metric name="NumVisitsWithImage">
    <summary>
      Number of visits with an image to show.
    </summary>
  </metric>
</event>

<event name="NoStatePrefetch" singular="True">
  <owner>tbansal@chromium.org</owner>
  <summary>
    Metrics related to NoStatePrefetch that are recorded using the same UKM IDs
    as PageLoad.
  </summary>
  <metric name="PrefetchedRecently.FinalStatus">
    <summary>
      Final status of the nostate prefetch if one was recently attempted for
      either the committed URL of this navigation or for any URL in the redirect
      chain for the main frame resource for this navigation. page. Recorded as
      enum PrerenderFinalStatus in //tools/metrics/histograms/enums.xml.
    </summary>
  </metric>
  <metric name="PrefetchedRecently.Origin">
    <summary>
      Triggering origin of the nostate prefetch if one was recently attempted
      for either the committed URL of this navigation or for any URL in the
      redirect chain for the main frame resource for this navigation. Recorded
      as enum PrerenderOrigin in //tools/metrics/histograms/enums.xml.
    </summary>
  </metric>
  <metric name="PrefetchedRecently.PrefetchAge">
    <summary>
      Records the time (in milliseconds) from the start of the nostate prefetch
      to the time of commit of this navigation. Metric is recorded down to the
      nearest power of 2. Recorded only if a nostate prefetch was recently
      attempted for either the committed URL of this navigation or for any URL
      in the redirect chain for the main frame resource for this navigation.
    </summary>
  </metric>
</event>

<event name="Notification">
  <owner>peter@chromium.org</owner>
  <summary>
    A notification event corresponds with the entire lifespan of a single
    notification, and will be logged to UKM when the notification is deleted
    from the notification database.
  </summary>
  <metric name="ClosedReason">
    <summary>
      Enum for how the notification was closed. {user, developer, unknown}
    </summary>
  </metric>
  <metric name="DidReplaceAnotherNotification">
    <summary>
      Boolean value representing whether a tag is present and a previously shown
      notification has been replaced. For UKM logging, we treat a replacement
      notification as a new notification.
    </summary>
  </metric>
  <metric name="DidUserOpenSettings">
    <summary>
      Boolean value indicating whether the user accessed the Chrome provided
      settings from the notification.
    </summary>
  </metric>
  <metric name="HasBadge">
    <summary>
      Boolean value representing if a badge URL was included.
    </summary>
  </metric>
  <metric name="HasIcon">
    <summary>
      Boolean value representing if an icon URL was included.
    </summary>
  </metric>
  <metric name="HasImage">
    <summary>
      Boolean value representing if an image URL was included.
    </summary>
  </metric>
  <metric name="HasRenotify">
    <summary>
      Boolean value representing whether default notification indicators (sound,
      vibration, light) should be played again if the notification is replacing
      an older notification.
    </summary>
  </metric>
  <metric name="HasTag">
    <summary>
      Boolean value representing if a tag is present.
    </summary>
  </metric>
  <metric name="IsSilent">
    <summary>
      Boolean value representing whether default notification indicators (sound,
      vibration, light) should be suppressed.
    </summary>
  </metric>
  <metric name="NumActionButtonClicks">
    <summary>
      Number of clicks on developer provided action buttons.
    </summary>
  </metric>
  <metric name="NumActions">
    <summary>
      Number of developer specified actions that can be taken.
    </summary>
  </metric>
  <metric name="NumClicks">
    <summary>
      Number of clicks, excluding action buttons. I.e. clicks on the
      notification itself.
    </summary>
  </metric>
  <metric name="RequireInteraction">
    <summary>
      Boolean value representing whether the notification should remain onscreen
      indefinitely, rather than being auto-minimized to the notification center
      (if allowed by platform).
    </summary>
  </metric>
  <metric name="TimeUntilClose">
    <summary>
      The length of time, in ms, between when the notification was triggered and
      when it was closed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeUntilFirstClick">
    <summary>
      Time, in ms, between when the notification is shown and the first click.
    </summary>
  </metric>
  <metric name="TimeUntilLastClick">
    <summary>
      Time, in ms, between when the notification is shown and the last click.
    </summary>
  </metric>
</event>

<event name="Omnibox.EditUrlSuggestion.Share">
  <owner>nyquist@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    User pressed 'Share' while viewing edit URL suggestions which shares the
    current URL.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred; only records true values.
    </summary>
  </metric>
</event>

<event name="Omnibox.SuggestionUsed" singular="True">
  <owner>mahmadi@google.com</owner>
  <owner>chrome-desktop-search@google.com</owner>
  <summary>
    Recorded when the user uses the omnibox to search or navigate.
  </summary>
  <metric name="PageClassification" enum="OmniboxPageClassification">
    <summary>
      The type of page the user was on when they used the omnibox. Corresponds
      to the PageClassification enum in
      //third_party/metrics_proto/omnibox_event.proto
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ProviderType" enum="OmniboxProviderType">
    <summary>
      The provider type the selected suggestion came from. Corresponds to the
      ProviderType enum in //third_party/metrics_proto/omnibox_event.proto.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ResultType" enum="OmniboxResultType">
    <summary>
      The type of the suggestion the user selected in the omnibox. Corresponds
      to the ResultType enum in //third_party/metrics_proto/omnibox_event.proto.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ResultTypeGroup" enum="ClientSummarizedResultType">
    <summary>
      A value that indicates if the user searched or navigated from the omnibox.
      Corresponds to the ClientSummarizedResultType enum in
      //components/omnibox/browser/omnibox_metrics_provider.h.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SelectedIndex">
    <summary>
      The index of the suggestion that the user selected in the omnibox popup.
    </summary>
  </metric>
  <metric name="TimeSinceLastFocusMs">
    <summary>
      The amount of time, in milliseconds, since the user last focused the
      omnibox until they searched or navigated from the omnibox. Bucketed into
      exponential intervals with a standard bucket_spacing of 2.0.
    </summary>
  </metric>
  <metric name="TypedLength">
    <summary>
      The number of characters the user typed, excluding autocompletion.
    </summary>
  </metric>
  <metric name="TypingDurationMs">
    <summary>
      The amount of time, in milliseconds, since the user first began modifying
      the text in the omnibox until they searched or navigated from the omnibox.
      Bucketed into exponential intervals with a standard bucket_spacing of 2.0.
    </summary>
  </metric>
  <metric name="ZeroPrefixContextualSearchShown" enum="Boolean">
    <summary>
      Whether at least one zero-prefix Contextual Search suggestion was shown in
      the Omnibox session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ZeroPrefixLensActionShown" enum="Boolean">
    <summary>
      Whether at least one zero-prefix Lens Action suggestion was shown in the
      Omnibox session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ZeroPrefixSearchShown" enum="Boolean">
    <summary>
      Whether at least one zero-prefix Search suggestion was shown in the
      Omnibox session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ZeroPrefixUrlShown" enum="Boolean">
    <summary>
      Whether at least one zero-prefix URL suggestion was shown in the Omnibox
      session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="OmniboxSecurityIndicator.FormSubmission">
  <owner>meacer@chromium.org</owner>
  <summary>
    Recorded when a form is submitted on an HTTPS page. Used to understand any
    regression introduced by updated omnibox security indicators.
  </summary>
  <metric name="Submitted">
    <summary>
      Placeholder metric, always true.
    </summary>
  </metric>
</event>

<event name="OptimizationGuide" singular="True">
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Optimization guide metrics associated with a page load. It is recorded when
    the optimization guide was consulted in making a decision for the page load.
    See //components/optimization_guide/.
  </summary>
  <metric name="NavigationHintsFetchAttemptStatus"
      enum="OptimizationGuideRaceNavigationFetchAttemptStatus">
    <summary>
      An enum value representing the status of a fetch attempt for the page load
      and what it contains (i.e. hosts or URLs). Captured at the start of the
      navigation.
    </summary>
  </metric>
  <metric name="NavigationHintsFetchRequestLatency">
    <summary>
      The duration (in milliseconds) for how long it took from the request to go
      out to when it was usable on the client. Only recorded if a fetch was
      initiated for the navigation. Will be recorded as INT64_MAX if the request
      did not complete successfully.
    </summary>
  </metric>
  <metric name="RegisteredOptimizationTypes">
    <summary>
      A bitmask of the optimization types that were registered at the start of
      the page load where each flipped bit corresponds to its int value in
      |optimization_guide::proto::OptimizationType|.
    </summary>
  </metric>
</event>

<event name="OptimizationGuide.AIPageContentAgent">
  <owner>chrome-intelligence-core@google.com</owner>
  <owner>khushalsagar@chromium.org</owner>
  <owner>abigailklein@chromium.org</owner>
  <owner>gklassen@chromium.org</owner>
  <summary>
    Metrics related to page content extraction. Only recorded when depth limit
    is exceeded.
  </summary>
  <metric name="NodeDepthLimitExceeded">
    <summary>
      Indicates that the node depth limit was exceeded while building
      AnnotatedPageContent.
    </summary>
  </metric>
</event>

<event name="OptimizationGuide.AnnotatedPageContent">
  <owner>chrome-intelligence-core@google.com</owner>
  <owner>rajendrant@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <owner>khushalsagar@chromium.org</owner>
  <summary>
    Metrics on the page content extracted from all frames in the page. The
    extraction can happen multiple times during the pageload to re-compute the
    changes, and each extraction will record the metrics.
  </summary>
  <metric name="ExtractionLatency">
    <summary>
      Page content extraction latency. The time taken to extract across all
      frames in the page.
    </summary>
  </metric>
  <metric name="Mode" enum="AIPageContentMode">
    <summary>
      The mode used for page content extraction.
    </summary>
  </metric>
  <metric name="NodeCount">
    <summary>
      Number of nodes in the page content.
    </summary>
  </metric>
  <metric name="OnCriticalPath" enum="Boolean">
    <summary>
      Whether the page content extraction was on the critical path.
    </summary>
  </metric>
  <metric name="TotalSize">
    <summary>
      Total size of the extracted page content.
    </summary>
  </metric>
  <metric name="WordsCount">
    <summary>
      Number of words in the web page. The searchable text (visible and
      invisible folded text) in the page is broken down by whitespace to get the
      word count.
    </summary>
  </metric>
</event>

<event name="OptimizationGuide.AnnotatedPdfContent">
  <owner>chrome-intelligence-core@google.com</owner>
  <owner>rajendrant@chromium.org</owner>
  <owner>sophiechang@chromium.org</owner>
  <summary>
    Metrics on the PDF pages. Recorded only for PDF pages, if a PDF renderer is
    attached to the main frame.
  </summary>
  <metric name="PdfPageCount">
    <summary>
      Number of pages in the PDF.
    </summary>
  </metric>
</event>

<event name="OptimizationGuide.PageContentExtraction">
  <owner>chrome-intelligence-core@google.com</owner>
  <owner>linnan@chromium.org</owner>
  <summary>
    Metrics related to the page settling and stability detection during page
    content extraction. Recorded once per committed primary main frame
    navigation when the page first becomes stable and ready for extraction.
  </summary>
  <metric name="IsSameDocument" enum="Boolean">
    <summary>
      Whether the navigation was a same-document navigation.
    </summary>
  </metric>
  <metric name="NavigationToReadyLatencyMs">
    <summary>
      The duration in milliseconds from when a main frame navigation commits
      until the page is considered stable and ready for extraction.
    </summary>
  </metric>
</event>

<event name="PageContentAnnotations2" singular="True">
  <owner>chrome-intelligence-core@google.com</owner>
  <owner>mcrouse@chromium.org</owner>
  <summary>
    Metrics on the content annotations of the page, one record per page load
    commit and has an annotation calculated on it. The metrics are recorded in a
    RAPPOR-style with low-entropy so only aggregate analysis can be performed.
  </summary>
  <metric name="CategoryClassifier.EducationScore">
    <summary>
      Records a low entropy representation of the education category score from
      the output of a page classifier model. The raw score is between 0 and 1,
      which is scaled to between 0 and 100, then placed into one of 16 linearly
      spaced buckets by dividing the score by the bucket size and taking the
      floor. The resulting bucket value has noise added with a probability of .5
      where the noise is randomly applied to each individual bit.
    </summary>
  </metric>
  <metric name="CategoryClassifier.ShoppingScore">
    <summary>
      Records a low entropy representation of the shopping category score from
      the output of a page classifier model. The raw score is between 0 and 1,
      which is scaled to between 0 and 100, then placed into one of 16 linearly
      spaced buckets by dividing the score by the bucket size and taking the
      floor. The resulting bucket value has noise added with a probability of .5
      where the noise is randomly applied to each individual bit.
    </summary>
  </metric>
  <metric name="VisibilityScore">
    <summary>
      Records a low entropy respresentation of the visibility score output by a
      content annotations model. The low entropy value is calculated using a
      RAPPOR-style calculation to enable analysis only on aggregated results.
      The raw score is between 0 and 1, scaled to between 0 and 100. The score
      is then placed into one of 16 linearly spaced buckets by dividing the
      score by the bucket size and taking the floor. The resulting bucket value
      has noise added with a probability of .5 where the noise is randomly
      applied to each individual bit.
    </summary>
  </metric>
</event>

<event name="PageDomainInfo">
  <owner>uthakore@chromium.org</owner>
  <owner>invernizzi@chromium.org</owner>
  <summary>
    Metrics that describe the domain of pages that successfully commit. One
    event is generated per page load that commits. Currently associated with
    LocalNetworkRequests UKM metric collection.
  </summary>
  <metric name="DomainType">
    <summary>
      An enum value representing the type of domain of the loaded page. The enum
      is defined in |LocalNetworkRequestsPageLoadMetricsObserver|. Possible
      values are 0 for unknown (should never be logged), 1 for pages with public
      domains, 2 for pages with private domains (IP addresses that are part of a
      reserved IP space not including localhost), or 4 for localhost.
    </summary>
  </metric>
</event>

<event name="PageForegroundSession">
  <owner>sullivan@chromium.org</owner>
  <summary>
    Total time in foreground in milliseconds, recorded each time the page is
    backgrounded. May be recorded multiple times for a single page visit.
  </summary>
  <metric name="ForegroundDuration">
    <summary>
      Total time in foreground in milliseconds, recorded each time the page is
      backgrounded.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ForegroundTotalInputDelay">
    <summary>
      sum(Input Delay), recorded each time the page is backgrounded. The Input
      Delay refers to the duration between the hardware timestamp and the start
      of event processing on the main thread for the meaningful input. In ms.
    </summary>
  </metric>
</event>

<event name="PageInfoBubble">
  <owner>dullweber@chromium.org</owner>
  <owner>chrome-privacy-core@google.com</owner>
  <summary>
    Recorded when an action on the Page Info Bubble (aka Origin Info Bubble or
    WebsiteSettings Bubble) is taken. May be recorded multiple times for a
    single page visit.
  </summary>
  <metric name="ActionTaken" enum="WebsiteSettingsAction">
    <summary>
      Records an enum value representing which action on the Page Info Bubble
      was taken.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PageLifecycleMetricsOnNewPageCommit" singular="True">
  <owner>chikamune@chromium.org</owner>
  <owner>chrome-loading@google.com</owner>
  <summary>
    Metrics for the previous page's PageLifecycle events on the new page's
    commit. This event is saved on the new page that is about to commit.
  </summary>
  <metric name="PageLifecycleEventsTotalProcessingTime">
    <summary>
      Measures the total duration in milliseconds to run event handlers for the
      previous page's lifecycle events (e.g., pagehide, visibilitychange) upon
      the new page's commit.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PageLoad" singular="True">
  <owner>sullivan@chromium.org</owner>
  <owner>chrome-metrics-team@google.com</owner>
  <summary>
    Core metrics associated with web page loads.
  </summary>
  <metric name="CpuTime">
    <summary>
      Amount of CPU wall time over the duration of a page load, while the page
      is in the foreground. Measured in milliseconds.
    </summary>
  </metric>
  <metric name="DayOfWeek">
    <summary>
      The day of the week when the page load was initiated. The time is measured
      in the local time zone according to the system clock. Only collected for
      page loads that start while on foreground.
    </summary>
  </metric>
  <metric
      name="DocumentTiming.ActualNavigationStartToDOMContentLoadedEventFiredMs">
    <summary>
      The duration in milliseconds from the actual navigation start to the
      DOMContentLoadedEventFired event, excluding the time spent waiting for
      user interaction in beforeunload dialogs. This includes the time spent
      running beforeunload JavaScript handlers.
    </summary>
  </metric>
  <metric name="DocumentTiming.NavigationToDOMContentLoadedEventFired">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the DOMContentLoaded event is fired, for main frame
      documents.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DocumentTiming.NavigationToLoadEventFired">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the load event is fired, for main frame documents.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DocumentTiming.ParseStartToDOMContentLoadedEventFiredMs">
    <summary>
      The duration in milliseconds from the parse start to the
      DOMContentLoadedEventFired event.
    </summary>
  </metric>
  <metric name="DurationSinceLastVisitSeconds">
    <summary>
      The duration since the last visit to this URL in seconds, if the user has
      visited the URL before. Recorded as -1 if the user has not visited the URL
      before, or if the History service is unavailable or slow to respond. Any
      duration that exceeds 30 days will be recorded as 30 days, so in practice,
      if this duration indicates 30 days, it can be anything from 30 to the
      maximum duration that local history is stored.
    </summary>
  </metric>
  <metric name="Experimental.InputToNavigationStart">
    <summary>
      Measures the time in milliseconds from when the OS level input event
      occurred which triggered a navigation, until the navigation was started.
      Only set if the code can trace back to the original input event. Some
      known cases where it is missing: crbug.com/889223 crbug.com/893162
      crbug.com/897837 crbug.com/897840
    </summary>
  </metric>
  <metric
      name="Experimental.LayoutInstability.CumulativeShiftScoreAtFirstOnHidden">
    <summary>
      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred on the page (including all subframes) until the first time the
      page moves from the foreground to the background. This metric's integral
      value is 100x the fractional cumulative layout shift score described in
      the explainer. Stable since M98. Log of major changes:
      http://bit.ly/chrome-speed-metrics-changelog. This metric is trying to
      record the layout shift values which are not able to be recorded in
      LayoutInstability.CumulativeShiftScore for some reasons.
    </summary>
  </metric>
  <metric
      name="Experimental.LayoutInstability.MaxCumulativeShiftScoreAtFirstOnHidden.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window until the first time the page moves from
      the foreground to the background. The gap between two consecutive shifts
      in a window is not bigger than 1000ms and the maximum window size is
      5000ms. This metric's integral value is 100x the fractional cumulative
      layout shift score described in the explainer. This metric is trying to
      record the layout shift values which are not able to be recorded in
      LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms
      for some reasons.
    </summary>
  </metric>
  <metric name="Experimental.Navigation.UserInitiated">
    <summary>
      True if this navigation was initiated by user input. For renderer
      navigations, only true if the code can trace back to the original input
      event. Some known cases where it is missing: crbug.com/889223
      crbug.com/897837 crbug.com/897840
    </summary>
  </metric>
  <metric name="Experimental.TotalForegroundDuration">
    <summary>
      Re-adding experimental version of TotalForegroundDuration to allow for an
      analysis of the now obsolete field. This will help inform a discrepency
      found when switching to the PageTiming.TotalForegroundDuration field.
    </summary>
  </metric>
  <metric name="HourOfDay">
    <summary>
      The hour of the day when the page load was initiated. The time is measured
      in the local time zone according to the system clock. Only collected for
      page loads that start while on foreground.
    </summary>
  </metric>
  <metric name="InteractiveTiming.FirstInputDelay4">
    <summary>
      Measures First Input Delay, the duration between the hardware timestamp
      and the start of event processing on the main thread for the first
      meaningful input per navigation. See https://goo.gl/tr1oTZ for a detailed
      explanation. In ms. Log of major changes:
      http://bit.ly/chrome-speed-metrics-changelog
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InteractiveTiming.FirstInputTimestamp4">
    <summary>
      The duration between navigation start and the hardware timestamp of the
      first meaningful input per navigation. See https://goo.gl/tr1oTZ for a
      detailed explanation. In ms.
    </summary>
  </metric>
  <metric name="InteractiveTiming.FirstScrollDelay">
    <summary>
      Measures the time, in milliseconds, from when a user starts scrolling
      until the result shows up on screen if the scroll was the first scroll
      since navigation.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InteractiveTiming.FirstScrollTimestamp">
    <summary>
      The duration between navigation start and the timestamp of the first
      scroll per navigation. In ms. This is rounded down to the nearest
      exponential bucket.
    </summary>
  </metric>
  <metric name="InteractiveTiming.INPOffset">
    <summary>
      The one-based offset of the interaction in the list of all interactions in
      this page load which was the INP (https://web.dev/inp).
    </summary>
  </metric>
  <metric name="InteractiveTiming.INPTime">
    <summary>
      The time (in milliseconds from navigation start) of the interaction which
      was the INP (https://web.dev/inp).
    </summary>
  </metric>
  <metric name="InteractiveTiming.NumInteractions">
    <summary>
      The number of distinct user interactions. See definition of user
      interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric
      name="InteractiveTiming.UserInteractionLatency.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      page load, in ms. For this metric, we measure the latency of user
      interactions by Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric
      name="InteractiveTiming.UserInteractionLatencyAtFirstOnHidden.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      page load, in ms. For this metric, we measure the latency of user
      interactions by Responsiveness.UserInteraction.MaxEventDuration. We record
      it when a page is moved from the foreground to the background for the
      first time. This metric is trying to record the INP values which are not
      able to be recorded in
      InteractiveTiming.UserInteractionLatency.HighPercentile2.MaxEventDuration
      for some reasons.
    </summary>
  </metric>
  <metric name="InteractiveTiming.WorstUserInteractionLatency.MaxEventDuration">
    <summary>
      The maximum value of user interaction latency of a page load, in ms. For
      this metric, we measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration. Each type of interaction
      has its own budget.
    </summary>
  </metric>
  <metric name="InteractiveTimingBeforeSoftNavigation.INPOffset">
    <summary>
      The one-based offset of the interaction in the list of all interactions in
      this page load which was the INP before the first soft navigation
      (https://web.dev/inp).
    </summary>
  </metric>
  <metric name="InteractiveTimingBeforeSoftNavigation.INPTime">
    <summary>
      The time (in milliseconds from navigation starte) of the interaction which
      was the INP before the first soft navigation (https://web.dev/inp).
    </summary>
  </metric>
  <metric name="InteractiveTimingBeforeSoftNavigation.NumInteractions">
    <summary>
      The number of distinct user interactions before any soft navigation
      happens. It includes the user interaction that triggers the 1st soft
      navigtion. See definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric
      name="InteractiveTimingBeforeSoftNavigation.UserInteractionLatency.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      page load before any soft navigation happens, in ms. For this metric, we
      measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsCrossProcessNavigation">
    <owner>arthursonzogni@chromium.org</owner>
    <summary>
      Whether the navigation resulted in the main frame being hosted in a
      different renderer process than the current document or not.
    </summary>
  </metric>
  <metric name="IsExistingBookmark" enum="Boolean">
    <summary>
      Marked true if the page was already bookmarked when the navigation
      committed.
    </summary>
  </metric>
  <metric name="IsExistingPartOfTabGroup" enum="Boolean">
    <summary>
      Marked true if the page was already part of a tab group when the
      navigation committed.
    </summary>
  </metric>
  <metric name="IsNewBookmark" enum="Boolean">
    <summary>
      Roughly: measures if the page was newly bookmarked. Specifically: this is
      marked true if the page was not bookmarked when the navigation committed,
      and is bookmarked at the end of the page lifetime.

      Note, this means this boolean is mutually exclusive with
      IsExistingBookmark.

      Also note, this means that a page that is bookmarked, and then
      sebsequently un-bookmarked is counted as false.
    </summary>
  </metric>
  <metric name="IsNTPCustomLink" enum="Boolean">
    <summary>
      Marked true if the page has been explicitly added (by the user) to the
      list of custom links displayed in the NTP. Links added to the NTP by
      History TopSites don't count for this. Always false on Android, because
      Android does not have NTP custom links.
    </summary>
  </metric>
  <metric name="IsPlacedInTabGroup" enum="Boolean">
    <summary>
      Roughly: measures if the page was added to a tab group. Specifically: this
      is marked true if the page was not part of a tab group when the navigation
      committed, and is part of a tab group at the end of the page lifetime.

      Note, this means this boolean is mutually exclusive with
      IsExistingPartOfTabGroup.

      Also note, this means that a page that is added, and then sebsequently
      removed from a tab group is counted as false.
    </summary>
  </metric>
  <metric name="IsScopedSearchLikeNavigation" enum="Boolean">
    <summary>
      Marked true if the page was eligible for a scoped search when the
      navigation committed.
    </summary>
  </metric>
  <metric name="LayoutInstability.CumulativeShiftScore">
    <summary>
      Deprecated as of 04/23. It is still reported, but most users should use
      PageLoad.LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms.

      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred on the page (including all subframes) during the session. This
      metric's integral value is 100x the fractional cumulative layout shift
      score described in the explainer. Stable since M79; previous versions are
      experimental and subject to fluctuation between releases. Log of major
      changes: http://bit.ly/chrome-speed-metrics-changelog
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LayoutInstability.CumulativeShiftScore.BeforeInputOrScroll">
    <summary>
      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred on the page (including all subframes) during the session, before
      any user input or scroll (in any frame). This metric's integral value is
      100x the fractional cumulative layout shift score described in the
      explainer.
    </summary>
  </metric>
  <metric name="LayoutInstability.CumulativeShiftScore.MainFrame">
    <summary>
      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred in the main frame during the session. This metric's integral
      value is 100x the fractional cumulative layout shift score described in
      the explainer.
    </summary>
  </metric>
  <metric
      name="LayoutInstability.CumulativeShiftScore.MainFrame.BeforeInputOrScroll">
    <summary>
      Measures the cumulative layout shift (bit.ly/lsm-explainer) that has
      occurred in the main frame during the session, before any user input or
      scroll. This metric's integral value is 100x the fractional cumulative
      layout shift score described in the explainer.
    </summary>
  </metric>
  <metric
      name="LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window. The gap between two consecutive shifts
      in a window is not bigger than 1000ms and the maximum window size is
      5000ms. This metric's integral value is 100x the fractional cumulative
      layout shift score described in the explainer.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric
      name="LayoutInstabilityBeforeSoftNavigation.MaxCumulativeShiftScore.MainFrame.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window before any soft navigation happens. The
      gap between two consecutive shifts in a window is not bigger than 1000ms
      and the maximum window size is 5000ms. This metric's integral value is
      100x the fractional cumulative layout shift score described in the
      explainer.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="MainDocumentSequenceNumber">
    <owner>arthursonzogni@chromium.org</owner>
    <summary>
      An id for the main frame's document associated with the current
      navigation. It doesn't change for same-document navigations and when
      navigating back to the same document. Unique during the browsing session.
    </summary>
  </metric>
  <metric name="MainFrameResource.ConnectDelay">
    <summary>
      The duration between the start of the connection establishment to the end
      of the connection establishment to the origin of the main frame request.
      In ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.DNSDelay">
    <summary>
      The duration between the start of the DNS resolution to the end for the
      origin of the main frame request. In ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.HttpProtocolScheme">
    <summary>
      HTTP Protocol scheme of the connection using which the main frame response
      was fetched. Recorded as HttpProtocolScheme enum in
      tools/metrics/histograms/enum.xml.
    </summary>
  </metric>
  <metric name="MainFrameResource.NavigationStartToConnectStart">
    <owner>nidhijaju@chromium.org</owner>
    <owner>chrome-loading@google.com</owner>
    <summary>
      The duration from the start of the navigation to the start of the
      connection establishment to the origin of the main frame request. In ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.NavigationStartToReceiveHeadersStart">
    <summary>
      The duration from the start of the navigation to the start of the response
      headers being received, in ms. The start of the response headers include
      early hints. This is TTFB in CruX.
    </summary>
  </metric>
  <metric name="MainFrameResource.NavigationStartToRequestStart">
    <summary>
      The duration from the start of the navigation to the start of the main
      frame request. This includes the time to process any redirects on the main
      frame request. In ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.RedirectCount">
    <summary>
      The number of main frame redirects that occurred before commit. Unset if
      there were no redirects.
    </summary>
  </metric>
  <metric name="MainFrameResource.RequestHadCookies" enum="Boolean">
    <summary>
      A boolean indicating if any mainpage request in the redirect chain or
      committed request had cookies set on it. Only set when a query result was
      received from the cookie manager before event recording.
    </summary>
  </metric>
  <metric name="MainFrameResource.RequestHasNoStore" enum="Boolean">
    <summary>
      A boolean indicating if any mainpage resource has a 'Cache-control:
      no-store' response header. Recorded only for main frame request.
    </summary>
  </metric>
  <metric name="MainFrameResource.RequestStartToReceiveHeadersEnd">
    <summary>
      The duration from when the request was started to the time when its
      response headers were received. Recorded only for the main frame request.
      In ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.RequestStartToSendStart">
    <summary>
      The duration from when the request was started to the time when its
      request headers were sent. Recorded only for the main frame request. In
      ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.SendStartToReceiveHeadersEnd">
    <summary>
      The duration from when the request headers were sent to when its response
      headers were received. Recorded only for the main frame request. In ms.
    </summary>
  </metric>
  <metric name="MainFrameResource.SocketReused">
    <summary>
      True if the socket was reused when establishing connection to the origin
      of the main frame request.
    </summary>
  </metric>
  <metric name="Navigation.InitiatorLocation">
    <summary>
      page_load_metrics::NavigationHandleUserData::InitiatorLocation enum value.
      This field is used for identifying the types of prerender trigger.
    </summary>
  </metric>
  <metric name="Navigation.PageEndReason3" enum="PageEndReason">
    <summary>
      The |page_load_metrics::PageEndReason| for the main frame navigation of
      this page load. Replaced Navigation.PageEndReason2 on January 2021 to get
      rid of END_HIDDEN and use END_APP_BACKGROUND on cases where the metrics
      are flushed and the app enters the background.
    </summary>
  </metric>
  <metric name="Navigation.PageTransition">
    <summary>
      The |ui::PageTransition| for the main frame navigation of this page load.
    </summary>
  </metric>
  <metric name="NavigationEntryOffset">
    <owner>arthursonzogni@chromium.org</owner>
    <summary>
      Difference between the last committed navigation entry index before and
      after the commit of this navigation.
    </summary>
  </metric>
  <metric name="NavigationTiming.ActualNavigationStartToNavigationCommitSentMs">
    <summary>
      The duration in milliseconds from the actual navigation start to when the
      navigation commit IPC is sent to the renderer, excluding the time spent
      waiting for user interaction in beforeunload dialogs. This includes the
      time spent running beforeunload JavaScript handlers.
    </summary>
  </metric>
  <metric name="NavigationTiming.ActualNavigationStartToNavigationStartMs">
    <summary>
      The duration in milliseconds from the actual navigation start to the
      navigation start (when beforeunload handlers have finished), excluding the
      time spent waiting for user interaction in beforeunload dialogs. This
      includes the time spent running beforeunload JavaScript handlers.
    </summary>
  </metric>
  <metric name="NavigationTiming.InteractionToActualNavigationStartMs">
    <summary>
      The duration in milliseconds from the user interaction that started the
      navigation to the actual navigation start.
    </summary>
  </metric>
  <metric name="NavigationTiming.InteractionToNavigationStartMs">
    <summary>
      The duration in milliseconds from the user interaction that started the
      navigation to the navigation start, excluding the time spent in
      beforeunload handlers.
    </summary>
  </metric>
  <metric name="NavigationTiming.NavigationCommitSentToParseStartMs">
    <summary>
      The duration in milliseconds from when the navigation commit IPC is sent
      to the renderer to when the parser starts.
    </summary>
  </metric>
  <metric name="NavigationTiming.NavigationStartToNavigationCommitSentMs">
    <summary>
      The duration in milliseconds from the navigation start to when the
      navigation commit IPC is sent to the renderer.
    </summary>
  </metric>
  <metric name="Net.CacheBytes2">
    <summary>
      The total number of body bytes loaded from cache for all resources on the
      page. This includes the http and memory cache. This is rounded down to the
      nearest exponential bucket (with a bucket spacing factor of 1.3).
    </summary>
  </metric>
  <metric name="Net.DownstreamKbpsEstimate.OnNavigationStart">
    <owner>tbansal@chromium.org</owner>
    <summary>
      The downstream throughput (in kilobits per second) for this page load, at
      the time the navigation for this page load was initiated.
    </summary>
  </metric>
  <metric name="Net.EffectiveConnectionType2.OnNavigationStart">
    <summary>
      The |SystemProfileProto::Network::EffectiveConnectionType| at the time the
      navigation for this page load was initiated.
    </summary>
  </metric>
  <metric name="Net.ErrorCode.OnFailedProvisionalLoad">
    <summary>
      The |net::Error| code for this page load. Only logged for failed
      provisional navigations.
    </summary>
  </metric>
  <metric name="Net.HttpResponseCode">
    <summary>
      The HTTP response code (e.g., 200, 404, etc.) associated with the main
      frame page load.
    </summary>
  </metric>
  <metric name="Net.HttpRttEstimate.OnNavigationStart">
    <summary>
      The HTTP round trip time estimate for this page load, at the time the
      navigation for this page load was initiated.
    </summary>
  </metric>
  <metric name="Net.ImageBytes2">
    <summary>
      The total number of bytes loaded from the network for images on the page.
      This is rounded down to the nearest exponential bucket (with a bucket
      spacing factor of 1.3). On mobile this only records bytes up until the
      page/app is backgrounded.
    </summary>
  </metric>
  <metric name="Net.ImageSubframeBytes2">
    <summary>
      The total number of bytes loaded from the network for images on the
      subframes of the page. This is rounded down to the nearest exponential
      bucket (with a bucket spacing factor of 1.3). On mobile this only records
      bytes up until the page/app is backgrounded.
    </summary>
  </metric>
  <metric name="Net.JavaScriptBytes2">
    <summary>
      The sum of decoded body lengths of all JavaScript resources that completed
      loading on the page. This is rounded down to the nearest exponential
      bucket (with a bucket spacing factor of 1.3). On mobile this only records
      bytes up until the page/app is backgrounded.
    </summary>
  </metric>
  <metric name="Net.JavaScriptMaxBytes2">
    <summary>
      The max of decoded body lengths of all JavaScript resources that completed
      loading on the page. This is rounded down to the nearest exponential
      bucket (with a bucket spacing factor of 1.3). On mobile this only records
      bytes up until the page/app is backgrounded.
    </summary>
  </metric>
  <metric name="Net.MediaBytes2">
    <summary>
      The total number of bytes loaded from the network for media (video, audio)
      on the page. This is rounded down to the nearest exponential bucket (with
      a bucket spacing factor of 1.3). On mobile this only records bytes up
      until the page/app is backgrounded.
    </summary>
  </metric>
  <metric name="Net.NetworkBytes2">
    <summary>
      The total number of bytes loaded from the network for all resources on the
      page, including incomplete resources and headers. This is rounded down to
      the nearest exponential bucket (with a bucket spacing factor of 1.3). On
      mobile this only records bytes up until the page/app is backgrounded.
    </summary>
  </metric>
  <metric name="Net.TransportRttEstimate.OnNavigationStart">
    <summary>
      The transport round trip time estimate for this page load, at the time the
      navigation for this page load was initiated.
    </summary>
  </metric>
  <metric name="OmniboxUrlCopied" enum="Boolean">
    <summary>
      Marked true if the user copied the page's URL from the omnibox at any time
      for this page load.
    </summary>
  </metric>
  <metric name="PageTiming.ForegroundDuration">
    <summary>
      For page loads that start in the foreground, measures the duration of time
      in milliseconds until one of the following events occurs: the load of the
      main resource fails, the page load is stopped, the tab hosting the page is
      closed, the render process hosting the page goes away, a new navigation
      which later commits is initiated in the same tab, or the tab hosting the
      page is backgrounded. This metric has a very long tail, for pages that
      spend a long period of time in the foreground. As such, use of the mean or
      tail values are not recommended.
    </summary>
  </metric>
  <metric name="PageTiming.NavigationToFailedProvisionalLoad">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the provisional load failed. Only measures provisional
      loads that failed in the foreground.
    </summary>
  </metric>
  <metric name="PageTiming.TotalForegroundDuration">
    <summary>
      The total amount of time the page spent in the foreground, in
      milliseconds. Note that this metric adds all foreground durations
      occurring for the page. For example: if the page starts foregrounded
      during 1 second, then goes to the background for a while, then is
      foregrounded again for 2 seconds, and then is unloaded, this metric
      reports 3 seconds. To see metrics about consecutive foreground sessions,
      see the PageForegroundSession event instead. This metric is recorded at
      the end of each page load. As usual with PageLoad metrics, we consider app
      backgrounding on Android to be the end of page load as well as the app
      could be evicted by Android anytime after that happens.
    </summary>
  </metric>
  <metric name="PageTiming.UserTimingMarkFullyLoaded">
    <summary>
      When the page UserTiming mark API is called with the standard
      'mark_fully_loaded' name to mark that the page is fully loaded. If the
      mark is called more than once, the last is used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PageTiming.UserTimingMarkFullyVisible">
    <summary>
      When the page UserTiming mark API is called with the standard
      'mark_fully_visible' name to mark that the page is fully visible. If the
      mark is called more than once, the last is used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PageTiming.UserTimingMarkInteractive">
    <summary>
      When the page UserTiming mark API is called with the standard
      'mark_interactive' name to mark that the page is interactive. If the mark
      is called more than once, the last is used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PageVisitFinalStatus" enum="PageVisitFinalStatus">
    <summary>
      Determines the final status for this page load. That is, records whether
      the page was never foregrounded, was foregrounded but did not reach FCP,
      or did reach FCP. The metric is recorded at the end of each page load. As
      usual with PageLoad metrics, we consider app backgrounding on Android to
      be the end of page load as well as the app could be evicted by Android
      anytime after that happens.
    </summary>
  </metric>
  <metric name="PaintTiming.ActualNavigationStartToFirstContentfulPaintMs">
    <summary>
      The duration in milliseconds from the actual navigation start to the first
      contentful paint, excluding the time spent waiting for user interaction in
      beforeunload dialogs. This includes the time spent running beforeunload
      JavaScript handlers.
    </summary>
  </metric>
  <metric name="PaintTiming.ActualNavigationStartToLargestContentfulPaintMs">
    <summary>
      The duration in milliseconds from the actual navigation start to the
      largest contentful paint, excluding the time spent waiting for user
      interaction in beforeunload dialogs. This includes the time spent running
      beforeunload JavaScript handlers.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintBPP"
      enum="BitsPerPixelExponential">
    <summary>
      Measures the ratio of image file size (in bits) to displayed pixels for
      the LCP candidate. Bucketed into roughly exponential intervals to account
      for the wide range of encountered values (less than 1:100000 to greater
      than 10000:1). This metric is recorded whenever the LCP candidate is an
      image, and omitted when it is text.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageDiscoveryTime">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the image LCP element is requested. If the image
      LCP element is from a subframe, the difference in the navigation start of
      the main frame and that of the subframe is accounted for. This metric is
      not recorded when the LCP element is text or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageIsCrossOrigin"
      enum="Boolean">
    <summary>
      A bool that is set if the LCP element is an image that is cross-origin.
      This metric is not recorded when the LCP element is not an image, or the
      LCP element is not in the main frame.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageLoadEnd">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the LCP element(image) finishes loading. For
      animated images, this is when the image resource finishes loading
      completely, not the first frame time. See web.dev/optimize-lcp for more
      details. If the image LCP element is from a subframe, the difference in
      the navaigation start of the main frame and that of the subframe is
      accounted for. This metric is not recorded when the LCP element is text or
      video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageLoadStart">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the LCP element(image) starts loading. See
      web.dev/optimize-lcp for more details. If the image LCP element is from a
      subframe, the difference in the navaigation start of the main frame and
      that of the subframe is accounted for. This metric is not recorded when
      the LCP element is text or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintRequestPriority"
      enum="NetRequestPriority">
    <summary>
      Resource loading priority used for the LCP candidate. This metric is
      recorded whenever the LCP candidate is an image, and omitted when it is
      text or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintType">
    <summary>
      Indicates that type of the LargestContentfulPaint candidate. This value is
      a packed set of flags, defined in
      third_party/blink/public/common/performance/largest_contentful_paint_type.h
    </summary>
  </metric>
  <metric name="PaintTiming.NavigationToFirstContentfulPaint">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints content. A contentful paint
      includes a paint of text, image, SVG, or canvas. Log of major changes:
      http://bit.ly/chrome-speed-metrics-changelog
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PaintTiming.NavigationToFirstPaint">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the first paint is performed.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PaintTiming.NavigationToLargestContentfulPaint2">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints the largest content (text or
      image) within viewport, across all frames. See http://bit.ly/fcp_plus_plus
      for more details. Log of major changes:
      http://bit.ly/chrome-speed-metrics-changelog. Version 2 differs from the
      first version in that it includes content that has been removed from the
      page.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric
      name="PaintTiming.NavigationToLargestContentfulPaint2.CrossSiteSubFrame">
    <summary>
      Similar to PaintTiming.NavigationToLargestContentfulPaint2, this measures
      the time in milliseconds from the navigation start of the top-level frame
      to the time when the page first paints the largest content (text or image)
      in the cross-site subframe which is the top candidate of largest
      contentful paint. This metric is computed separately from the page-level
      LCP, it's recorded even in page loads where the page-level LCP is not that
      cross-site LCP.
    </summary>
  </metric>
  <metric name="PaintTiming.NavigationToLargestContentfulPaint2.MainFrame">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints the largest content (text or
      image) within viewport, in the main frame. Includes content that has been
      removed from the page. See http://bit.ly/fcp_plus_plus for more details.
    </summary>
  </metric>
  <metric name="PaintTiming.NavigationToLargestContentfulPaint2AtFirstOnHidden">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time when the page first paints the largest content (text or
      image) within viewport, across all frames. Recorded at the point when a
      page which has been opened in the foreground is moved to the background
      for the first time. See http://bit.ly/fcp_plus_plus for more details. Log
      of major changes: http://bit.ly/chrome-speed-metrics-changelog. This
      metric is trying to record the LCP values which are not able to be
      recorded in PaintTiming.NavigationToLargestContentfulPaint2 for some
      reasons.
    </summary>
  </metric>
  <metric name="PaintTiming.ParseStartToFirstContentfulPaintMs">
    <summary>
      The duration in milliseconds from the parse start to the first contentful
      paint.
    </summary>
  </metric>
  <metric name="PaintTiming.ParseStartToLargestContentfulPaintMs">
    <summary>
      The duration in milliseconds from the parse start to the largest
      contentful paint.
    </summary>
  </metric>
  <metric
      name="PaintTimingBeforeSoftNavigation.NavigationToLargestContentfulPaint2">
    <summary>
      Similar to PaintTiming.NavigationToLargestContentfulPaint2, except that it
      is recorded before the first soft navigation.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ParseTiming.ActualNavigationStartToParseStartMs">
    <summary>
      The duration in milliseconds from the actual navigation start to the parse
      start, excluding the time spent waiting for user interaction in
      beforeunload dialogs. This includes the time spent running beforeunload
      JavaScript handlers.
    </summary>
  </metric>
  <metric name="ParseTiming.NavigationToParseStart">
    <summary>
      Measures the time in milliseconds from navigation timing's navigation
      start to the time the parser started, for main frame documents.
    </summary>
  </metric>
  <metric name="RefreshRateThrottled" enum="Boolean">
    <summary>
      Records whether the refresh rate is throttled (capped to 30Hz) by Power
      Saver Mode for this Page Load, when the navigation starts. It is possible
      but very unlikely for this to change mid navigation, for instance due to a
      change by the user in settings or the battery being recharged above 20%.
    </summary>
  </metric>
  <metric name="SiteEngagementScore">
    <owner>mcrouse@chromium.org</owner>
    <owner>tbansal@chromium.org</owner>
    <summary>
      Measures the Site Engagement Score for the committed URL rounded to the
      nearest 10.
    </summary>
  </metric>
  <metric name="SiteInstanceRenderProcessAssignment"
      enum="SiteInstanceProcessAssignment">
    <summary>
      Records how the main frame's site instance was assigned to a renderer
      process.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SoftNavigationCount">
    <summary>
      Number of soft navigations detected by heuristics. See
      https://github.com/WICG/soft-navigations

      Soft navigations are JS-driven same-document navigations that are using
      the history API or the new Navigation API, triggered by a user gesture and
      meaningfully modify the DOM, replacing the previous content with new one.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ThirdPartyCookieBlockingEnabledForSite" enum="Boolean">
    <owner>dullweber@chromium.org</owner>
    <summary>
      Records whether third party cookie blocking was enabled for a site. Only
      recorded when third party cookies are bocked in general.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WasCached">
    <summary>
      Set to 1 if the main resource was served from cache.
    </summary>
  </metric>
  <metric name="WasDiscarded" enum="Boolean">
    <summary>
      Records whether the Page Load is the result of the page having previously
      been discarded because of performance interventions or critical memory
      pressure.
    </summary>
  </metric>
</event>

<event name="PageLoad.CaptchaFrameActivation">
  <owner>ryankalla@google.com</owner>
  <owner>potassium-anti-fraud-team@google.com</owner>
  <summary>
    Records when a frame from a known CAPTCHA provider is activated by the
    client. This could mean the user clicked or tapped on the frame.

    CAPTCHA frames are determined by matching the frame's src url against a list
    of known CAPTCHA frame url patterns. The list of known CAPTCHA url patterns
    is served via the component updater.
  </summary>
  <metric name="AgentContext" enum="CaptchaFrameAgentContext">
    <summary>
      This metric is split by whether an AI agent was active on the tab at the
      time of the frame activation. AI agent activity is determined by
      ActorKeyedService::IsActiveOnTab(), which is used by the Glic Agent.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CaptchaProvider" enum="CaptchaProvider">
    <summary>
      Records the CAPTCHA provider for the frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PageLoad.CaptchaFrameLoad">
  <owner>ryankalla@google.com</owner>
  <owner>potassium-anti-fraud-team@google.com</owner>
  <summary>
    Records when a sub-frame is loaded from a known CAPTCHA provider.

    CAPTCHA frames are determined by matching the frame's src url against a list
    of known CAPTCHA frame url patterns. The list of known CAPTCHA url patterns
    is served via the component updater.
  </summary>
  <metric name="AgentContext" enum="CaptchaFrameAgentContext">
    <summary>
      This metric is split by whether an AI agent was active on the tab at the
      time of the frame load. AI agent activity is determined by
      ActorKeyedService::IsActiveOnTab(), which is used by the Glic Agent.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CaptchaProvider" enum="CaptchaProvider">
    <summary>
      Records the CAPTCHA provider for the frame.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PageLoad.FromGoogleSearch" singular="True">
  <owner>sullivan@chromium.org</owner>
  <owner>mushan@chromium.org</owner>
  <summary>
    Recorded for page loads that were navigated to via Google Search.
  </summary>
  <metric name="GoogleSearchMode" enum="GoogleSearchMode">
    <summary>
      Google Search mode used by the user. This corresponds to the tab (e.g. web
      result, image results, video results, etc.) the user is on. This
      information is extracted from the tbm query parameter on the Search URL.
    </summary>
  </metric>
</event>

<event name="PageLoad.Internal" singular="True">
  <owner>npm@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Debugging metrics for the PageLoad event that do not require the same amount
    of sampling.
  </summary>
  <metric name="PaintTiming.LargestContentfulPaint.ContentType"
      enum="LargestContentType">
    <summary>
      Records whether the page's largest contentful paint, whose timestamp is
      measured by PageLoad.PaintTiming.NavigationToLargestContentfulPaint2,
      comes from text or image. This value is sampled and not on the PageLoad
      event, so it is not always recorded whenever
      PageLoad.PaintTiming.NavigationToLargestContentfulPaint2 is recorded.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaint.TerminationState"
      enum="LargestContentfulPaint.TerminationState">
    <summary>
      Records the state of the largest contentful paint algorithm at the time in
      which the browser attempts to record
      PageLoad.PaintTiming.NavigationToLargestContentfulPaint2. This state
      depends on whether there was a largest contentful paint candidate or not
      and the foreground state of the page. This value is sampled and not on the
      PageLoad event, so it is not always recorded whenever the browser attempts
      to record PageLoad.PaintTiming.NavigationToLargestContentfulPaint2.
    </summary>
  </metric>
</event>

<event name="PageLoad.ServiceWorkerControlled" singular="True">
  <owner>wanderview@chromium.org</owner>
  <owner>asamidoi@chromium.org</owner>
  <summary>
    Recorded for page loads controlled by a service worker.
  </summary>
</event>

<event name="PageLoad.SignedExchange" singular="True">
  <owner>horo@chromium.org</owner>
  <summary>
    Recorded for page loads which main resource is an inner response of a signed
    exchange.
  </summary>
  <metric name="ServedFromGoogleCache">
    <summary>
      Set to 1 if the main resource was served from Google's cache server.
    </summary>
  </metric>
</event>

<event name="PageLoadInitiatorForAdTagging" singular="True">
  <owner>yaoxia@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    Metrics about the initiator context of a page load (e.g. whether certain
    condition was true and/or what triggered the page load). Recorded when a
    page commits. The metrics are specific to ad related conditions or purposes.
  </summary>
  <metric name="FromAdClick" enum="Boolean">
    <summary>
      Whether the page was opened due to a click on an ad.
    </summary>
  </metric>
  <metric name="FromUser" enum="Boolean">
    <summary>
      Whether the navigation occurred due to a user action. This includes
      omnibox navigations as well as renderer initiated navigations with user
      activation.
    </summary>
  </metric>
</event>

<event name="PageWithPassword">
  <owner>battre@chromium.org</owner>
  <summary>
    Metrics about websites that contain password forms and the user's
    interactions with them. No events are created for pages that don't contain
    password forms.
  </summary>
  <metric name="FormManagerAvailable">
    <summary>
      Records whether Chrome was sufficiently aware of forms during various
      stages of saving a credential on the site, or whether saving was aborted
      due to absence of the corresponding form manager. Values correspond to the
      enum PasswordManagerMetricsRecorder::FormManagerAvailable.
    </summary>
  </metric>
  <metric name="PageLevelUserAction">
    <summary>
      Records if the user interacts with the password manager in a way that
      cannot (reliably) be attributed to a specific PasswordFormManager. Values
      correspond to the enum
      PasswordManagerMetricsRecorder::PageLevelUserAction.
    </summary>
  </metric>
  <metric name="ProvisionalSaveFailure">
    <summary>
      Records a provisional save failure in case the password manager cannot
      offer to save a credential. Recorded values correspond to the enum
      PasswordManagerMetricsRecorder::ProvisionalSaveFailure.
    </summary>
  </metric>
  <metric name="UserModifiedPasswordField">
    <summary>
      Records a 1 for every page on which a user has modified a password text
      field - regardless of how many password fields a page contains or the user
      modifies.
    </summary>
  </metric>
</event>

<event name="PaidContentPageLoad" singular="True">
  <owner>gklassen@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <summary>
    Records the paid content state of the page. This event is only recorded for
    pages that have paid content metadata.
  </summary>
  <metric name="HasPaidContent" enum="PaidContentState">
    <summary>
      The paid content state of the page.
    </summary>
  </metric>
</event>

<event name="PaintPreviewCapture" singular="True">
  <owner>ckitagawa@chromium.org</owner>
  <owner>fredmello@chromium.org</owner>
  <owner>mahmoudi@chromium.org</owner>
  <owner>vollick@chromium.org</owner>
  <summary>
    Metrics related to the performance of capturing Paint Previews.
  </summary>
  <metric name="BlinkCaptureTime">
    <summary>
      The amount of time spent painting in Blink to record a Paint Preview of
      the main frame.
    </summary>
  </metric>
  <metric name="CompressedOnDiskSize">
    <summary>
      The compressed on-disk size in KB of the captured artifacts. This is
      rounded down to the nearest exponential bucket (with a bucket ratio of
      1.3).
    </summary>
  </metric>
</event>

<event name="PartitionedCookiePresentV3">
  <owner>selya@chromium.org</owner>
  <owner>dylancutler@google.com</owner>
  <summary>
    Recorded when a page has a partitioned cookie present and the cookie's name
    is not receive-cookie-deprecation.
  </summary>
  <metric name="PartitionedCookiePresentV3" enum="Boolean">
    <summary>
      Records '1' if one or more partitioned cookies are present. This metric is
      only logged for sites that have partitioned cookies.
    </summary>
  </metric>
</event>

<event name="PasswordForm">
  <owner>battre@chromium.org</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Metrics about password forms on websites and the user's interactions with
    them. A separate event is generated for each password form discovered on a
    site.
  </summary>
  <metric name="ClassificationCorrectness.ConfirmationPassword"
      enum="PasswordManagerClassificationCorrectness">
    <summary>
      Records the correctness of a confirmation password field classification
      produced on the page load. Is recorded for successfully submitted password
      forms containing a confirmation password field. The classification is
      considered correct iff values in the new and in the confirmation password
      fields match. Recorded on the corresponding form manager destruction.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ClassificationCorrectness.CurrentPassword"
      enum="PasswordManagerClassificationCorrectness">
    <summary>
      Records the correctness of a current password field classification
      produced on the page load. Is recorded for successfully submitted password
      forms containing a current password field, for which the user had saved
      passwords. The classification is considered correct, if the field
      contained a previously saved password at the moment of submisison, and
      incorrect, if any other fields in the form contained a previosuly saved
      password. Recorded on the corresponding form manager destruction.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ClassificationCorrectness.NewPassword"
      enum="PasswordManagerClassificationCorrectness">
    <summary>
      Records the correctness of a new password field classification produced on
      the page load. Is recorded for successfully submitted password forms
      containing a new password field. The correctness is estimated based on
      previosuly saved credentials (if the field value was saved before, it's
      not a new password), and on whether the confirmation password field is
      present and validates form classification. Recorded on the corresponding
      form manager destruction.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ClassificationCorrectness.Username"
      enum="PasswordManagerClassificationCorrectness">
    <summary>
      Records the correctness of a username field classification produced on the
      page load. Is recorded for successfully submitted password forms
      containing a username field, for which the user had saved usernames. The
      classification is considered correct, if the field contained a previously
      saved username at the moment of submisison, and incorrect, if any other
      fields in the form contained a previosuly saved username. Recorded on the
      corresponding form manager destruction.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Context.FormSignature">
    <summary>
      Records a low entropy hash of the form signature in order to be able to
      distinguish two forms on the same site.
    </summary>
  </metric>
  <metric name="DynamicFormChanges">
    <summary>
      Records a bitmask of password form changes after the first time this form
      is seen by Password Manager. Recorded once per a form when the form is
      removed from DOM. Bit 0 - changes in number of fields, bit 1 - changes in
      fields renderer ids, bit 2 - changes in autocomplete attributes, bit 3 -
      changes in form control types, bit 4 - changes in field names.
    </summary>
  </metric>
  <metric name="Fill.FirstFillingResultInRenderer"
      enum="PasswordManagerFirstRendererFillingResult">
    <summary>
      Records whether the PasswordAutofillAgent in the renderer manages to fill
      credentials as instructed by the browser or records a failure reason
      otherwise. Only the outcome of the first attempt to fill is recorded.

      This is replicated as PasswordManager.FirstFillingResultInRenderer in UMA.
    </summary>
  </metric>
  <metric name="Fill.FirstWaitForUsernameReason"
      enum="PasswordManagerFirstWaitForUsernameReason">
    <summary>
      This metric records why the browser instructs the renderer not to fill the
      credentials on page load but to wait for the user to confirm the
      credential to be filled. Only the value of the first decision to fill is
      recorded.

      This is replicated as PasswordManager.FirstWaitForUsernameReason in UMA.
    </summary>
  </metric>
  <metric name="Generation.GeneratedPassword" enum="Boolean">
    <summary>
      Records '1' if the user has generated a password on this form.
    </summary>
  </metric>
  <metric name="Generation.GeneratedPasswordModified" enum="Boolean">
    <summary>
      Records '1' if the user has modified a generated a password on this form.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Generation.PopupShown" enum="PasswordGenerationPopupShown">
    <summary>
      Records an entry if (and only if) a popup was shown.
    </summary>
  </metric>
  <metric name="ManagerFill.Action">
    <summary>
      Records for each password form (and HTTP auth), whether the password
      manager has filled/provided credentials. Recorded values correspond to the
      enum ManagerAutofillEvent.
    </summary>
  </metric>
  <metric name="ManagerFill.Assistance" enum="PasswordManagerFillingAssistance">
    <summary>
      Records for each successful submission of a password form, the degree to
      which the user has been assisted by the password manager.

      This is replicated as PasswordManager.FillingAssistance in UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ManagerFill.AssistanceForSingleUsername"
      enum="SingleUsernameFillingAssistance">
    <summary>
      Records for each successful submission of a single username form, the
      degree to which the user has been assisted by the password manager.

      This is replicated as PasswordManager.FillingAssistanceForSingleUsername
      in UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ParsingDiffFillingAndSaving"
      enum="PasswordFormParsingDifference">
    <summary>
      Records comparison of username and password fields picked during parsing
      when the form is filled and when the form is saved. Recorded only if the
      form is submitted successfully, on corresponding form manager destruction.
    </summary>
  </metric>
  <metric name="ReadonlyWhenFilling">
    <summary>
      Records the readonly status encoded with parsing success after parsing for
      filling. The |value| is constructed as follows: The least significant bit
      says whether parsing succeeded (1) or not (0). The rest, shifted by one
      bit to the right is the FormDataParser::ReadonlyPasswordFields
      representation of the readonly status.
    </summary>
  </metric>
  <metric name="ReadonlyWhenSaving">
    <summary>
      Records the readonly status encoded with parsing success after parsing for
      creating pending credentials. The |value| is constructed the same way as
      for ReadonlyWhenFilling.
    </summary>
  </metric>
  <metric name="Saving.Prompt.Interaction" enum="PasswordBubbleDismissalReason">
    <summary>
      Records how the user interacted with a saving prompt.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Saving.Prompt.Shown" enum="Boolean">
    <summary>
      Records, for each password form seen by the password manager, whether the
      user was shown a prompt that asked for permission to save new credentials.
      In case a store() via the Credential Management API, a virtual password
      form is created, for which this metric is recorded.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Saving.Prompt.Trigger" enum="PasswordBubbleTrigger">
    <summary>
      Records the trigger of each password save bubble that was shown to the
      user to ask for permission to save new credentials.
    </summary>
  </metric>
  <metric name="Saving.ShowedManualFallbackForSaving">
    <summary>
      Records if a manual fallback for saving option was shown to the user (on
      Android this is recorded, even though the UI does not exist at the
      moment). This is a bit mask. 1 means a prompt was shown, 2 means the
      prompt was due to a generated password, 4 means the prompt was due to an
      update.
    </summary>
  </metric>
  <metric name="Submission.Indicator" enum="SubmissionIndicatorEvent">
    <summary>
      Records the event that led the password manager to believe the submission
      was successful. Metrics is recorded only when the password is saved.
    </summary>
  </metric>
  <metric name="Submission.Observed" enum="Boolean">
    <summary>
      Records whether a submission of a password form has been observered. The
      values 0 and 1 correspond to false and true respectively.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Submission.SubmissionResult"
      enum="PasswordFormSubmissionResult">
    <summary>
      Records the outcome of a password form submission.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Submission.SubmissionResult.GeneratedPassword"
      enum="PasswordFormSubmissionResult">
    <summary>
      Records the outcome of a password form submission for forms on which users
      generated passwords.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Submission.SubmittedFormType2" enum="PasswordFormType2">
    <summary>
      Records the presumed type (e.g. signup, login, change password) of a
      submitted password form.

      This is replicated as PasswordManager.SubmittedFormType2 in UMA.
    </summary>
  </metric>
  <metric name="Updating.Prompt.Interaction"
      enum="PasswordBubbleDismissalReason">
    <summary>
      Records how the user interacted with an updating prompt.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Updating.Prompt.Shown" enum="Boolean">
    <summary>
      Records, for each password form seen by the password manager, whether the
      user was shown a prompt that asked for permission to update existing
      credentials.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Updating.Prompt.Trigger" enum="PasswordBubbleTrigger">
    <summary>
      Records the trigger of each password update bubble that was shown to the
      user to ask for permission to update existing credentials.
    </summary>
  </metric>
  <metric name="User.Action.CorrectedUsernameInForm">
    <summary>
      Counts how many times the user corrected a username in a password form.
      This is only populated if events happened.
    </summary>
  </metric>
  <metric name="User.Action.EditedUsernameInBubble">
    <summary>
      Counts how many times the user edited a username in a password save/update
      bubble. This is only populated if events happened.
    </summary>
  </metric>
  <metric name="User.Action.SelectedDifferentPasswordInBubble">
    <summary>
      Counts how many times the user selected a different password in a
      save/update bubble. This is only populated if events happened.
    </summary>
  </metric>
  <metric name="User.Action.TriggeredManualFallbackForSaving">
    <summary>
      Counts how many times the user triggered the manual fallback for password
      saving. This is only populated if events happened.
    </summary>
  </metric>
</event>

<event name="PasswordManager.ChangeFlowOutcome" singular="True">
  <owner>otara@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Metrics related to the outcome of the password change flow. Recorded when
    the flow is stopped.
  </summary>
  <metric name="CoarseFinalPasswordChangeStatus"
      enum="CoarseFinalPasswordChangeState">
    <summary>
      Records the state at which the password change flow was stopped, either
      successful, failed or interrupted.

      This mirrors CoarseFinalPasswordChangeStatus in UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.ChangeRecovery" singular="True">
  <owner>otara@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Metrics related to the recovery flow of the password change feature. Records
    users enter and exit the recovery flow.
  </summary>
  <metric name="PasswordChangeRecoveryFlow"
      enum="PasswordChangeRecoveryFlowState">
    <summary>
      Records the start and the end of the password recovery flow. We will
      consider the start to be an interaction with a &quot;Trouble signing
      in&quot; button in the password autofill dropdown or a proactive recovery
      popup that we show if we detect a failed log-in attempt. The end of the
      flow is considered to be an updated primary password (the backup password
      becomes the primary password). This happens after the user accepts the
      &quot;update password&quot; bubble

      This mirrors PasswordChangeRecoveryFlow in UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.ChangeSubmission" singular="True">
  <owner>fiorellab@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Metrics related to password change submission flow. Recorded when password
    are saved by password change submission trajectory.
  </summary>
  <metric name="LogInWithPasswordChangeSubmission"
      enum="LogInWithChangedPasswordOutcome">
    <summary>
      Records whether or not a login is successful using either the primary or
      the backup password previously saved through password change submission
      flow. It is recorded at the moment of detecting a succesful or failed log
      in.

      This mirrors LogInWithPasswordChangeSubmission in UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.Classification">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Metrics for clientside password form classifications. Recorded when the
    field types are received by Password Manager after the model finishes
    execution, iff there is data available for the below metrics.
  </summary>
  <metric name="ModelPredictionsEmpty" enum="Boolean">
    <summary>
      Records if the predictions made by Password manager clientside
      classification model are empty (= contain only NO_SERVER_DATA values).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PasswordVsOtpFormType" enum="PasswordVsOtpFormType">
    <summary>
      Records whether a form is an OTP form, a normal multi-use password form,
      or a combination of both.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.FirstCCTPageLoad" singular="True">
  <owner>ioanap@chromium.org</owner>
  <owner>kazinova@google.com</owner>
  <summary>
    Logged on Android for the first page that a Chrome Custom Tab loads.
    Recorded when the primary page changes away from the first loaded one or
    when the WebContents is destroyed.
  </summary>
  <metric name="HasPasswordForm" enum="Boolean">
    <summary>
      True if there was a password form detected on the page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.LeakWarningDialog">
  <owner>jkeitel@google.com</owner>
  <owner>chrome-duplex@google.com</owner>
  <summary>
    Metrics related to leak warnings shown on login and password reset. Leak
    warning dialogs in Chrome aim to inform users about leaked credentials and
    advise to change them. We collect type of the dialog that is shown and the
    response of the user to it.
  </summary>
  <metric name="PasswordLeakDetectionDialogDismissalReason"
      enum="PasswordLeakDetectionDialogDismissalReason">
    <summary>
      Records the response to the password leak dialog.
    </summary>
  </metric>
  <metric name="PasswordLeakDetectionDialogType"
      enum="PasswordLeakDetectionDialogType">
    <summary>
      Records the type of the password leak dialog.
    </summary>
  </metric>
</event>

<event name="PasswordManager.NewlySavedPassword">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Metrics for newly saved credentials, recorded at the moment of saving.
  </summary>
  <metric name="HasEmptyUsername" enum="Boolean">
    <summary>
      Whether the password has an empty username.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsPasswordGenerated" enum="Boolean">
    <summary>
      Whether the password was generated by Chrome or typed manually by the
      user. Obsolete: The metric is not recorded in M131+. However this entry is
      kept to gather UKM data from pre-M131 clients.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.Parsing">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Metrics related to password form parsing. Recorded when the form is parsed
    for filling (so parsing for saving on every keystroke does not lead to
    metric recording) by Password Manager (so parsing by other interested
    components does not lead to metric recording). Recorded iff there is data
    for any of the metrics below (e.g. when the parsed form contains either
    current password fields, or fields irrelevant to password flow).
  </summary>
  <metric name="PasswordField.IsMasked" enum="Boolean">
    <summary>
      Reports whether the field predicted as password field in a parsed form is
      masked (has HTML type &quot;password&quot;) or not. Recorded iff form
      contains a field with PASSWORD type prediction.
    </summary>
  </metric>
  <metric name="UnrelatedFields.AnyFieldIsMasked" enum="Boolean">
    <summary>
      Reports whether any of the fields predicted to be unrelated to password
      flows is masked (has HTML type &quot;password&quot;) or not. Recorded iff
      the form contains fields with UNKNOWN_TYPE prediction.
    </summary>
  </metric>
</event>

<event name="PasswordManager.PasswordChangeSubmissionOutcome" singular="True">
  <owner>fiorellab@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Metrics reported after the change password form submission in the password
    change flow.
  </summary>
  <metric name="PasswordChangeSubmissionOutcome" enum="SubmissionOutcome">
    <summary>
      Records the change password form submission result (success or the error
      type). This is recorded when receiving a response from the optimization
      guide service to a request made with the representation of the web page
      where the submission happened.

      This mirrors PasswordManager.PasswordChangeSubmissionOutcome in UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.PasswordChangeTriggered">
  <owner>brunobraga@google.com</owner>
  <owner>chrome-duplex@google.com</owner>
  <summary>
    Metrics related to password change. The Password Checkup in Chrome Settings
    aims to help users find their leaked passwords. After getting list of
    compromised passwords, user can trigger password change.
  </summary>
  <metric name="PasswordChangeType" enum="PasswordChangeType">
    <summary>
      Records what type of password change the user triggers.
    </summary>
  </metric>
</event>

<event name="PasswordManager.PasswordFillingIOS">
  <owner>kazinova@google.com</owner>
  <owner>vsemeniuk@google.com</owner>
  <summary>
    Records password filling for IOS. The metric records whether the password
    filling is successful upon suggestion click.
  </summary>
  <metric name="FillingSuccess" enum="BooleanSuccess">
    <summary>
      A boolean indicating success or failure.
    </summary>
  </metric>
</event>

<event name="PasswordManager.SavedPassword">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Metrics for saved passwords, recorded at the moment of saving.
  </summary>
  <metric name="IsPasswordGenerated" enum="Boolean">
    <summary>
      Whether the password was generated by Chrome or typed manually by the
      user.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PasswordManager.WellKnownChangePasswordResult">
  <owner>kazinova@google.com</owner>
  <owner>chrome-password-manager-metrics-alerts@google.com</owner>
  <summary>
    Metrics related to the usage and support of .well-known/change-password. The
    .well-known/change-password standard is defined to redirect to the sites
    change password form. We collect whether a site supports the standard or
    not. https://wicg.github.io/change-password-url/
  </summary>
  <metric name="WellKnownChangePasswordResult"
      enum="WellKnownChangePasswordResult">
    <summary>
      Records if a site supports .well-known/change-password and if a url
      override was used or not.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PaymentApp.CheckoutEvents">
  <owner>smcgruer@chromium.org</owner>
  <owner>chrome-payments-eng@google.com</owner>
  <summary>
    Records checkout events as well as completion status for the invoked payment
    app when its origin is shown inside the payment handler modal window. This
    metric uses the specific PAYMENT_APP_ID ukm_source_id which is generated
    from the app's origin.
  </summary>
  <metric name="CompletionStatus" enum="PaymentRequestFlowCompletionStatus">
    <summary>
      How the Payment Request ended. This metric will only get recorded if a
      non-autofill payment app gets invoked to handle the request.
    </summary>
  </metric>
  <metric name="Events2">
    <summary>
      The 2.0 version of Events. Bitfield representing the events that occurred
      during the Payment Request. This metric will only get recorded if a
      non-autofill payment app gets invoked to handle the request. Values
      defined in the Event2 enum of components/payments/core/journey_logger.h.
    </summary>
  </metric>
</event>

<event name="PaymentRequest.CheckoutEvents">
  <owner>smcgruer@chromium.org</owner>
  <owner>chrome-payments-eng@google.com</owner>
  <metric name="CompletionStatus">
    <summary>
      How the Payment Request ended. Values defined in the CompletionStatus enum
      of components/payments/core/journey_logger.h.
    </summary>
  </metric>
  <metric name="Events2">
    <summary>
      The 2.0 version of Events. Bitfield representing the events that occurred
      during the Payment Request. Values defined in the Event2 enum of
      components/payments/core/journey_logger.h.
    </summary>
  </metric>
  <metric name="WindowSizeCheckRejectionReason"
      enum="PaymentRequestWindowSizeCheckRejectionReason">
    <summary>
      The reason why the browser window size check failed and the Payment
      Request or Payment Handler dialog was rejected.
    </summary>
  </metric>
</event>

<event name="Pepper.Broker" singular="True">
  <owner>raymes@chromium.org</owner>
  <summary>
    Event recorded when a flash instance connects to the broker, resulting in a
    channel being opened to the broker process.
  </summary>
</event>

<event name="PerformanceAPI.LongAnimationFrame">
  <owner>nrosenthal@chromium.org</owner>
  <owner>zuoaoyuan@chromium.org</owner>
  <summary>
    This event is associated with the LongAnimationFrame Web Platform API. The
    metrics are recorded when a long animation frame is detected and reported to
    the page. For more details see https://crbug.com/1392685.
  </summary>
  <metric name="Categorized3PScriptLongAnimationFrameCallbackContributors">
    <summary>
      A bitfield representation of third party technologies who have contributed
      at least one event/callback script that blocked the long animation frame
      for more than 5ms. The bitwise fields are defined by ThirdPartyTechnology
      enum in third_party/blink_renderer/core/timing/third_party_script_info.h.
    </summary>
  </metric>
  <metric
      name="Categorized3PScriptLongAnimationFrameScriptExecutionContributors">
    <summary>
      A bitfield representation of third party technologies who have contributed
      at least one script execution block that blocked the long animation frame
      for more than 5ms. The bitwise fields are defined by ThirdPartyTechnology
      enum in third_party/blink_renderer/core/timing/third_party_script_info.h.
    </summary>
  </metric>
  <metric name="DidPause" enum="Boolean">
    <summary>
      True if there was a pause (sync XHR, dialog) during the long frame.
    </summary>
  </metric>
  <metric name="Duration.DelayDefer">
    <summary>
      A positive or negative duration in milliseconds, representing the time
      between the desired time for rendering the frame and rendering it in
      practice. Positive means delayed, negative means deferred.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.EffectiveBlocking">
    <summary>
      The duration in milliseconds, representing the time the LoAF was blocking.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.LongScript.JSCompilation">
    <summary>
      The total duration of long-script JS compilation, in milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.LongScript.JSExecution">
    <summary>
      The total duration of long-script JS execution, not including compilation,
      in milliseconds.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.LongScript.JSExecution.EventListeners">
    <summary>
      The total duration spent in event listeners (e.g. onclick).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.LongScript.JSExecution.PromiseHandlers">
    <summary>
      The total duration spent in promise resolve/reject tasks.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.LongScript.JSExecution.ScriptBlocks">
    <summary>
      The total duration spent in script blocks (script element, import)
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.LongScript.JSExecution.UserCallbacks">
    <summary>
      The total duration spent in user callbacks (e.g. requestAnimationFrame).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.StyleAndLayout.Forced">
    <summary>
      The total duration of forced style and layout in long scripts.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.StyleAndLayout.RenderPhase">
    <summary>
      The total duration of the style and layout lifecycle phase, not including
      forced style and layout.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.Total">
    <summary>
      The duration of the long animation frame in milliseconds. Mirrors the
      value reported in PerformanceEntry.duration.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PerformanceAPI.LongTask">
  <owner>hpayer@chromium.org</owner>
  <owner>mlippautz@chromium.org</owner>
  <owner>ulan@chromium.org</owner>
  <summary>
    This event is associated with the LongTask Web Platform API. The metrics are
    recorded when a long task is detected and reported to the page. For more
    details see the design doc linked in https://crbug.com/1173527.
  </summary>
  <metric name="Duration">
    <summary>
      The duration of the long task in microseconds. Mirrors the value reported
      in PerformanceEntry.duration.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.V8.Execute">
    <summary>
      The total time in microseconds that is V8 spent in main-thread V8,
      including JS-time, but without time spent in callbacks to blink.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.V8.GC">
    <summary>
      The total time in microseconds that V8 spent collecting garbage within the
      long task.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.V8.GC.Full.Atomic">
    <summary>
      The total time in microseconds that V8 spent in the atomic pause of the
      full garbage collector within the long task.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.V8.GC.Full.Incremental">
    <summary>
      The total time in microseconds that V8 spent in the incremental pause of
      the full garbage collector within the long task.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Duration.V8.GC.Young">
    <summary>
      The total time in microseconds that V8 spent in the young garbage
      collector within the long task.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="StartTime">
    <summary>
      The duration in millseconds between the document navigation start and the
      long task start. Mirrors the value reported in PerformanceEntry.startTime.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PerformanceAPI.Memory">
  <owner>hpayer@chromium.org</owner>
  <owner>mlippautz@chromium.org</owner>
  <owner>ulan@chromium.org</owner>
  <summary>
    This event is associated with the performance.measureUserAgentSpecificMemory
    API. The metrics are recorded when the memory measurement is reported to the
    page. All values represent memory consumption in KB.
  </summary>
  <metric name="Dom">
    <summary>
      The total DOM memory measured in KB.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="JavaScript">
    <summary>
      The total JavaScript memory measured in KB.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="JavaScript.DedicatedWorker">
    <summary>
      The total JavaScript memory in the DedicatedWorker scope measured in KB.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Shared">
    <summary>
      The total shared memory measured in KB.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PerformanceAPI.Memory.Legacy">
  <owner>hpayer@chromium.org</owner>
  <owner>mlippautz@chromium.org</owner>
  <owner>ulan@chromium.org</owner>
  <summary>
    This event is associated with the performance.memory API. The metrics are
    recorded when the memory measurement is reported to the page. All values
    represent memory consumption in KB.
  </summary>
  <metric name="JavaScript">
    <summary>
      The JavaScript memory (usedJSHeapSize) measured in KB.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PerformanceManager.FreezingEligibility">
  <owner>fdoray@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Properties of a tab involved in determining its freezing eligibility.
    Recorded for each tab every minute (subsampled).
  </summary>
  <metric name="Audible" enum="Boolean">
    <summary>
      True if the page was audible over the last minute
    </summary>
  </metric>
  <metric name="BeingMirrored" enum="Boolean">
    <summary>
      True if the page was mirrored over the last minute
    </summary>
  </metric>
  <metric name="Capturing" enum="Boolean">
    <summary>
      True if the page captured audio, video, a window or the display over the
      last minute
    </summary>
  </metric>
  <metric name="ConnectedToDevice" enum="Boolean">
    <summary>
      True if the the page was connected to a device (USB, Bluetooth, Hid or
      Serial) over the last minute
    </summary>
  </metric>
  <metric name="HighestCPUAnyIntervalWithoutOptOut">
    <summary>
      Highest CPU usage for a group of same-origin frames on the page over any
      past 1 minute period during which no opt-out reason was applicable, in
      percentage of a core (100 = 100% of a core used for 1 minute). Exponential
      bucketing is applied.
    </summary>
  </metric>
  <metric name="HighestCPUCurrentInterval">
    <summary>
      Highest CPU usage for a group of same-origin frames on the page over the
      last 1 minute period, in percentage of a core (100 = 100% of a core used
      for 1 minute). Exponential bucketing is applied.
    </summary>
  </metric>
  <metric name="HoldingBlockingIndexedDBLock" enum="Boolean">
    <summary>
      True if the page held an IndexedDB lock blocking another page over the
      last minute
    </summary>
  </metric>
  <metric name="HoldingWebLock" enum="Boolean">
    <summary>
      True if the page held a Web Lock over the last minute
    </summary>
  </metric>
  <metric name="Loading" enum="Boolean">
    <summary>
      True if the page was in the loading state over the last minute
    </summary>
  </metric>
  <metric name="NotificationPermission" enum="Boolean">
    <summary>
      True if the page had the notification permission over the last minute
    </summary>
  </metric>
  <metric name="OriginTrialOptOut" enum="Boolean">
    <summary>
      True if the page was opted-out via origin trial over the last minute
    </summary>
  </metric>
  <metric name="RecentlyAudible" enum="Boolean">
    <summary>
      True if the page was recently audible over the last minute
    </summary>
  </metric>
  <metric name="RecentlyVisible" enum="Boolean">
    <summary>
      True if the page was recently visible over the last minute
    </summary>
  </metric>
  <metric name="Visible" enum="Boolean">
    <summary>
      True if the page was visible over the last minute
    </summary>
  </metric>
  <metric name="WebRTC" enum="Boolean">
    <summary>
      True if the page used WebRTC over the last minute
    </summary>
  </metric>
</event>

<event name="PerformanceManager.PageResourceUsage2">
  <owner>agale@chromium.org</owner>
  <owner>anthonyvd@chromium.org</owner>
  <owner>joenotcharles@google.com</owner>
  <summary>
    Metrics detailing the estimated resources used by pages. The resources of a
    renderer process are allocated to all pages hosted in that process using the
    algorithm in performance_manager::ProcessMetricsDecorator. An event is
    collected for each open page every 2 minutes, which is the same frequency as
    the PerformanceMonitor.AverageCPU10.* histograms.
  </summary>
  <metric name="BackgroundState" enum="PageMeasurementBackgroundState">
    <summary>
      Whether the page was in the foreground, background, or mixed during the
      last 2 minutes.
    </summary>
  </metric>
  <metric name="MeasurementAlgorithm" enum="PageMeasurementAlgorithm">
    <summary>
      The algorithm used to estimate the resource usage of the page. If this is
      missing, the Legacy algorithm was used.
    </summary>
  </metric>
  <metric name="PrivateFootprintEstimate">
    <summary>
      The estimated private footprint of the page, in kilobytes.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="RecentCPUUsage">
    <summary>
      The estimated CPU usage of the page over the last 2 minutes, with 10,000
      as 100% usage of 1 full core. (The same scale as the
      PerformanceMonitor.AverageCPU10.* histograms.)
    </summary>
    <aggregation>
      <history>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ResidentSetSizeEstimate">
    <summary>
      The estimated resident set size of the page, in kilobytes.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TotalRecentCPUUsageAllPages">
    <summary>
      The sum of the estimated CPU usage of all pages over the last 2 minutes,
      with 10,000 as 100% usage of 1 full core. (The same scale as the
      PerformanceMonitor.AverageCPU10.* histograms.) RecentCPUUsage can be
      compared to this to find how the page compares to other open tabs.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="PeriodicBackgroundSyncEventCompleted">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    A website can register to periodically update itself in the background using
    a service worker. Updates can be done in response to the periodicsync event.
    Logged when a periodicsync event completes and returns a status. We collect
    information about retries of this event.
  </summary>
  <metric name="MaxAttempts">
    <summary>
      Integer value of the maximum number of allowed retries.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NumAttempts">
    <summary>
      Integer value of the number of retries / sync events dispatched.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Status" enum="ServiceWorkerEventStatus">
    <summary>
      The enum value of the completion status, defined in
      blink::ServiceWorkerStatusCode.
    </summary>
  </metric>
</event>

<event name="PeriodicBackgroundSyncRegistered">
  <owner>nator@chromium.org</owner>
  <owner>rayankans@chromium.org</owner>
  <owner>peter@chromium.org</owner>
  <summary>
    A website can register to periodically update itself in the background using
    a service worker. Updates can be done in response to the periodicsync event
    after a periodic Background Sync registration has been created. Logged when
    a periodic Background Sync registration is created. We collect information
    about this registration request.
  </summary>
  <metric name="IsReregistered" enum="Boolean">
    <summary>
      Boolean for whether a registration with this tag has already been created.
    </summary>
  </metric>
  <metric name="MinIntervalMs">
    <summary>
      Integer value of the minimum interval, in milliseconds, of periodicsync
      events requested by the origin for this registration. This number is
      exponentially bucketed and uses the UKM GetExponentialBucketMin method
      with a value of 2.0 for spacing.
    </summary>
  </metric>
</event>

<event name="Permission">
  <owner>permissions-dev@chromium.org</owner>
  <summary>
    Metrics for a user's permission actions, logged when a permission prompt is
    resolved or when a permission is revoked. Grouped (microphone+camera)
    permission prompts are reported separately.
  </summary>
  <metric name="Action">
    <summary>
      An enum of type PermissionAction. One of GRANTED, DENIED, DISMISSED or
      IGNORED.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="GeolocationPromptType" enum="GeolocationPromptType">
    <summary>
      An enum of type GeolocationPromptType (see
      https://source.chromium.org/search?q=class:%5CbGeolocationPromptType%5Cb).
      This is only emitted for geolocation permission prompts if approximate
      geolocation is enabled. In that case, it encodes the variant of the
      geolocation prompt type and it is either 0 (kApproximateOrPrecise), 1
      (kApproximateOnly) or 2 (kUpgradeToPrecise).
    </summary>
  </metric>
  <metric name="Gesture">
    <summary>
      An enum of type PermissionRequestGestureType, whether the prompt was
      initiated by a user gesture.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InitialGeolocationAccuracySelection">
    <summary>
      An enum of type GeolocationAccuracy (see
      https://source.chromium.org/search?q=class:%5CbGeolocationAccuracy%5Cb).
      This is only emitted for geolocation permission prompts with
      precise/approximate options (corresponding to
      ContentSettingsType::GEOLOCATION_WITH_OPTIONS). In that case, it is either
      0 (kPrecise) or 1 (kApproximate) and represents the preselected accuracy
      option in the prompt.
    </summary>
  </metric>
  <metric name="OsPromptScreen" enum="ElementAnchoredBubbleVariant">
    <summary>
      An enum of type ElementAnchoredBubbleVariant. The screen that prompts the
      user for the OS screen, if applicable.
    </summary>
  </metric>
  <metric name="OsSystemSettingsScreen" enum="ElementAnchoredBubbleVariant">
    <summary>
      An enum of type ElementAnchoredBubbleVariant. The screen that directs the
      user to the OS Settings, if applicable.
    </summary>
  </metric>
  <metric name="PermissionAiRelevanceModel" enum="PermissionAiRelevanceModel">
    <summary>
      Version of the AI model used for the permission relevance prediction.
    </summary>
  </metric>
  <metric name="PermissionAutoRevocationHistory"
      enum="PermissionAutoRevocationHistory">
    <summary>
      An enum of type PermissionAutoRevocationHistory, representing whether the
      permission has been automatically revoked in the past at least once.
    </summary>
  </metric>
  <metric name="PermissionRequestRelevance" enum="PermissionRequestRelevance">
    <summary>
      An enum of type PermissionRequestRelevance describing the permission
      request relevance returned by a genAI and/or TFLite on-device model.
    </summary>
  </metric>
  <metric name="PermissionType">
    <summary>
      The type of permission, encoded through the mapping defined by
      `kHistogramValue` in
      https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_uma_util.cc;l=22;bpv=1;bpt=1.
      Beware that this is not the same as the ContentSettingsType enum (casted
      to int). An enum of type ContentSettingsType.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PredictionsApiResponse.GrantLikelihood"
      enum="PredictionGrantLikelihood">
    <summary>
      An enum of type PermissionUiSelector::PredictionGrantLikelihood describing
      the likelihood returned by the Web Permission Predictions Service, if the
      service was successfully queried.
    </summary>
  </metric>
  <metric name="PredictionsApiResponse.Heldback" enum="Boolean">
    <summary>
      A boolean that records whether the response by the permissions prediction
      service was held back.
    </summary>
  </metric>
  <metric name="PriorDismissals">
    <summary>
      The number of dismissed prompts for the given (origin, permission) pair,
      capped at 10 dismissals.
    </summary>
  </metric>
  <metric name="PriorIgnores">
    <summary>
      The number of ignored prompts for the given (origin, permission) pair,
      capped at 10 ignores.
    </summary>
  </metric>
  <metric name="PromptDisposition">
    <summary>
      An enum of type PermissionPromptDisposition. The UI used to display a
      permission prompt, if any.
    </summary>
  </metric>
  <metric name="PromptDispositionReason"
      enum="PermissionPromptDispositionReason">
    <summary>
      An enum of type PermissionPromptDispositionReason. The reason why the
      particular prompt disposition was used, if any.
    </summary>
  </metric>
<!-- LINT.IfChange(UkmPermissionPromptOptions) -->

  <metric name="PromptOptions">
    <summary>
      An enum of type UkmPermissionPromptOptions (see
      https://source.chromium.org/search?q=class:%5CbUkmPermissionPromptOptions%5Cb).
      This is only emitted if the permission prompt supports additional prompt
      options, which currently is the case only for geolocation permission
      prompts when the ApproximateGeolocationPermission is enabled. In that
      case, this is either 1 (APPROXIMATE_LOCATION) or 2 (PRECISE_LOCATION) and
      specifies whether the prompt selection was &quot;approximate&quot; or
      &quot;precise&quot; at the time when the action was taken.
    </summary>
  </metric>
<!-- LINT.ThenChange(//components/permissions/permission_uma_constants.h:UkmPermissionPromptOptions) -->

  <metric name="SatisfiedAdaptiveTriggers">
    <summary>
      A bitmask consisting of flags defined in enum type AdaptiveTriggers. A bit
      is set if the corresponding adaptive triggering condition has been
      satisfied at least once in the past for the user. This metric is not
      recorded for users who don't have the activation dry run enabled.
    </summary>
  </metric>
  <metric name="SiteLevelScreen" enum="ElementAnchoredBubbleVariant">
    <summary>
      An enum of type ElementAnchoredBubbleVariant. The site level screen shown
      to the user, if any.
    </summary>
  </metric>
  <metric name="Source">
    <summary>
      An enum of type PermissionSourceUI. The UI surface for this action.
    </summary>
  </metric>
  <metric name="Stats.AllPrompts.Count">
    <summary>
      Total number of prompts shown to the user in the last 28 days. The count
      is bucketed. The bucket minimums being 20, 15, 12, 10, 9, 8, 7, 6, 5, 4
      and 0. The correct bucket is the first one that is smaller or equal to the
      prompt count.
    </summary>
  </metric>
  <metric name="Stats.AllPrompts.DenyRate">
    <summary>
      What percentage of prompts from the last 28 days did the user deny.
      Aggregated across all origins, all PermissionTypes and all
      PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPrompts.DismissRate">
    <summary>
      What percentage of prompts from the last 28 days did the user dismiss.
      Aggregated across all origins, all PermissionTypes and all
      PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPrompts.GrantRate">
    <summary>
      What percentage of prompts from the last 28 days did the user grant.
      Aggregated across all origins, all PermissionTypes and all
      PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPrompts.IgnoreRate">
    <summary>
      What percentage of prompts from the last 28 days did the user ignore.
      Aggregated across all origins, all PermissionTypes and all
      PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPromptsOfType.Count">
    <summary>
      Total number of prompts shown to the user in the last 28 days for the
      currently requested permission type. The count is bucketed. The bucket
      minimums being 20, 15, 12, 10, 9, 8, 7, 6, 5, 4 and 0. The correct bucket
      is the first one that is smaller or equal to the prompt count.
    </summary>
  </metric>
  <metric name="Stats.AllPromptsOfType.DenyRate">
    <summary>
      What percentage of prompts from the last 28 days did the user deny.
      Aggregated across all origins, the current requested PermissionType and
      all PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPromptsOfType.DismissRate">
    <summary>
      What percentage of prompts from the last 28 days did the user dismiss.
      Aggregated across all origins, the current requested PermissionType and
      all PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPromptsOfType.GrantRate">
    <summary>
      What percentage of prompts from the last 28 days did the user grant.
      Aggregated across all origins, the current requested PermissionType and
      all PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.AllPromptsOfType.IgnoreRate">
    <summary>
      What percentage of prompts from the last 28 days did the user ignore.
      Aggregated across all origins, the current requested PermissionType and
      all PromptDisposition. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPrompts.Count">
    <summary>
      Total number of loud UI prompts shown to the user in the last 28 days. The
      count is bucketed. The bucket minimums being 20, 15, 12, 10, 9, 8, 7, 6, 5
      ,4 and 0. The correct bucket is the first one that is smaller or equal to
      the prompt count.
    </summary>
  </metric>
  <metric name="Stats.LoudPrompts.DenyRate">
    <summary>
      What percentage of prompts from the last 28 days did the user deny.
      Aggregated across all origins, all PermissionTypes and loud UI
      PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPrompts.DismissRate">
    <summary>
      What percentage of prompts from the last 28 days did the user dismiss.
      Aggregated across all origins, all PermissionTypes and loud UI
      PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPrompts.GrantRate">
    <summary>
      What percentage of prompts from the last 28 days did the user grant.
      Aggregated across all origins, all PermissionTypes and loud UI
      PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPrompts.IgnoreRate">
    <summary>
      What percentage of prompts from the last 28 days did the user ignore.
      Aggregated across all origins, all PermissionTypes and loud UI
      PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPromptsOfType.Count">
    <summary>
      Total number of loud UI prompts shown to the user in the last 28 days for
      the currently requested permission type. The count is bucketed. The bucket
      minimums being 20, 15, 12, 10, 9, 8, 7, 6, 5, 4 and 0. The correct bucket
      is the first one that is smaller or equal to the prompt count.
    </summary>
  </metric>
  <metric name="Stats.LoudPromptsOfType.DenyRate">
    <summary>
      What percentage of prompts from the last 28 days did the user deny.
      Aggregated across all origins, currently requested PermissionType and loud
      UI PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPromptsOfType.DismissRate">
    <summary>
      What percentage of prompts from the last 28 days did the user dismiss.
      Aggregated across all origins, currently requested PermissionType and loud
      UI PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPromptsOfType.GrantRate">
    <summary>
      What percentage of prompts from the last 28 days did the user grant.
      Aggregated across all origins, currently requested PermissionType and loud
      UI PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="Stats.LoudPromptsOfType.IgnoreRate">
    <summary>
      What percentage of prompts from the last 28 days did the user ignore.
      Aggregated across all origins, currently requested PermissionType and loud
      UI PromptDispositions only. Rounded to the nearest 10%.
    </summary>
  </metric>
  <metric name="TimeToDecision">
    <summary>
      Time (in milliseconds) taken by the user to make a decision on a
      permission prompt after it was displayed, if at all. Ignoring a prompt
      doesn't count as a decision.
    </summary>
  </metric>
</event>

<event name="Permissions.EmbeddedPromptAction">
  <owner>hkamila@chromium.org</owner>
  <owner>andypaicu@chromium.org</owner>
  <owner>permissions-dev@chromium.org</owner>
  <summary>
    Metrics for a user's permission actions for permission prompts triggered by
    the user clicking on the Embedded Permission Element, logged when a
    permission prompt is resolved.
  </summary>
  <metric name="Action" enum="ElementAnchoredBubbleAction">
    <summary>
      An enum of type ElementAnchoredBubbleAction. One of GRANTED, GRANTED_ONCE,
      OK, DENIED, DISMISSED, DISMISSED_SCRIM, SYSTEM_SETTINGS or IGNORED.
    </summary>
  </metric>
  <metric name="PermissionType" enum="PermissionRequestType">
    <summary>
      Represents the permission type that the prompt is for. This can sometimes
      differ from PermissionType when the PermissionType is Multiple, as some
      screens are designed to only be shown for one permission at a time. This
      is encoded via RequestTypeForUma in
      https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.h;bpv=1;bpt=1;l=73.
      Beware that this is not the same as the ContentSettingsType enum (casted
      to int).
    </summary>
  </metric>
  <metric name="PreviousScreens">
    <summary>
      Represents how many screens have already been shown to the user prior to
      the current one as part of the permission prompt. Also serves as an order
      number. Should never be bigger than the number of screen variants. It is
      recorded as int64_t (upper bound 10).
    </summary>
  </metric>
  <metric name="ScreenPermissionType" enum="PermissionRequestType">
    <summary>
      Represents the permission type that current screen is for. This is encoded
      via RequestTypeForUma in
      https://source.chromium.org/chromium/chromium/src/+/main:components/permissions/permission_uma_util.h;bpv=1;bpt=1;l=73.
      Beware that this is not the same as the ContentSettingsType enum (casted
      to int).
    </summary>
  </metric>
  <metric name="Variant" enum="ElementAnchoredBubbleVariant">
    <summary>
      An enum of type ElementAnchoredBubbleVariant. The screen that the user has
      currently taken action on.
    </summary>
  </metric>
</event>

<event name="Permissions.PrivacySensitive.UseCounter">
  <owner>jkarlin@chromium.org</owner>
  <owner>chrome-ads-team@google.com</owner>
  <summary>
    Collects once-per-page statistics on usage of privacy sensitive permission
    policy APIs to better understand if restricting access to these APIs in some
    situations would result in an acceptable breaking change or not.
  </summary>
  <metric name="PrivateFeatureCalledWithAdScriptInStack" enum="FeatureObserver">
    <summary>
      If a privacy-sensitive labeled feature backed by a permission policy was
      requested and granted, whether ad-script was in the stack at the time of
      grant. This is only recorded once per page load.
    </summary>
  </metric>
</event>

<event name="PermissionUsage">
  <owner>engedy@chromium.org</owner>
  <owner>ravjit@chromium.org</owner>
  <owner>permissions-dev@chromium.org</owner>
  <summary>
    Metrics for usage of capabilities gated behind permission prompts. One event
    is recorded per permission type for each page load that uses that permission
    type.
  </summary>
  <metric name="PermissionType">
    <summary>
      The type of permission used, encoded through the mapping defined by
      `kHistogramValue` in
      https://source.chromium.org/chromium/chromium/src/+/main:components/content_settings/core/browser/content_settings_uma_util.cc;l=22;bpv=1;bpt=1.
      Beware that this is not the same as the ContentSettingsType enum (casted
      to int).
    </summary>
  </metric>
</event>

<event name="PermissionUsage.NotificationShown">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when the notification content detection model is ran on
    notification contents, which happens on a request to display a persistent
    notification.
  </summary>
  <metric name="DidUserAlwaysAllowNotifications" enum="Boolean">
    <summary>
      A boolean signaling whether the user had previously decided to always
      allow suspicious notifications from the URL.
    </summary>
  </metric>
  <metric name="IsAllowlisted" enum="Boolean">
    <summary>
      A boolean signaling whether the URL is on the high confidence allowlist or
      not.
    </summary>
  </metric>
  <metric name="SiteEngagementLevel">
    <summary>
      The site engagement level of the site when the user receives a
      notification from them. Set to 0 even if the origin is not tracked by the
      Site Engagement Service.
    </summary>
  </metric>
  <metric name="SuspiciousScore">
    <summary>
      The 'suspicious' score given to notification contents that came from the
      URL. Ranges from 0 to 100.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Plugins.FlashInstance">
  <owner>tommycli@chromium.org</owner>
  <summary>
    Recorded when a Flash object instance is created.
  </summary>
</event>

<event name="PlusAddresses.Submission">
  <owner>jkeitel@google.com</owner>
  <owner>vizcay@google.com</owner>
  <summary>
    An email was submitted in a form for which the user had previously seen a
    plus address suggestions. More precisely, this event is recorded whenever a
    user submits a form that contains a form field for which a plus address
    suggestion was shown and the form field contains either a plus address or
    the current profile's GAIA email.
  </summary>
  <metric name="CheckoutOrCartPage" enum="Boolean">
    <summary>
      Boolean value representing whether commerce heuristics suggest that the
      main frame URL belongs to a checkout or a cart page.
    </summary>
  </metric>
  <metric name="FieldCountBrowserForm">
    <summary>
      The number of fields in the browser form. This uses exponential bucketing
      with a spacing of 1.15.
    </summary>
  </metric>
  <metric name="FieldCountRendererForm">
    <summary>
      The number of fields in the renderer form. This uses exponential bucketing
      with a spacing of 1.15.
    </summary>
  </metric>
  <metric name="ManagedProfile" enum="Boolean">
    <summary>
      Boolean value representing whether the active profile is managed.
    </summary>
  </metric>
  <metric name="NewlyCreatedPlusAddress" enum="Boolean">
    <summary>
      Boolean value representing whether the submitted email was newly created
      for this submission.
    </summary>
  </metric>
  <metric name="PasswordFormType" enum="AutofillPasswordFormType">
    <summary>
      The password manager classification of the form focused by the user when
      showing the plus address suggestion.
    </summary>
  </metric>
  <metric name="PlusAddressCount" enum="PlusAddressCountBucket">
    <summary>
      The (bucketed) number of plus addresses the user had when shown the plus
      address suggestion.
    </summary>
  </metric>
  <metric name="SubmittedPlusAddress" enum="Boolean">
    <summary>
      Boolean value representing whether the submitted email was a plus address.
    </summary>
  </metric>
  <metric name="SuggestionContext"
      enum="AutofillPlusAddressDelegateSuggestionContext">
    <summary>
      The context in which the plus address suggestion (filling or creation) was
      shown in the Autofill UI.
    </summary>
  </metric>
  <metric name="WasShownCreateSuggestion" enum="Boolean">
    <summary>
      Boolean value representing whether the user was offered a suggestion to
      create a new plus address.
    </summary>
  </metric>
</event>

<event name="Popup.Closed">
  <owner>csharrison@chromium.org</owner>
  <owner>jkarlin@chromium.org</owner>
  <summary>
    A popup window was closed.
  </summary>
  <metric name="EngagementTime">
    <summary>
      The time (in ms, rounded down to the nearest power of 2) a popup
      WebContents is visible / foregrounded, until it is closed. Keyed by the
      popup opener's URL (not the URL of the popup).
    </summary>
  </metric>
  <metric name="NumActivationInteractions">
    <summary>
      Integer value representing how many mouse down, touch start user, or raw
      key down interactions the popup had. This is capped at 50.
    </summary>
  </metric>
  <metric name="NumGestureScrollBeginInteractions">
    <summary>
      Integer value representing how many gesture scroll begin user interactions
      the popup had. This is capped at 50.
    </summary>
  </metric>
  <metric name="NumInteractions">
    <summary>
      Integer value representing how many user interactions the popup had. This
      is capped at 100. See IsUserInteractionInputType in web_contents_impl for
      what an interaction is. Currently it is a mouse, scroll begin, touch
      start, or raw key down event.
    </summary>
  </metric>
  <metric name="RedirectCount">
    <summary>
      The number of redirects taken by the pop-up's initial navigation. This
      does not include javascript navigations initiated by the opening document
      for the pop-up.
    </summary>
  </metric>
  <metric name="SafeBrowsingStatus" enum="PopupSafeBrowsingStatus">
    <summary>
      The site's safe browsing status if the pop-up's navigation commits.
    </summary>
  </metric>
  <metric name="Trusted">
    <summary>
      Boolean value representing whether the popup was opened via some trusted
      event (e.g. context menu, ctrl-click, etc).
    </summary>
  </metric>
  <metric name="UserInitiatedClose">
    <summary>
      Boolean value to represent whether the popup was closed by user gesture.
    </summary>
  </metric>
  <metric name="WindowOpenDisposition" enum="WindowOpenDisposition">
    <summary>
      The UI window open disposition used when creating the web contents of the
      pop-up. Set by the browser process when the pop up tracker is created.
    </summary>
  </metric>
</event>

<event name="Popup.Page" singular="True">
  <owner>justinmiron@google.com</owner>
  <summary>
    Page level pop-up statistics.
  </summary>
  <metric name="Allowed" enum="Boolean">
    <summary>
      Whether a user has, explicitly, allowed all popups on the last committed
      url of a page. The user's site level popup content setting is queried when
      a page that opened a popup is destroyed. Only emitted when at least one
      popup has been opened and the last committed page url is valid.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Portal.Activate">
  <owner>lfg@chromium.org</owner>
  <summary>
    A portal was activated. A portal activation enables a seamless transition
    between different pages. See the portals explainer for more details:
    https://github.com/WICG/portals/blob/master/README.md.
  </summary>
  <metric name="PaintTiming.PortalActivationToFirstPaint">
    <summary>
      When this page load happened inside a Portal, this metrics records the
      time in milliseconds between the portal activation and the first paint
      after activation.
    </summary>
  </metric>
  <metric name="PortalActivation">
    <summary>
      Measures the time between LCP and the portal activation. Uses exponential
      bucketing with a spacing of 2, with the units in milliseconds.
    </summary>
  </metric>
  <metric name="PortalActivationBeforeLCP" enum="Boolean">
    <summary>
      Indicates whether the portal activation happened before or after the
      largest contentful paint.
    </summary>
  </metric>
</event>

<event name="PowerUsageScenariosIntervalData">
  <owner>fdoray@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Metrics to measure power consumption in key usage scenarios, as well as the
    time spent in each scenario. These metrics are reported for a fixed interval
    of time, the duration of this interval is recorded in the
    IntervalDurationSeconds metric.

    The events aren't tied to a specific URL, a timer independent of any load
    event runs in Chrome and report these events at regular intervals. All the
    metrics associated to this event are for the last interval. The URL attached
    to the event is the one that has been visible for the longest time during
    the interval, the exact visibility duration for this URL during the interval
    is reported in the URLVisibilityTimeSeconds metric.

    e.g., at T-0 an interval ends and this event is emitted, a new interval then
    starts. During the interval the users spends 75% of his time watching a
    fullscreen video on https://foo.com with 10 tabs opened in background. Just
    before the end of the interval the user closes all the tabs but one. An
    event will be emitted for https://foo.com at T+X with the following metrics:
    IntervalDurationSeconds: X in seconds; URLVisibilityTimeSeconds: 0.75 * X in
    seconds; FullscreenVideoSingleMonitorSeconds: 0.75 * X in seconds;
    MaxTabCount: 10; TabClosed: 9; ... (not all metrics are listed here because
    it'd be too long, but in practice all the metrics are reported for each
    interval).

    This is reported on Mac and Windows. See go/chrome_power_use_per_scenario
    for more details.
  </summary>
  <metric name="BatteryDischargeMode" enum="BatteryDischargeMode">
    <summary>
      Battery discharge mode describing whether BatteryDischargeRate could be
      reported or not, and why. Recorded as enum BatteryDischargeMode in
      //tools/metrics/histograms/enums.xml.
    </summary>
  </metric>
  <metric name="BatteryDischargeRate">
    <summary>
      Battery discharge rate per minute, with 1/10000 of full charge resolution,
      example: - Battery capacity = 4000 mAh; - Battery charge at the beginning
      of the interval: 3900 mAh; - Battery charge at the end of the interval:
      3700 mAh; - Discharge proportion: (3900-3700) / 4000 = 0.05 - Reported
      value: 500.
    </summary>
  </metric>
  <metric name="BrowserShuttingDown" enum="Boolean">
    <summary>
      Indicates if the browser is shutting down when this event is reported.
    </summary>
  </metric>
  <metric name="CPUTimeMs">
    <summary>
      The CPU time spent executing code, across all Chrome processes in the
      interval. This can exceed 100% in multi-thread processes running on
      multi-core systems.
    </summary>
  </metric>
  <metric name="DeviceSleptDuringInterval" enum="Boolean">
    <summary>
      Whether or not the device has been sleeping at any point during the
      interval.
    </summary>
  </metric>
  <metric name="FullscreenVideoSingleMonitorSeconds">
    <summary>
      Time spent playing video in fullscreen, single-monitor. In seconds. This
      includes video for any tabs during the interval.
    </summary>
  </metric>
  <metric name="IdleWakeUps">
    <summary>
      Sum of idle-wakeups for all Chrome processes (Mac-only).
    </summary>
  </metric>
  <metric name="IntervalDurationSeconds">
    <summary>
      The interval duration, in seconds.
    </summary>
  </metric>
  <metric name="MaxTabCount">
    <summary>
      The maximum number of tabs that existed at the same time during the
      interval.
    </summary>
  </metric>
  <metric name="MaxVisibleWindowCount">
    <summary>
      The maximum number of windows that have been visible at the same time.
    </summary>
  </metric>
  <metric name="OriginVisibilityTimeSeconds">
    <summary>
      The visibility time for the origin of the URL associated with this event,
      in seconds. This can differ from URLVisibilityTimeSeconds if there's
      multiple tabs loaded with the same URL that are visible during the
      interval. E.g. if there's one tab loaded with foo.com/a visible for 1
      second during the interval and one loaded with foo.com/b visible for 2
      seconds the report will have URLVisibilityTimeSeconds = 2 seconds and
      OriginVisibilityTimeSeconds = 3 seconds. This can also exceed the interval
      duration (e.g. 2 visibles tab with loaded the same origin during the
      entire interval).
    </summary>
  </metric>
  <metric name="PackageExits">
    <summary>
      Sum of package exits from all Chrome processes (Mac-only).
    </summary>
  </metric>
  <metric name="PlayingAudioSeconds">
    <summary>
      The time spent playing audio in at least one tab, in seconds.
    </summary>
  </metric>
  <metric name="TabClosed">
    <summary>
      The number of tabs that have been closed during the interval.
    </summary>
  </metric>
  <metric name="TimePlayingVideoInVisibleTab">
    <summary>
      The time spent playing video in at least one visible tab, in seconds.
    </summary>
  </metric>
  <metric name="TimeSinceInteractionWithBrowserSeconds">
    <summary>
      The time since the last interaction with the browser when this event gets
      recorded, in seconds.
    </summary>
  </metric>
  <metric name="TimeSinceInteractionWithSystemSeconds">
    <summary>
      The time since the last interaction with the system when this event gets
      recorded, in seconds.
    </summary>
  </metric>
  <metric name="TimeWithOpenWebRTCConnectionSeconds">
    <summary>
      The time spent with at least one opened WebRTC connection, in seconds.
    </summary>
  </metric>
  <metric name="TopLevelNavigationEvents">
    <summary>
      Number of main frame different-document navigations.
    </summary>
  </metric>
  <metric name="UptimeSeconds">
    <summary>
      Elapsed time since Chrome has started, in seconds.
    </summary>
  </metric>
  <metric name="URLVisibilityTimeSeconds">
    <summary>
      The visibility time for the URL associated with this event, in seconds.
    </summary>
  </metric>
  <metric name="UserInteractionCount">
    <summary>
      Number of user interaction (scroll, click or typing) during the interval.
    </summary>
  </metric>
  <metric name="VideoCaptureSeconds">
    <summary>
      The time spent capturing video in at least one tab, in seconds.
    </summary>
  </metric>
</event>

<event name="PrefetchProxy.PrefetchedResource">
  <owner>curranmax@chromium.org</owner>
  <owner>ryansturm@chromium.org</owner>
  <owner>spelchat@chromium.org</owner>
  <summary>
    Each event corresponds to a single resource, either mainframe or
    subresource, that was prefetched during an Isolated Prerender. Logged one or
    many times on a Google Search Result Page for eligible users.
  </summary>
  <metric name="DataLength">
    <summary>
      The bucketed number of bytes that transited the network to prefetch this
      resource. Only set when the resource was prefetched.
    </summary>
  </metric>
  <metric name="FetchDurationMS">
    <summary>
      The number of milliseconds that the prefetch took from start to
      completion. Only set when the resource was prefetched.
    </summary>
  </metric>
  <metric name="ISPFilteringStatus" enum="IsolatedPrerenderISPFilteringStatus">
    <summary>
      How ISP filtering interacted with the mainframe resource if it was
      navigated to. Only set when LinkClicked is true.
    </summary>
  </metric>
  <metric name="LinkClicked" enum="Boolean">
    <summary>
      Whether the mainframe was navigated to. Always set when the event is
      recorded, even on subresources which take the value from their
      corresponding mainframe.
    </summary>
  </metric>
  <metric name="LinkPosition">
    <summary>
      The location in the original navigation prediction of where the mainframe
      url was. Always set when the event is recorded, even on subresources which
      take the value from their corresponding mainframe.
    </summary>
  </metric>
  <metric name="NavigationStartToFetchStartMS">
    <summary>
      The number of milliseconds between the start of the navigation and the
      start of the prefetch request. Only set when the resource was attempted to
      be prefetched.
    </summary>
  </metric>
  <metric name="ResourceType" enum="IsolatedPrerenderPrefetchResourceType">
    <summary>
      The type of resource that was prefetched, either mainframe or subresource.
      Always set when the event is recorded.
    </summary>
  </metric>
  <metric name="Status" enum="PrefetchProxyPrefetchStatus">
    <summary>
      The outcome of the prefetch eligibility check and possible attempt to
      prefetch the resource and reuse it. See |PrefetchProxyPrefetchStatus| for
      a mapping of enum values and their meanings. Always set when the event is
      recorded.
    </summary>
  </metric>
</event>

<event name="Preloading.Attempt">
  <owner>domenic@chromium.org</owner>
  <owner>chrome-instant-ecosystem@google.com</owner>
  <summary>
    This event is logged for each preloading attempt i.e., for preloading
    features like preresolve, preconnect, prerender, prefetch, and others, as
    long as the user navigated to another page after the preloading attempt
    occurred.

    It is associated with the Source ID of the page user navigates to, i.e., the
    page the user visits *after* a browser feature or the previous page
    attempted to preload. The page the user navigates to may or may not be the
    same as the URL that was attempted to be preloaded. If they are the same,
    AccurateTriggering will be true; otherwise, it will be false. As such, there
    can be many Preloading.Attempts for a single UKM source, of which only one
    will have AccurateTriggering set to true.

    This event is logged when the user navigates onward from that successor
    page, or that sucessor page's WebContents is being destroyed. This means
    that if a UKM source that attempts a preload is not followed by another
    navigation to a successor page, e.g. because the user closed their browser,
    then the Preloading.Attempt event is not recorded: only the
    Preloading.Attempt.PreviousPrimaryPage is recorded. On the other hand, in
    cases where there is no initiating page, e.g. because the preload is
    initiated via Chrome UI, then only Preloading.Attempt is recorded, and not
    Preloading.Attempt.PreviousPrimaryPage.

    Note that this event is sampled based on the PreloadingConfig feature
    configuration (in addition to the normal UKM sampling mechanism). The
    sampling rate for each event (which may vary for different preloading
    features) is logged in the SamplingLikelihood field.
  </summary>
  <metric name="AccurateTriggering" enum="Boolean">
    <summary>
      Whether the preloading operation was triggered accurately for the
      predicted URL (regardless of the eligibility, failures, etc.). Set to true
      if the user navigated to the predicted URL.
    </summary>
  </metric>
  <metric name="Eligibility">
    <summary>
      Eligibility status of preloading operation for the prediction. Values are
      from the Chrome enum content::PreloadingEligibility.
    </summary>
  </metric>
  <metric name="FailureReason">
    <summary>
      Reason why the preloading operation failed. Values are from the enum
      specific to the preloading type.
    </summary>
  </metric>
  <metric name="HoldbackStatus">
    <summary>
      The outcome of the holdback check. This is not part of eligibility status
      to make clarify that this check needs to happen after we are done
      verifying the eligibility of a preloading attempt. In general, eligibility
      checks can be reordered, but the holdback check always needs to come after
      verifying that the preloading attempt was eligible.
    </summary>
  </metric>
  <metric name="PrefetchServiceWorkerRegisteredCheck"
      enum="ServiceWorkerRegisteredCheck">
    <summary>
      Records how many times are we checking if a Service Worker is registered
      for an origin (fast check) or for a certain path of the origin (slow
      check) to decide if we are proceeding with a prefetch or not. Enum values
      would be: OriginOnly and Path. OriginOnly value describes the case when
      there are no Service Workers registered for the origin and we only need to
      run the fast check. Path value describes the case when there are Service
      Workers registered for the origin and we need to do a more expensive path
      check to find out if the prefetch URL falls under a registered Service
      Worker.
    </summary>
  </metric>
  <metric name="PrefetchServiceWorkerRegisteredForURLCheckDuration">
    <summary>
      Records how long (in microseconds) does the slow check for a Service
      Worker being registered for a certain path take when deciding if we are
      proceeding with a prefetch or not. We expect this check to take up to 2
      ms. Exponentially bucketed using GetExponentialBucketMin with a value of
      1.15.
    </summary>
  </metric>
  <metric name="PreloadingPredictor">
    <summary>
      The type of preloading predictor which made the prediction. Values are
      from the Chrome enum content::PreloadingPredictor or
      ChromePreloadingPredictor.
    </summary>
  </metric>
  <metric name="PreloadingType">
    <summary>
      The type of preloading operation used for the preloading attempt. Values
      are from the Chrome enum content::PreloadingType.
    </summary>
  </metric>
  <metric name="ReadyTime">
    <summary>
      The amount of time the attempt took to reach a state in which it is ready
      to be used for the next navigation, in milliseconds. Note: currently only
      Prefetch, Prerender and NoStatePrefetch have a ready state. This field is
      only meaningful to these three types of preloading.
    </summary>
  </metric>
  <metric name="SamplingLikelihood">
    <summary>
      The sampling rate of this particular event multiplied by 1,000,000
      (because we cannot log floating point values in UKM). A value of 1,000,000
      means that the event had a 100% chance of being sampled, whereas a value
      of one means that the event had a one-in-a-millon chance of being sampled.
      The sampling rate for preloading attempts is set via field trial through
      the PreloadingConfig feature. The logged value just represents the
      configuration used for that preloading attempt.
    </summary>
  </metric>
  <metric name="SpeculationEagerness" enum="SpeculationEagerness">
    <summary>
      The eagerness of the speculation rule that triggered this preload. This is
      only set if the Preloading Attempt is triggered by a speculation rule.
      Values are from the Chrome enum blink::mojom::SpeculationEagerness.
    </summary>
  </metric>
  <metric name="TimeToNextNavigation">
    <summary>
      The amount of time the attempt took to reach the next navigation, in
      milliseconds. This can happen multiple times, but only the first is
      recorded.
    </summary>
  </metric>
  <metric name="TriggeringOutcome">
    <summary>
      Specifies whether the preloading attempt triggered and was used for the
      next navigation. Values are from the Chrome enum
      content::PreloadingTriggeringOutcome.
    </summary>
  </metric>
</event>

<event name="Preloading.Attempt.PreviousPrimaryPage">
  <owner>domenic@chromium.org</owner>
  <owner>chrome-instant-ecosystem@google.com</owner>
  <summary>
    This event is logged for each preloading attempt i.e., for preloading
    features like preresolve, preconnect, prerender, prefetch, and others, as
    long as there is a triggering page.

    The difference from Preloading.Attempt is that it is associated with the
    Source ID of the primary triggering page instead of the navigated-to page.
    This allows you to find all preloading attempts initiated by a given UKM
    source, in order to, e.g., filter by URL.

    This event is logged when the user navigates onward from that initiating
    page, or that initiating page's WebContents is being destroyed. This means
    that in cases where there is no initiating page, e.g. because the preload is
    initiated via Chrome UI, then the Preloading.Attempt.PreviousPrimaryPage UKM
    is not recorded; only the Preloading.Attempt UKM is recorded. On the other
    hand, if a preload attempt is not followed by a navigation, e.g. because the
    user closed their browser, then only Preloading.Attempt.PreviousPrimaryPage
    is recorded, and not Preloading.Attempt.

    Note that some UKM sources that record
    Preloading.Attempt.PreviousPrimaryPage may not appear as normal page loads.
    For example, the New Tab Page.

    Note that this event is sampled based on the PreloadingConfig feature
    configuration (in addition to the normal UKM sampling mechanism). The
    sampling rate for each event (which may vary for different preloading
    features) is logged in the SamplingLikelihood field.
  </summary>
  <metric name="AccurateTriggering" enum="Boolean">
    <summary>
      Whether the preloading operation was triggered accurately (regardless of
      the eligibility, holdback, failures, etc.).

      Set to true if the user navigated to the predicted URL.
    </summary>
  </metric>
  <metric name="Eligibility">
    <summary>
      Eligibility status of preloading operation for the prediction.
    </summary>
  </metric>
  <metric name="FailureReason">
    <summary>
      Reason why the preloading operation failed.
    </summary>
  </metric>
  <metric name="HoldbackStatus">
    <summary>
      The outcome of the holdback check. This is not part of eligibility status
      to make clarify that this check needs to happen after we are done
      verifying the eligibility of a preloading attempt. In general, eligibility
      checks can be reordered, but the holdback check always needs to come after
      verifying that the preloading attempt was eligible.
    </summary>
  </metric>
  <metric name="PrefetchServiceWorkerRegisteredCheck"
      enum="ServiceWorkerRegisteredCheck">
    <summary>
      Records how many times are we checking if a Service Worker is registered
      for an origin (fast check) or for a certain path of the origin (slow
      check) to decide if we are proceeding with a prefetch or not. Enum values
      would be: OriginOnly and Path. OriginOnly value describes the case when
      there are no Service Workers registered for the origin and we only need to
      run the fast check. Path value describes the case when there are Service
      Workers registered for the origin and we need to do a more expensive path
      check to find out if the prefetch URL falls under a registered Service
      Worker.
    </summary>
  </metric>
  <metric name="PrefetchServiceWorkerRegisteredForURLCheckDuration">
    <summary>
      Records how long (in microseconds) does the slow check for a Service
      Worker being registered for a certain path take when deciding if we are
      proceeding with a prefetch or not. We expect this check to take up to 2
      ms. Exponentially bucketed using GetExponentialBucketMin with a value of
      1.15.
    </summary>
  </metric>
  <metric name="PreloadingPredictor">
    <summary>
      The type of predictor that made the prediction. Values are from either
      content::PreloadingPredictor or ChromePreloadingPredictor.
    </summary>
  </metric>
  <metric name="PreloadingType">
    <summary>
      The type of preloading operation used for the preloading attempt.
    </summary>
  </metric>
  <metric name="ReadyTime">
    <summary>
      The amount of time the attempt took to reach a state in which it is ready
      to be used for the next navigation, in milliseconds. Note: currently only
      Prefetch, Prerender and NoStatePrefetch have a ready state. This field is
      only meaningful to these three types of preloading.
    </summary>
  </metric>
  <metric name="SamplingLikelihood">
    <summary>
      The sampling rate of this particular event multiplied by 1,000,000
      (because we cannot log floating point values in UKM). A value of 1,000,000
      means that the event had a 100% chance of being sampled, whereas a value
      of one means that the event had a one-in-a-millon chance of being sampled.
      The sampling rate for preloading attempts is set via field trial through
      the PreloadingConfig feature. The logged value just represents the
      configuration used for that preloading attempt.
    </summary>
  </metric>
  <metric name="SpeculationEagerness" enum="SpeculationEagerness">
    <summary>
      The eagerness of the speculation rule that triggered this preload. This is
      only set if the Preloading Attempt is triggered by a speculation rule.
      Values are from the Chrome enum blink::mojom::SpeculationEagerness.
    </summary>
  </metric>
  <metric name="TimeToNextNavigation">
    <summary>
      The amount of time the attempt took to reach the next navigation, in
      milliseconds. This can happen multiple times, but only the first is
      recorded.
    </summary>
  </metric>
  <metric name="TriggeringOutcome">
    <summary>
      Specifies whether the preloading triggered and was used for the next
      navigation.
    </summary>
  </metric>
</event>

<event name="Preloading.NavigationPredictorModelTrainingData">
  <owner>isaboori@google.com</owner>
  <owner>mcnee@chromium.org</owner>
  <summary>
    Metrics that describe an anchor element, the user's interaction therewith,
    and whether a prediction of a navigation to the target destination would be
    accurate. This event is emitted on navigation. The number of events emitted
    at a time depends on the number of predictions the model makes, subject to
    sampling. See also NavigationPredictorAnchorElementMetrics and
    NavigationPredictorUserInteractions.
  </summary>
  <metric name="ContainsImage">
    <summary>
      1 if the anchor element contains an image.
    </summary>
  </metric>
  <metric name="FontSize">
    <summary>
      The bucketed font size of the anchor element, according to its computed
      style. 1 corresponds to a pixel font size in [0, 10), 2 corresponds to a
      fonts size in [10, 18) and 3 is logged when the font size is 18 pixels or
      larger.
    </summary>
  </metric>
  <metric name="HasTextSibling">
    <summary>
      1 if the anchor element has an immediate text sibling, 0 otherwise.
    </summary>
  </metric>
  <metric name="HoverDwellTimeMs">
    <summary>
      Dwell time of pointer hovering over the anchor element in milliseconds.
      Exponentially bucketed using GetExponentialBucketMin with a value of 1.3.
    </summary>
  </metric>
  <metric name="IsAccurate">
    <summary>
      1 if a navigation to the anchor's destination occurs.
    </summary>
  </metric>
  <metric name="IsBold">
    <summary>
      1 if the anchor's computed style's font-weight is greater than 500, 0
      otherwise.
    </summary>
  </metric>
  <metric name="IsInIframe">
    <summary>
      1 if the anchor element is in an iframe.
    </summary>
  </metric>
  <metric name="IsURLIncrementedByOne">
    <summary>
      1 if the anchor element's target URL and the document's source URL only
      differ by one number, and the target URL increments that number in the
      source URL by 1.
    </summary>
  </metric>
  <metric name="NavigationStartToLinkLoggedMs">
    <summary>
      The time in ms between navigation start and the moment the anchor was
      first seen. Exponentially bucketed using GetExponentialBucketMin with a
      value of 1.3.
    </summary>
  </metric>
  <metric name="PathDepth">
    <summary>
      The number of slashes in the anchor element's href URL path. Truncated at
      5.
    </summary>
  </metric>
  <metric name="PathLength">
    <summary>
      The number of characters in the anchor element's href URL path. Buckets of
      size 10, truncated at 100.
    </summary>
  </metric>
  <metric name="PercentClickableArea">
    <summary>
      The percent of the total document area that this anchor element's
      clickable area occupies.
    </summary>
  </metric>
  <metric name="PercentVerticalDistance">
    <summary>
      How far down the document the top of the anchor element is, expressed as a
      ratio with the total document height.
    </summary>
  </metric>
  <metric name="PointerHoveringOverCount">
    <summary>
      How many times the pointer was hovering over the anchor element.
      Exponentially bucketed using GetExponentialBucketMin a value of 1.3.
    </summary>
  </metric>
  <metric name="SameHost">
    <summary>
      1 if the anchor element's target URL and the document's source URL are the
      same host.
    </summary>
  </metric>
  <metric name="SamplingAmount">
    <summary>
      Indicates whether the number of predictions for the associated page was
      over a limit and needed to be downsampled. All events for a given page
      logged at the same time have the same SamplingAmount. The value is the
      exponentially bucketed value of (1,000,000 - (1,000,000 * sampling_rate)).
      The multiplication by 1,000,000 is because we cannot log floating point
      values in UKM, and we have larger values indicate more sampling so that a
      lack of sampling can be unambiguous by having its own bucket. For example,
      if the number of predictions was under the limit and no sampling was done,
      then the value would be 0. If the number of predictions was double the
      limit, the value would be 500,000.
    </summary>
  </metric>
</event>

<event name="Preloading.Prediction">
  <owner>domenic@chromium.org</owner>
  <owner>chrome-instant-ecosystem@google.com</owner>
  <summary>
    This event is logged for each preloading prediction and metrics related to
    the preloading predictors like OmniboxDirectURLInput, Speculation Rules and
    others when the navigation is finished or when the WebContents is being
    destroyed.

    Associated with the Source ID of the page user navigates to. Contains
    information about the type of the predictor, its confidence value and
    whether the prediction ended up being correct.
  </summary>
  <metric name="AccuratePrediction" enum="Boolean">
    <summary>
      Whether the user navigated to the predicted URL.
    </summary>
  </metric>
  <metric name="Confidence">
    <summary>
      The confidence percentage of predictor's correct prediction for
      preloading.
    </summary>
  </metric>
  <metric name="PreloadingPredictor">
    <summary>
      The type of preloading predictor that made the prediction. Values are from
      content::PreloadingPredictor or ChromePreloadingPredictor.
    </summary>
  </metric>
  <metric name="SamplingAmount">
    <summary>
      Indicates whether the number of preloading predictions for the associated
      page was over a limit and needed to be downsampled. All events for a given
      page logged at the same time have the same SamplingAmount. The value is
      the exponentially bucketed value of (1,000,000 - (1,000,000 *
      sampling_rate)). The multiplication by 1,000,000 is because we cannot log
      floating point values in UKM, and we have larger values indicate more
      sampling so that a lack of sampling can be unambiguous by having its own
      bucket. For example, if the number of predictions was under the limit and
      no sampling was done, then the value would be 0. If the number of
      predictions was double the limit, the value would be 500,000.
    </summary>
  </metric>
  <metric name="TimeToNextNavigation">
    <summary>
      The amount of time the prediction took to reach the next navigation, in
      milliseconds. This can happen multiple times, but only the first is
      recorded.
    </summary>
  </metric>
</event>

<event name="Preloading.Prediction.PreviousPrimaryPage">
  <owner>domenic@chromium.org</owner>
  <owner>chrome-instant-ecosystem@google.com</owner>
  <summary>
    This is the same as Preloading.Prediction but UKM is associated with the
    WebContents primary triggering page (if exists) and logged when the user
    navigates away or when the WebContents is being destroyed.

    Associated with the Source ID of the primary page where the preloading
    prediction is triggered (user navigates from). All the metrics data are
    similar to Preloading.Prediction and please see the comments for more
    details.
  </summary>
  <metric name="AccuratePrediction" enum="Boolean">
    <summary>
      Whether the user navigated to the predicted URL.
    </summary>
  </metric>
  <metric name="Confidence">
    <summary>
      The confidence percentage of predictor's correct prediction for
      preloading.
    </summary>
  </metric>
  <metric name="PreloadingPredictor">
    <summary>
      The type of preloading predictor which made the preloading prediction.
      Values are from content::PreloadingPredictor or ChromePreloadingPredictor.
    </summary>
  </metric>
  <metric name="SamplingAmount">
    <summary>
      Indicates whether the number of preloading predictions for the associated
      page was over a limit and needed to be downsampled. All events for a given
      page logged at the same time have the same SamplingAmount. The value is
      the exponentially bucketed value of (1,000,000 - (1,000,000 *
      sampling_rate)). The multiplication by 1,000,000 is because we cannot log
      floating point values in UKM, and we have larger values indicate more
      sampling so that a lack of sampling can be unambiguous by having its own
      bucket. For example, if the number of predictions was under the limit and
      no sampling was done, then the value would be 0. If the number of
      predictions was double the limit, the value would be 500,000.
    </summary>
  </metric>
  <metric name="TimeToNextNavigation">
    <summary>
      The amount of time the prediction took to reach the next navigation, in
      milliseconds. This can happen multiple times, but only the first is
      recorded.
    </summary>
  </metric>
</event>

<event name="PrerenderPageLoad" singular="True">
  <owner>nhiroki@chromium.org</owner>
  <owner>chrome-prerendering@google.com</owner>
  <summary>
    Metrics related to Prerender2
    (https://docs.google.com/document/d/1P2VKCLpmnNm_cRAjUeE-bqLL0bslL_zKqiNeCzNom_w/edit?usp=sharing).
  </summary>
  <metric name="FinalStatus" enum="PrerenderHostFinalStatus">
    <summary>
      A status of a prerendering attempt. Recorded as enum
      PrerenderHostFinalStatus in //tools/metrics/histograms/enums.xml.

      This is replicated as Prerender.Experimental.PrerenderHostFinalStatus.* in
      UMA.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InteractiveTiming.FirstInputDelay4">
    <summary>
      The duration between the hardware timestamp and the start of event
      processing on the main thread for the first meaningful input. Recorded on
      the prerender activation.
    </summary>
  </metric>
  <metric name="InteractiveTiming.NumInteractions">
    <summary>
      The number of distinct user interactions on a prerendered page after it is
      successfully activated. See definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric
      name="InteractiveTiming.UserInteractionLatency.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      prerendered page after it is successfully activated, in ms. For this
      metric, we measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.country,profile.system_ram"/>
        <index fields="profile.is_dominant_version"/>
        <index fields="profile.is_latest_version"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InteractiveTiming.WorstUserInteractionLatency.MaxEventDuration">
    <summary>
      The maximum value of user interaction latency of a prerendered page after
      it is successfully activated, in ms. For this metric, we measure the
      latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
  </metric>
  <metric name="InteractiveTimingBeforeSoftNavigation.NumInteractions">
    <summary>
      The number of distinct user interactions before any soft navigation
      happens. It includes the user interaction that triggers the 1st soft
      navigation. See definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
  </metric>
  <metric
      name="InteractiveTimingBeforeSoftNavigation.UserInteractionLatency.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency of a
      page load before any soft navigation happens, in ms. For this metric, we
      measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
  </metric>
  <metric
      name="LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred on the prerendered page that is successfully activated in a
      session window. The gap between two consecutive shifts in a window is not
      bigger than 1000ms and the maximum window size is 5000ms. This metric's
      integral value is 100x the fractional cumulative layout shift score
      described in the explainer.
    </summary>
  </metric>
  <metric
      name="LayoutInstabilityBeforeSoftNavigation.MaxCumulativeShiftScore.MainFrame.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred in a session window before any soft navigation happens. The
      gap between two consecutive shifts in a window is not bigger than 1000ms
      and the maximum window size is 5000ms. This metric's integral value is
      100x the fractional cumulative layout shift score described in the
      explainer.
    </summary>
  </metric>
  <metric name="MainFrameResource.RequestHasNoStore" enum="Boolean">
    <summary>
      A boolean indicating if any prerender activation page load mainpage
      resource has a 'Cache-control: no-store' response header. Recorded only
      for main frame request.
    </summary>
  </metric>
  <metric name="Navigation.InitiatorLocation">
    <summary>
      page_load_metrics::NavigationHandleUserData::InitiatorLocation enum value.
      This field is used for identifying the types of prerender trigger.
    </summary>
  </metric>
  <metric name="Navigation.PageTransition">
    <summary>
      The |ui::PageTransition| for the main frame navigation that this activated
      prerendering navigation fulfilled.
    </summary>
  </metric>
  <metric name="SoftNavigationCount">
    <summary>
      Number of soft navigations detected by heuristics. See
      https://github.com/WICG/soft-navigations

      Soft navigations are JS-driven same-document navigations that are using
      the history API or the new Navigation API, triggered by a user gesture and
      meaningfully modify the DOM, replacing the previous content with new one.
    </summary>
  </metric>
  <metric name="Timing.ActivationToFirstContentfulPaint">
    <summary>
      The duration in milliseconds from time of activation navigation start to
      the time when the page first paints content. A contentful paint includes a
      paint of text, image, SVG, or canvas.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Timing.ActivationToLargestContentfulPaint">
    <summary>
      The duration in milliseconds from time of activation navigation start to
      the time when the page first paints the largest content (text or image)
      within viewport, across all frames.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Timing.NavigationToActivation">
    <summary>
      The duration in milliseconds from the start of initial prerendering
      navigation to the start of activation navigation. This corresponds to the
      activationStart attribute of PerformanceNavigationTiming.
    </summary>
  </metric>
  <metric name="TimingBeforeSoftNavigation.ActivationToLargestContentfulPaint">
    <summary>
      The duration in milliseconds from time of activation navigation start to
      the time when the page first paints the largest content (text or image)
      within viewport, across all frames, before any soft navigation happens.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TriggeredPrerender" enum="Boolean">
    <summary>
      A boolean that is set to true if the page triggered prerendering.

      Unlike other PrerenderPageLoad metrics, this is recorded not for
      prerendered page loads, but for page loads that initiated prerender.
    </summary>
  </metric>
  <metric name="WasPrerendered" enum="Boolean">
    <summary>
      A boolean that is set to true if the page was prerendered and later
      activated. Cancelled prerender page loads are not logged.
    </summary>
  </metric>
</event>

<event name="Presentation.StartResult">
  <owner>muyaoxu@google.com</owner>
  <owner>openscreen-eng@google.com</owner>
  <summary>
    Records when users start a Presentation and receive a response from the
    receiver. Android only. The following failures are not recorded because they
    don't represent an actual error: (1)
    PresentationErrorType::PRESENTATION_REQUEST_CANCELLED This error is created
    when users close the dialog without starting a Presentation. (2)
    PresentationErrorType::NO_PRESENTATION_FOUND This error might happen when a
    website implementing CastSDK try to join a route every time the page loads.
  </summary>
  <metric name="PresentationRequest" enum="Boolean">
    <summary>
      Records whether the users' request to start a Presentation with a
      &quot;cast:&quot; presentation URL succeed.
    </summary>
  </metric>
  <metric name="RemotePlayback" enum="Boolean">
    <summary>
      Records whether the users' request to start a Presentation through
      RemotePlayback succeed.
    </summary>
  </metric>
</event>

<event name="PWA.Visit" singular="True">
  <owner>yfriedman@chromium.org</owner>
  <owner>hartmanng@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    PWA usage metrics recorded during a user's interaction with the site.
  </summary>
  <metric name="LaunchSource" enum="LaunchFromHomeScreenSource">
    <summary>
      Launch source of the WebAPK (tap from homescreen, WebShareTarget,
      deeplink, etc).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WebAPKableSiteVisit" enum="Boolean">
    <summary>
      Recorded every time a non-installed &quot;WebAPKable&quot; site is
      visited.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="RenderViewContextMenu.Used">
  <owner>juanmojica@google.com</owner>
  <owner>benwgold@google.com</owner>
  <summary>
    Metric recorded when a context menu item is selected. This is currently only
    recorded for Lens context menu items.
  </summary>
  <metric name="SelectedMenuItem" enum="RenderViewContextMenuItem">
    <summary>
      The menu item selected by the user on the context menu.
    </summary>
  </metric>
</event>

<event name="RequestStorageAccessFor.RequestStorageResult">
  <owner>selya@google.com</owner>
  <owner>cfredric@chromium.org</owner>
  <summary>
    Records invocations of document.requestStorageAccessFor and reasons the
    request was approved or rejected. Recorded for every call to the function,
    regardless of outcome.
  </summary>
  <metric name="RequestStorageResult" enum="RequestStorageResult">
    <summary>
      The result of the requestStorageAccessFor call.
    </summary>
  </metric>
</event>

<event name="RequestStorageAccessFor.TopLevelStorageIsExemptionReason">
  <owner>selya@google.com</owner>
  <owner>cfredric@chromium.org</owner>
  <summary>
    Tracks when a cookie is included in a network request due to the
    ExemptionReason::kTopLevelStorageAccess. This state can only occur when a
    request is cors-enabled and made from the top-level frame. Reads from
    document.cookies (and requests that are not cors-enabled) are not included
    because the value is always 0 and those are not recorded. Cookies that have
    been written by document.cookies or network responses may be included if
    subsequent request meets the requirments for kTopLevelStorageAccess.
  </summary>
  <metric name="NumberOfCookies">
    <summary>
      Number of cookies where ExemptionReason::kTopLevelStorageAccess is the
      reason a cookie is included in a given request. The value is rounded down
      to the nearest exponential bucket with factor of 2.0.
    </summary>
  </metric>
</event>

<event name="Responsiveness.UserInteraction">
  <owner>mmocny@chromium.org</owner>
  <owner>sullivan@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Metrics that are associated with user interactions and recorded when users
    interact with web pages. Currently we are interested in keyboard, tap or
    click. A user interaction often encompasses multiple input events. For
    keyboard interactions, we only care about keydown and keyup. For tap or
    click we only measure pointerdown, pointerup and click.
  </summary>
  <metric name="InteractionType" enum="UserInteractionType">
    <summary>
      The type of the user interaction that triggered input event sequence, not
      the input event type. It can be keyboard, tap, click.
    </summary>
  </metric>
  <metric name="MaxEventDuration">
    <summary>
      The longest input event duration within the user interaction. The unit of
      duration is ms. For example, if a user pressed a key, we can get a keydown
      and a keyup. If the duration(keydown) &gt; duration(keyup), the value of
      this metric will be duration(keydown).
    </summary>
  </metric>
</event>

<event name="ResponsivenessMeasurement">
  <owner>npm@chromium.org</owner>
  <owner>tdresser@chromium.org</owner>
  <summary>
    Responsiveness metrics recorded once every 5 seconds.
  </summary>
</event>

<event name="SafeBrowsingInterstitial">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Records that the user encountered a Safe Browsing interstitial and whether
    they proceeded past the interstitial, bypassing the warning.
  </summary>
  <metric name="Bypassed" enum="Boolean">
    <summary>
      A boolean signaling that the user bypassed the interstitial; only records
      true values. This event gets logged right when a user clicks to proceed on
      the Safe Browsing interstitial UI.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Shown" enum="Boolean">
    <summary>
      A boolean signaling that the interstitial was shown to the user; only
      records true values. This event gets logged right when the Safe Browsing
      interstitial is shown to the user.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SafetyHub.AbusiveNotificationPermissionRevocation.Interactions">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when the user takes a Safety Hub action after an abusive
    notification is auto-revoked.
  </summary>
  <metric name="InteractionType"
      enum="SafetyCheckUnusedSitePermissionsModuleInteractions">
    <summary>
      The type of action that the user has taken after being shown an abusive
      notification auto-revocation in Safety Hub.
    </summary>
  </metric>
  <metric name="RevocationSource" enum="NotificationRevocationSource">
    <summary>
      The reason for auto-revocation.
    </summary>
  </metric>
</event>

<event
    name="SafetyHub.DisruptiveNotificationRevocations.FalsePositiveInteraction">
  <owner>olesiamarukhnno@google.com</owner>
  <owner>antoniosartori@chromium.org</owner>
  <summary>
    Recorded when an user interaction was detected for a site that was
    previously put in a potential revocation list for disruptive notification
    permissions or for a site for which notification permission was revoked. The
    metrics will be recorded on either page visit or a notification click.
  </summary>
  <metric name="DailyAverageVolume">
    <summary>
      Average daily volume of notifications sent by the site, measured over the
      last 7 days.
    </summary>
  </metric>
  <metric name="DaysSinceRevocation">
    <summary>
      The number of days between the website was put in the potential revocation
      list and the detected increase in site engagement.
    </summary>
  </metric>
  <metric name="NewSiteEngagement">
    <summary>
      New site engagement after user interaction with the site.
    </summary>
  </metric>
  <metric name="OldSiteEngagement">
    <summary>
      Site engagement score when the site marked for revocation.
    </summary>
  </metric>
  <metric name="Reason" enum="DisruptiveNotificationFalsePositiveReason">
    <summary>
      The reason why the revocation was deemed a false positive: either a web
      site visit or a notification click.
    </summary>
  </metric>
  <metric name="RevocationState" enum="DisruptiveNotificationRevocationState">
    <summary>
      The revocation state (either proposed or actually revoked).
    </summary>
  </metric>
</event>

<event
    name="SafetyHub.DisruptiveNotificationRevocations.FalsePositiveRevocation">
  <owner>olesiamarukhnno@google.com</owner>
  <owner>antoniosartori@chromium.org</owner>
  <summary>
    Recorded when enough user interactations were detected to be deemed a false
    positive revocation for a site that was previously put in a potential
    revocation list for disruptive notification permissions or for a site for
    which notification permission was revoked. The metrics will be recorded on
    either page visit or a notification click. A site engagement score has to
    increase by a minimum amount, set in feature params. A false positive
    revocation can only be reported after a min cooldown period has passed, set
    in feature params.
  </summary>
  <metric name="DailyAverageVolume">
    <summary>
      Average daily volume of notifications sent by the site, measured over the
      last 7 days.
    </summary>
  </metric>
  <metric name="DaysSinceRevocation">
    <summary>
      The number of days between the website was put in the potential revocation
      list and the detected increase in site engagement.
    </summary>
  </metric>
  <metric name="NewSiteEngagement">
    <summary>
      New site engagement after user interaction with the site.
    </summary>
  </metric>
  <metric name="NotificationClickCount">
    <summary>
      The notification clicks count, observered while the site is in the
      proposed revocation list.
    </summary>
  </metric>
  <metric name="OldSiteEngagement">
    <summary>
      Site engagement score when the site marked for revocation.
    </summary>
  </metric>
  <metric name="PageVisitCount">
    <summary>
      The page visits count, observered while the site is in the proposed
      revocation list.
    </summary>
  </metric>
  <metric name="RevocationState" enum="DisruptiveNotificationRevocationState">
    <summary>
      The revocation state (either proposed or actually revoked).
    </summary>
  </metric>
</event>

<event name="SafetyHub.DisruptiveNotificationRevocations.Proposed">
  <owner>olesiamarukhnno@google.com</owner>
  <owner>antoniosartori@chromium.org</owner>
  <summary>
    Recorded when Safety Hub would propose to revoke a disruptive notification
    permissions for a site. The check is performed every time a notification
    from the website is displayed. Notifications are considered disruptives when
    sent by websites with both very low site engagement index and high volume of
    notifications. After a revocation is proposed, this metric will not be
    reported anymore for the website for 30 days. After metrics were collected,
    during the full launch the permission will be revoked on the next Safety
    Check run.
  </summary>
  <metric name="DailyAverageVolume">
    <summary>
      Average daily volume of notifications sent by the site, measured over the
      last 7 days.
    </summary>
  </metric>
  <metric name="SiteEngagement">
    <summary>
      Site engagement for the disruptive site.
    </summary>
  </metric>
</event>

<event name="SafetyHub.DisruptiveNotificationRevocations.UserRegrant">
  <owner>olesiamarukhnno@google.com</owner>
  <owner>antoniosartori@chromium.org</owner>
  <summary>
    Recorded when a user has granted a notification permission for a site where
    notifications where revoked due to disruptive notifications. Recorded when
    user is visiting a site and has allowed notification permission for a site
    in the revoke list.
  </summary>
  <metric name="DailyAverageVolume">
    <summary>
      Average daily volume of notifications sent by the site, measured over the
      last 7 days.
    </summary>
  </metric>
  <metric name="DaysSinceRevocation">
    <summary>
      The number of days between the website was put in the potential revocation
      list and the detected increase in site engagement.
    </summary>
  </metric>
  <metric name="NewSiteEngagement">
    <summary>
      New site engagement after user interaction with the site.
    </summary>
  </metric>
  <metric name="OldSiteEngagement">
    <summary>
      Site engagement score when the site marked for revocation.
    </summary>
  </metric>
</event>

<event name="SalientImageAvailability" singular="True">
  <owner>chrome-intelligence-core@google.com</owner>
  <owner>tbansal@chromium.org</owner>
  <summary>
    Metrics on the salient image of the page, one record per page load commit
    and has an annotation calculated on it.
  </summary>
  <metric name="ImageAvailability"
      enum="OptimizationGuideSalientImageAvailability">
    <summary>
      Records whether salient image was available or not for this page, the
      source of the salient image and why it was unavailable.
    </summary>
  </metric>
</event>

<event name="SameSiteDifferentSchemeRequest">
  <owner>bingler@chromium.org</owner>
</event>

<event name="SameSiteDifferentSchemeResponse">
  <owner>bingler@chromium.org</owner>
</event>

<event name="SamesiteRedirectContextDowngrade">
  <owner>bingler@chromium.org</owner>
  <summary>
    A collection of metrics which are recorded for cookies whose inclusion would
    be changed if the redirect chain was considered in their same-site
    calculation. This change in inclusion is because the same-site context would
    &quot;downgrade&quot; from a more permissive context to a less permissive
    context, one which may not allow a cookie's inclusion.
  </summary>
  <metric name="AgePerCookie">
    <summary>
      Records the age of the cookies, in minutes, for cookies which are being
      read (on a requset or via JS). The value rounded down to the exponential
      bucket with factor of 2.0.
    </summary>
  </metric>
  <metric name="SamesiteValueReadPerCookie" enum="SameSiteCookieValue">
    <summary>
      Records the SameSite value of the cookie for cookies which are being read
      (on a request or via JS).
    </summary>
  </metric>
  <metric name="SamesiteValueWritePerCookie" enum="SameSiteCookieValue">
    <summary>
      Records the SameSite value of the cookie for cookies which are being
      written (on a response or via JS).
    </summary>
  </metric>
</event>

<event name="SavedTabGroup.Navigation">
  <owner>qinmin@chromium.org</owner>
  <owner>shaktisahu@chromium.org</owner>
  <summary>
    A collection of metrics which are recorded for navigations inside saved tab
    groups. The metrics are recorded when a URL is synced from another client
    and Chrome finishes the navigation to that URL.
  </summary>
  <metric name="IsPost" enum="Boolean">
    <summary>
      A boolean indicating whether the current navigation is triggered by a POST
      request.
    </summary>
  </metric>
  <metric name="NumSameUrlLoad">
    <summary>
      Records how many times the same URL, including the current navigation, is
      loaded in the current tab in the past 2 minutes.
    </summary>
  </metric>
  <metric name="NumSameUrlWithoutRefAndQueryParamLoad">
    <summary>
      Records how many times the same URL, without ref and query parameters, is
      loaded in the current tab in the past 2 minutes. The current navigation is
      also included in this count.
    </summary>
  </metric>
  <metric name="TabGroupType" enum="SavedTabGroupType">
    <summary>
      Records the type of the tab group the navigation belongs to, such as
      shared or synced. See |tab_groups::SavedTabGroupTypes| for enum elements.
    </summary>
  </metric>
  <metric name="WasRedirected" enum="Boolean">
    <summary>
      A boolean indicating whether the current navigation involves any
      redirection.
    </summary>
  </metric>
</event>

<event name="ScreenBrightness">
  <owner>pdyson@chromium.org</owner>
  <summary>
    Collects metrics periodically and on screen brightness change.
  </summary>
  <metric name="BatteryPercent">
    <summary>
      Percentage of battery, rounded down to a multiple of 5%, i.e. [0, 5%) is
      mapped to 0, [5%, 10%) is mapped to 5 etc.
    </summary>
  </metric>
  <metric name="Brightness">
    <summary>
      Screen percentage brightness. between 0 and 100.
    </summary>
  </metric>
  <metric name="DayOfWeek">
    <summary>
      An enum representing the of the week that the data was logged, defined in
      |ash::power::ml::ScreenBrightnessEvent::Features::ActivityData::
      DayOfWeek|.
    </summary>
  </metric>
  <metric name="DeviceMode">
    <summary>
      An enum representing the mode of the device, defined in
      |ash::power::ml::ScreenBrightnessEvent::Features::EnvData:DeviceMode|
    </summary>
  </metric>
  <metric name="HourOfDay">
    <summary>
      The hour of the day when the data is logged. Hours since midnight in the
      local time zone.
    </summary>
  </metric>
  <metric name="IsAutoclickEnabled">
    <summary>
      Boolean value to represent whether the auto click is currently enabled.
    </summary>
  </metric>
  <metric name="IsBrailleDisplayConnected">
    <summary>
      Boolean value to represent whether the braille display is currently
      enabled.
    </summary>
  </metric>
  <metric name="IsCaretHighlightEnabled">
    <summary>
      Boolean value to represent whether the caret highlight is currently
      enabled.
    </summary>
  </metric>
  <metric name="IsCursorHighlightEnabled">
    <summary>
      Boolean value to represent whether the cursor highlight is currently
      enabled.
    </summary>
  </metric>
  <metric name="IsFocusHighlightEnabled">
    <summary>
      Boolean value to represent whether the focus highlight is currently
      enabled.
    </summary>
  </metric>
  <metric name="IsHighContrastEnabled">
    <summary>
      Boolean value to represent whether the high contrast is currently enabled.
    </summary>
  </metric>
  <metric name="IsLargeCursorEnabled">
    <summary>
      Boolean value to represent whether the large cursor is currently enabled.
    </summary>
  </metric>
  <metric name="IsMagnifierEnabled">
    <summary>
      Boolean value to represent whether the full screen magnifier is currently
      enabled.
    </summary>
  </metric>
  <metric name="IsMonoAudioEnabled">
    <summary>
      Boolean value to represent whether the mono audio is currently enabled.
    </summary>
  </metric>
  <metric name="IsSelectToSpeakEnabled">
    <summary>
      Boolean value to represent whether select to speak is currently enabled.
    </summary>
  </metric>
  <metric name="IsSpokenFeedbackEnabled">
    <summary>
      Boolean value to represent whether the spoken feedback is currently
      enabled.
    </summary>
  </metric>
  <metric name="IsSwitchAccessEnabled">
    <summary>
      Boolean value to represent whether Switch Access is currently enabled.
    </summary>
  </metric>
  <metric name="IsVideoPlaying">
    <summary>
      Boolean value to represent whether video is currently playing.
    </summary>
  </metric>
  <metric name="IsVirtualKeyboardEnabled">
    <summary>
      Boolean value to represent whether the virtual keyboard is currently
      enabled.
    </summary>
  </metric>
  <metric name="LastActivityTimeSec">
    <summary>
      Time between the last activity and when the data was logged. A duration
      timestamp in seconds.
    </summary>
  </metric>
  <metric name="NightLightTemperaturePercent">
    <summary>
      The temperature percentage of night light screen color adjustment when
      night light is on. Ranges from 0 to 100.
    </summary>
  </metric>
  <metric name="NumRecentKeyEvents">
    <summary>
      The number of keyboard events in the last hour.
    </summary>
  </metric>
  <metric name="NumRecentMouseEvents">
    <summary>
      The number of mouse events in the last hour.
    </summary>
  </metric>
  <metric name="NumRecentStylusEvents">
    <summary>
      The number of stylus events in the last hour.
    </summary>
  </metric>
  <metric name="NumRecentTouchEvents">
    <summary>
      The number of touch events in the last hour.
    </summary>
  </metric>
  <metric name="OnBattery">
    <summary>
      Boolean value to represent whether the device is currently on battery
      power.
    </summary>
  </metric>
  <metric name="PreviousBrightness">
    <summary>
      The brightness of the screen prior to the time at which the current event
      was logged.
    </summary>
  </metric>
  <metric name="Reason">
    <summary>
      The reason that the event is logged. Values are enumerated in
      |ash::power::ml::ScreenBrightnessEvent::Event::Reason|.
    </summary>
  </metric>
  <metric name="RecentTimeActiveSec">
    <summary>
      How long the user has been active. A duration timestamp in seconds.
    </summary>
  </metric>
  <metric name="SequenceId">
    <summary>
      The ID of this event in the current session.
    </summary>
  </metric>
  <metric name="TimeSinceLastEventSec">
    <summary>
      Time in seconds since last time an event was logged.
    </summary>
  </metric>
</event>

<event name="Security.SafetyTip">
  <owner>jdeblasio@chromium.org</owner>
  <owner>enamelites@google.com</owner>
  <owner>beggs@google.com</owner>
  <summary>
    Collected when any safety tip heuristic triggers, regardless of whether the
    Safety Tip UI is shown.
  </summary>
  <metric name="SafetyTipInteraction" enum="SafetyTipInteraction">
    <summary>
      How the user interacted with the UI, if applicable.
    </summary>
  </metric>
  <metric name="SafetyTipStatus" enum="SafetyTipStatus">
    <summary>
      The final reported Safety Tip status.
    </summary>
  </metric>
  <metric name="TriggeredKeywordsHeuristics" enum="Boolean">
    <summary>
      Whether the sensitive keywords heuristic triggered.
    </summary>
  </metric>
  <metric name="TriggeredLookalikeHeuristics" enum="Boolean">
    <summary>
      Whether the lookalike keywords heuristic triggered.
    </summary>
  </metric>
  <metric name="TriggeredServerSideBlocklist" enum="Boolean">
    <summary>
      Whether the server-side blocklist heuristic triggered.
    </summary>
  </metric>
  <metric name="UserPreviouslyIgnored" enum="Boolean">
    <summary>
      Whether the user had already ignored a safety tip warning for this page in
      the past, meaning no tip was shown.
    </summary>
  </metric>
</event>

<event name="Security.SiteEngagement">
  <owner>cthomp@chromium.org</owner>
  <owner>enamelites@google.com</owner>
  <summary>
    Site engagement score behavior for a page with a given Security Level.
  </summary>
  <metric name="FinalSecurityLevel">
    <summary>
      The final SecurityLevel of the page before it is closed or another
      navigation occurs. Based on the enum security_state::SecurityLevel.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InitialSecurityLevel">
    <summary>
      The initial SecurityLevel of the page when the navigation commits. Based
      on the enum security_state::SecurityLevel.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SafetyTipStatus" enum="SafetyTipStatus">
    <summary>
      The Safety Tip status of the page when the navigation commits, after the
      reputation check finishes.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ScoreDelta">
    <summary>
      The change in Site Engagement score for the page before it is closed or
      another navigation occurs compared to the score from when the navigation
      committed. Score is between 0.0 and 100.0; delta is between -100.0 and
      100.0. Rounded to the nearest integer.
    </summary>
  </metric>
  <metric name="ScoreFinal">
    <summary>
      The final Site Engagement score for the page before it is closed or
      another navigation occurs. Score is between 0.0 and 100.0; this metric is
      rounded down to a multiple of 10 to limit granularity.
    </summary>
  </metric>
</event>

<event name="Segmentation.ModelExecution">
  <owner>nyquist@chromium.org</owner>
  <owner>qinmin@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    Input and output tensors for executing the ML model identified by
    optimization targets and version. The input tensors can come from UMA or
    UKM, with or without aggregation. Check model metadata for more information
    about each tensor. Since all the ML tensors are floats, they are encoded
    into int64 and will be decoded later during model training. This metric is
    recorded after an ML model is executed, and the actual result is collected.
  </summary>
  <metric name="ActualResult">
    <summary>
      UMA or UKM metrics related to the features affected by the ML model, with
      or without aggregation, after running the features as instructed by the ML
      model. For example, this can be the 7 day total button clicks after an ML
      model decides to show it. No encoding is used as this is normally a count
      or sum of a UMA/UKM metric.
    </summary>
  </metric>
  <metric name="ActualResult10">
    <summary>
      The 10th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult2">
    <summary>
      The 2nd UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult3">
    <summary>
      The 3rd UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult4">
    <summary>
      The 4th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult5">
    <summary>
      The 5th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult6">
    <summary>
      The 6th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult7">
    <summary>
      The 7th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult8">
    <summary>
      The 8th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="ActualResult9">
    <summary>
      The 9th UMA or UKM metrics related to the features affected by the ML
      model, with or without aggregation, after running the features as
      instructed by the ML model. No encoding is used.
    </summary>
  </metric>
  <metric name="Input0">
    <summary>
      The input tensor at index 0 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input1">
    <summary>
      The input tensor at index 1 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input10">
    <summary>
      The input tensor at index 10 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input11">
    <summary>
      The input tensor at index 11 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input12">
    <summary>
      The input tensor at index 12 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input13">
    <summary>
      The input tensor at index 13 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input14">
    <summary>
      The input tensor at index 14 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input15">
    <summary>
      The input tensor at index 15 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input16">
    <summary>
      The input tensor at index 16 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input17">
    <summary>
      The input tensor at index 17 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input18">
    <summary>
      The input tensor at index 18 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input19">
    <summary>
      The input tensor at index 19 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input2">
    <summary>
      The input tensor at index 2 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input20">
    <summary>
      The input tensor at index 20 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input21">
    <summary>
      The input tensor at index 21 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input22">
    <summary>
      The input tensor at index 22 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input23">
    <summary>
      The input tensor at index 23 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input24">
    <summary>
      The input tensor at index 24 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input25">
    <summary>
      The input tensor at index 25 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input26">
    <summary>
      The input tensor at index 26 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input27">
    <summary>
      The input tensor at index 27 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input28">
    <summary>
      The input tensor at index 28 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input29">
    <summary>
      The input tensor at index 29 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input3">
    <summary>
      The input tensor at index 3 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input30">
    <summary>
      The input tensor at index 30 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input31">
    <summary>
      The input tensor at index 31 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input32">
    <summary>
      The input tensor at index 32 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input33">
    <summary>
      The input tensor at index 33 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input34">
    <summary>
      The input tensor at index 34 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input35">
    <summary>
      The input tensor at index 35 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input36">
    <summary>
      The input tensor at index 36 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input37">
    <summary>
      The input tensor at index 37 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input38">
    <summary>
      The input tensor at index 38 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input39">
    <summary>
      The input tensor at index 39 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input4">
    <summary>
      The input tensor at index 4 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input40">
    <summary>
      The input tensor at index 40 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input41">
    <summary>
      The input tensor at index 41 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input42">
    <summary>
      The input tensor at index 42 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input43">
    <summary>
      The input tensor at index 43 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input44">
    <summary>
      The input tensor at index 44 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input45">
    <summary>
      The input tensor at index 45 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input46">
    <summary>
      The input tensor at index 46 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input47">
    <summary>
      The input tensor at index 47 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input48">
    <summary>
      The input tensor at index 48 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input49">
    <summary>
      The input tensor at index 49 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input5">
    <summary>
      The input tensor at index 5 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input6">
    <summary>
      The input tensor at index 6 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input7">
    <summary>
      The input tensor at index 7 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input8">
    <summary>
      The input tensor at index 8 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="Input9">
    <summary>
      The input tensor at index 9 represented in IEEE 754 double precision.
    </summary>
  </metric>
  <metric name="ModelVersion">
    <summary>
      The version of the ML model used for execution. May not be a counter int.
    </summary>
  </metric>
  <metric name="OptimizationTarget">
    <summary>
      The OptimizationTarget associated with the ML model. This is an enum for
      classifying different ML models. It represents what an model is trying to
      optimize.
    </summary>
  </metric>
  <metric name="OutputDelaySec">
    <summary>
      The time from last segment selection to when the UKM is recorded, in
      seconds.
    </summary>
  </metric>
  <metric name="PredictionResult">
    <summary>
      Predicted result from executing the ML model. This is normally a score for
      determining whether to show a particular feature. The value is a floating
      number between 0 to 1 and encoded into IEEE 754 double precision here.
      This is being deprecated. Use PredictionResult1 instead. Will add
      deprecated flag once all the code are start using PredictionResult1.
    </summary>
  </metric>
  <metric name="PredictionResult1">
    <summary>
      The 1st output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult10">
    <summary>
      The 10th output when inferencing the ML model with input data. The value
      is a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult2">
    <summary>
      The 2nd output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult3">
    <summary>
      The 3rd output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult4">
    <summary>
      The 4th output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult5">
    <summary>
      The 5th output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult6">
    <summary>
      The 6th output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult7">
    <summary>
      The 7th output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult8">
    <summary>
      The 8th output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="PredictionResult9">
    <summary>
      The 9th output when inferencing the ML model with input data. The value is
      a floating number between 0 to 1 and encoded into IEEE 754 double
      precision here.
    </summary>
  </metric>
  <metric name="SelectionResult">
    <summary>
      The OptimizationTarget of the last selected segment before UKM is
      recorded. Some features might have several ML models with them. This
      metric records which model is currently selected for the feature.
    </summary>
  </metric>
</event>

<event name="ServiceWorker.MainResource.FetchHandlerError">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <summary>
    Recorded when a Service Worker fetch handler fails to load a main resource
    due to a network error (such as &quot;failed to fetch&quot; errors occurring
    in fetch() inside the fetch handler) or timing out during
    race-network-and-fetch or normal fetch handler execution.
  </summary>
  <metric name="InitiatorType" enum="ServiceWorkerFetchHandlerInitiatorType">
    <summary>
      Indicates how the fetch handler was invoked.
    </summary>
  </metric>
  <metric name="RaceFetchNetworkErrorCode">
    <summary>
      The specific net::ERR_ code indicating the reason for the failure.
      (possible values are listed in net_error_list.h). Records the network
      error that occurred when the Service Worker static routing API's
      'race-network-and-fetch' handler deduplicates the network fetch with the
      fetch() API call to the navigation URL. This metric is only populated when
      this static routing strategy is active.
    </summary>
  </metric>
  <metric name="RegularFetchNetworkErrorCode">
    <summary>
      The specific net::ERR_ code indicating the reason for the failure.
      (possible values are listed in net_error_list.h). Records the network
      error of the initial fetch() API call in cases where the deduplication
      mentioned above does not apply.
    </summary>
  </metric>
</event>

<event name="ServiceWorker.MainResourceLoadCompleted">
  <owner>suzukikeita@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <summary>
    Events taken when the main resource is loaded. This only occurs when the
    static routing API is used.
  </summary>
  <metric name="ActualRouterSourceType" enum="ServiceWorkerRouterSourceType">
    <summary>
      The actual router source type for Static Routing API. This indicates which
      source type was actually used to get the resource. This will be recorded
      only when the router has matched the incoming resource.
    </summary>
  </metric>
  <metric name="CacheLookupTime">
    <summary>
      Time spent to conduct cache lookup (right before creating the cache lookup
      request to right after the browser process receives the cache result).
      Recorded when the service worker has associated routing info with the
      `cache` as the rule, and the browser or renderer is processing requests.
      Duration in units of milliseconds.
    </summary>
  </metric>
  <metric name="InitialWorkerStatus" enum="ServiceWorkerStatus">
    <summary>
      ServiceWorker running status at the time when the SW is handling the main
      resource. Recorded regardless of the router existence via Static Routing
      API.
    </summary>
  </metric>
  <metric name="MatchedFirstRouterSourceType"
      enum="ServiceWorkerRouterSourceType">
    <summary>
      The result of the router evaluation of the Static Routing API. This
      indicates which source type is specified to get the resource. This will be
      recorded only when the router has matched the incoming resource.
    </summary>
  </metric>
  <metric name="RouterEvaluationTime">
    <summary>
      Time spent for the SW static routing API router evaluation to handle a
      request. Recorded when the service worker has associated routing info, and
      the browser or renderer is processing requests. Duration in units of micro
      seconds.
    </summary>
  </metric>
  <metric name="RouterRuleCount">
    <summary>
      The sum of registered router rules with the Static Routing API in main
      resource. Recorded per navigation when the service worker, which has
      associated routing info, is activated. This is rounded down to the nearest
      exponential bucket (with a bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="WorkerStatusOnEvaluation" enum="ServiceWorkerStatus">
    <summary>
      ServiceWorker running status at the time when router evaluation is
      conducted.

      We expect this is equivalent to `InitialWorkerStatus` in most cases.
      However, those are set in different tasks (ctor and `StartRequest()` in
      SWMainResourceLoader) and some other task may update the status between
      them. We keep both metrics just in case.
    </summary>
  </metric>
</event>

<event name="ServiceWorker.OnLoad">
  <owner>yyanagisawa@chromium.org</owner>
  <owner>chrome-worker@google.com</owner>
  <summary>
    Events taken at the end of the loading pages controlled by the service
    workers. It means that the metrics is recorded only if the loading is
    successfully completed.
  </summary>
  <metric name="AudioFallback">
    <summary>
      True if there are network fallback sub-resources of audios in the page.
      (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="AudioHandled">
    <summary>
      True if there are service workers handling sub-resource loads of audios in
      the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="CSSStyleSheetFallback">
    <summary>
      True if there are network fallback sub-resources of CSSStyleSheet in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="CSSStyleSheetHandled">
    <summary>
      True if there are service workers handling sub-resource loads of
      CSSStyleSheet in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="DictionaryFallback">
    <summary>
      True if there are network fallback sub-resources of Dictionary in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="DictionaryHandled">
    <summary>
      True if there are service workers handling sub-resource loads of
      Dictionary in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="FontFallback">
    <summary>
      True if there are network fallback sub-resources of CSSStyleSheet in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="FontHandled">
    <summary>
      True if there are service workers handling sub-resource loads of fonts in
      the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="ImageFallback">
    <summary>
      True if there are network fallback sub-resources of images in the page.
      (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="ImageHandled">
    <summary>
      True if there are service workers handling sub-resource loads of images in
      the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="LinkPrefetchFallback">
    <summary>
      True if there are network fallback sub-resources of link prefetches in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="LinkPrefetchHandled">
    <summary>
      True if there are service workers handling sub-resource loads of link
      prefetches in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="MainAndSubResourceLoadLocation"
      enum="ServiceWorkerResourceLoadStatus">
    <summary>
      Enum value to represent how main / sub resource are loaded.
    </summary>
  </metric>
  <metric name="ManifestFallback">
    <summary>
      True if there are network fallback sub-resources of manifests in the page.
      (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="ManifestHandled">
    <summary>
      True if there are service workers handling sub-resource loads of manifests
      in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="MatchedCacheRouterSourceCount">
    <summary>
      Total number of sub-resources which were matched to
      `RouterSourceEnum.cache` in ServiceWorker Static Routing API, from
      navigation start until onload event. This is rounded down to the nearest
      exponential bucket (with a bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="MatchedFetchEventRouterSourceCount">
    <summary>
      Total number of sub-resources which were matched to
      `RouterSourceEnum.fetch-event` in ServiceWorker Static Routing API, from
      navigation start until onload event. This is rounded down to the nearest
      exponential bucket (with a bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="MatchedNetworkRouterSourceCount">
    <summary>
      Total number of sub-resources which were matched to
      `RouterSourceEnum.network` in ServiceWorker Static Routing API, from
      navigation start until onload event. This is rounded down to the nearest
      exponential bucket (with a bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="MatchedRaceNetworkAndFetchRouterSourceCount">
    <summary>
      Total number of sub-resources which were matched to the
      `RouterSourceEnum.race-network-and-fetch-handler` in ServiceWorker Static
      Routing API, from navigation start till onload event. This is rounded down
      to the nearest exponential bucket (with a bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="ScriptFallback">
    <summary>
      True if there are network fallback sub-resources of CSSStyleSheet in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="ScriptHandled">
    <summary>
      True if there are service workers handling sub-resource loads of scripts
      in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="SpeculationRulesFallback">
    <summary>
      True if there are network fallback sub-resources of speculation rules in
      the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="SpeculationRulesHandled">
    <summary>
      True if there are service workers handling sub-resource loads of
      speculation rules in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="SubResourceFallbackRatio">
    <summary>
      An integer ratio (0 - 100) to represent the ratio of network fallbacks
      from the total subresource load.
    </summary>
  </metric>
  <metric name="SVGDocumentFallback">
    <summary>
      True if there are network fallback sub-resources of SVG documents in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="SVGDocumentHandled">
    <summary>
      True if there are service workers handling sub-resource loads of SVG
      documents in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="TextTrackFallback">
    <summary>
      True if there are network fallback sub-resources of text tracks in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="TextTrackHandled">
    <summary>
      True if there are service workers handling sub-resource loads of text
      tracks in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="TotalCacheLookupTime">
    <summary>
      Total time spent to conduct cache lookup. Recorded when the service worker
      has associated routing info with the `cache` as the rule, and the browser
      or renderer is processing requests. The field is the sum of all cache
      lookup time of subresources. i.e. if there are X resources whose router
      source is `cache` for example, this value will be the sum of X cache
      lookup durations regardless of cache hit or miss. Duration in units of
      milli seconds.
    </summary>
  </metric>
  <metric name="TotalRouterEvaluationTime">
    <summary>
      Total time spent for the router evaluation to handle a request. Recorded
      when the service worker has associated routing info, and the browser or
      renderer is processing requests. Duration in units of micro seconds.
    </summary>
  </metric>
  <metric name="TotalSubResourceFallback">
    <summary>
      The number of network fallbacks during sub resource load. This is rounded
      down to the nearest exponential bucket (with a bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="TotalSubResourceLoad">
    <summary>
      The number of all sub resource load of the page controlled by the service
      worker. This is rounded down to the nearest exponential bucket (with a
      bucket ratio on 1.15).
    </summary>
  </metric>
  <metric name="VideoFallback">
    <summary>
      True if there are network fallback sub-resources of videos in the page.
      (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="VideoHandled">
    <summary>
      True if there are service workers handling sub-resource loads of videos in
      the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="XSLStyleSheetFallback">
    <summary>
      True if there are network fallback sub-resources of XSLStyleSheet in the
      page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
  <metric name="XSLStyleSheetHandled">
    <summary>
      True if there are service workers handling sub-resource loads of
      XSLStyleSheet in the page. (boolean value. true: 1 or false: 0)
    </summary>
  </metric>
</event>

<event name="SharedHighlights.LinkGenerated">
  <owner>jeffreycohen@chromium.org</owner>
  <owner>chrome-creation@google.com</owner>
  <summary>
    Event representing the user action of selecting a piece of text on a page
    and selecting the option to create a link which would contain the necessary
    text fragment information to link back to this specific part of the page.
  </summary>
  <metric name="Error" enum="LinkGenerationError">
    <summary>
      Record the type of error which prevented a successful link generation.
      Only recorded if the link creation failed.
    </summary>
  </metric>
  <metric name="Success" enum="Boolean">
    <summary>
      Whether the generation of a link with text fragments was successful or
      not.
    </summary>
  </metric>
</event>

<event name="SharedHighlights.LinkGenerated.Requested">
  <owner>jeffreycohen@chromium.org</owner>
  <owner>chrome-creation@google.com</owner>
  <summary>
    Event representing the user action of selecting a piece of text on a page
    and selecting the option to create a link which would contain the necessary
    text fragment information to link back to this specific part of the page.
  </summary>
  <metric name="Error" enum="LinkGenerationError">
    <summary>
      Record the type of error which prevented offering link to text to user.
      Only recorded if the link was not offered to the user.
    </summary>
  </metric>
  <metric name="Success" enum="Boolean">
    <summary>
      Whether the link with text fragments was successful offered to the user or
      not.
    </summary>
  </metric>
</event>

<event name="SharedHighlights.LinkOpened" singular="true">
  <owner>jeffreycohen@chromium.org</owner>
  <owner>chrome-creation@google.com</owner>
  <summary>
    Event representing the browser action of highlighting (incl. scroll-to) text
    fragments that were part of the URL. This happens only once during page
    load.
  </summary>
  <metric name="Source" enum="TextFragmentLinkOpenSource">
    <summary>
      Record the type of source for the current navigation, which has text
      fragments. At the moment, this maps to identifying whether the source is a
      known search engine, Send Tab To Self, or unknown.
    </summary>
  </metric>
  <metric name="Success" enum="Boolean">
    <summary>
      Whether the highlighting of a set of text fragments was a complete success
      or not.
    </summary>
  </metric>
</event>

<event name="SharedStorage.Worklet.OnDestroyed">
  <owner>yaoxia@chromium.org</owner>
  <owner>cammie@chromium.org</owner>
  <summary>
    Metrics for Shared Storage worklet. Each document can create zero or more
    worklets, and the recorded URL represents the URL of the top-level page that
    creates the worklet. (Note: The Storage.SharedStorage.Worklet.NumPerPage
    histogram tracks the number of worklets per page.) Recorded when a worklet
    is destroyed. See https://wicg.github.io/shared-storage/#worklet.
  </summary>
  <metric name="AbsoluteUsefulResourceDuration">
    <summary>
      The total duration (ms) that a Shared Storage worklet is actively
      processing operations (i.e, from the worklet's creation until either its
      last operation completes or it is destroyed). The number is exponentially
      bucketed.
    </summary>
  </metric>
</event>

<event name="Sharing.ClickToCall">
  <owner>knollr@chromium.org</owner>
  <summary>
    Collected when a user finishes a Click to Call journey.
  </summary>
  <metric name="EntryPoint" enum="SharingClickToCallEntryPoint">
    <summary>
      Specifies the entry point of the user journey (i.e. left click, right
      click, text selection).
    </summary>
  </metric>
  <metric name="HasApps" enum="Boolean">
    <summary>
      Boolean value indicating whether any (&gt;0) apps are available that the
      call could be sent to.
    </summary>
  </metric>
  <metric name="HasDevices" enum="Boolean">
    <summary>
      Boolean value indicating whether any (&gt;0) devices are available that
      the call could be sent to. These belong to the same account and are
      running Android.
    </summary>
  </metric>
  <metric name="Selection" enum="SharingClickToCallSelection">
    <summary>
      Whether the user selected a device, an app or nothing (i.e. dismissal) in
      the user interface. For some entry points this might always be the same
      value (e.g. right clicks always select devices).
    </summary>
  </metric>
</event>

<event name="Shopping.Compare.ClusterIdenfitiedByClient">
  <owner>yuezhanggg@chromium.org</owner>
  <owner>chrome-shopping-eng@google.com</owner>
  <summary>
    Recorded when we identified a set of URLs that users might be doing
    comparison in using the client-side heuristics, and after checking if these
    URLs are comparable based on a server call. This event is recorded one per
    URL for all URLs in the set.
  </summary>
  <metric name="ComparableByServer" enum="Boolean">
    <summary>
      Whether the URL in this client-identified cluster is also comparable based
      on the response from querying the server.
    </summary>
  </metric>
  <metric name="CompareEventID">
    <summary>
      An ID corresponding to the event that will enable joining all active tabs
      for this event together.
    </summary>
  </metric>
</event>

<event name="Shopping.Discounts">
  <owner>meiliang@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <owner>chrome-shopping-eng@google.com</owner>
  <summary>
    Recorded when a user navigates to a product details page with an available
    discount that is eligible for auto popup. This gives us the true auto popup
    population.
  </summary>
  <metric name="AutoPopupEligibleButSuppressed" enum="Boolean">
    <summary>
      Whether the eligible popup bubble was suppressed. This is controlled by a
      feature flag. Logging the feature flag value to create two groups for data
      analysis.
    </summary>
  </metric>
</event>

<event name="Shopping.MerchantTrust.BubbleOpened">
  <owner>tommasin@chromium.org</owner>
  <owner>privacy-on-the-web@google.com</owner>
  <summary>
    Recorded when the merchant trust bubble is opened.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the bubble is opened. Only records true values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.MerchantTrust.DataAvailable">
  <owner>zhiyuancai@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <summary>
    Recorded when user finishes a navigation while the merchant trust data is
    available.
  </summary>
  <metric name="DataAvailable" enum="Boolean">
    <summary>
      A boolean signaling that data is available. Only records true values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.MerchantTrust.MessageClicked">
  <owner>zhiyuancai@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <summary>
    Recorded when a merchant trust message is clicked by the user.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that message is clicked. Only records true values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.MerchantTrust.MessageSeen">
  <owner>zhiyuancai@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <summary>
    Recorded when a merchant trust message is displayed to the user.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that message is displayed. Only records true values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.MerchantTrust.RowClicked">
  <owner>zhiyuancai@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <summary>
    Recorded when a store info row in trusted surface is clicked by the user.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that store info row is clicked. Only records true
      values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.MerchantTrust.RowSeen">
  <owner>zhiyuancai@chromium.org</owner>
  <owner>ayman@chromium.org</owner>
  <summary>
    Recorded when a store info row in trusted surface is displayed to the user.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that store info row is displayed. Only records true
      values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.MerchantTrust.SidePanelOpened">
  <owner>tommasin@chromium.org</owner>
  <owner>privacy-on-the-web@google.com</owner>
  <summary>
    Recorded when the merchant trust side panel is opened.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the side panel is opened. Only records true
      values.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Shopping.PDPStateWithLocalInfo">
  <owner>yuezhanggg@chromium.org</owner>
  <owner>mdjones@chromium.org</owner>
  <summary>
    Records if and how a page has been determined to be a product details page.
    It is recorded per eligible navigation (e.g. limited to main frame
    navigation, http/https check, etc), and is recorded after the page has
    finished loading.
  </summary>
  <metric name="PDPState" enum="ShoppingPDPDetectionMethod">
    <summary>
      The state of if and how the page has been determined to be a product
      details page.
    </summary>
  </metric>
</event>

<event name="Shopping.ShoppingAction">
  <owner>yuezhanggg@chromium.org</owner>
  <owner>mdjones@chromium.org</owner>
  <summary>
    Recorded when an user takes action on shopping features in Chrome in the
    current page.
  </summary>
  <metric name="DiscountCopied" enum="Boolean">
    <summary>
      Whether the user has clicked in the discount bubble to copy the discount
      code.
    </summary>
  </metric>
  <metric name="DiscountOpened" enum="Boolean">
    <summary>
      Whether the user has clicked and expanded the discount bubble in omnibox.
    </summary>
  </metric>
  <metric name="PriceInsightsOpened" enum="Boolean">
    <summary>
      Whether the user has clicked the page action entry point to request to
      show the price insights.
    </summary>
  </metric>
  <metric name="PriceTracked" enum="Boolean">
    <summary>
      Whether the user has tracked the product on the current page using any of
      the on-page entry points.
    </summary>
  </metric>
</event>

<event name="Shopping.ShoppingInformation">
  <owner>yuezhanggg@chromium.org</owner>
  <owner>mdjones@chromium.org</owner>
  <summary>
    Recorded when an user navigates to a shopping-related page and reports
    shopping-related information about this page.
  </summary>
  <metric name="HasDiscount" enum="Boolean">
    <summary>
      Whether a discount from Chrome is available for this page.
    </summary>
  </metric>
  <metric name="HasPriceInsights" enum="Boolean">
    <summary>
      Whether price insights is available for this page.
    </summary>
  </metric>
  <metric name="IsPriceTrackable" enum="Boolean">
    <summary>
      Whether the page is price trackable.
    </summary>
  </metric>
  <metric name="IsShoppingContent" enum="Boolean">
    <summary>
      Whether the page is classified as shopping content.
    </summary>
  </metric>
  <metric name="PromotedFeature" enum="ShoppingContextualFeature">
    <summary>
      Which, if any, contextual shopping feature is promoted in expanded state
      or in-product highlight.
    </summary>
  </metric>
</event>

<event name="Site.Install">
  <owner>dibyapal@chromium.org</owner>
  <owner>pwa-team@google.com</owner>
  <summary>
    Records various metrics about whether a particular site has been installed
    as a PWA or not.
  </summary>
  <metric name="IsFullyInstalled" enum="Boolean">
    <summary>
      Measured if the site matches the scope of any installed PWAs present in
      the profile.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsPartiallyInstalled" enum="Boolean">
    <summary>
      Measured if the app is partially installed via sync. This means that the
      user has installed the app on another device, and it exists in their sync
      profile, but it is not 'fully' installed on this device. This is expected
      to be a strong signal that the user will want to install the app fully on
      this device, as they already have it installed elsewhere.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Site.Manifest">
  <owner>dibyapal@chromium.org</owner>
  <owner>pwa-team@google.com</owner>
  <summary>
    Records various signals regarding the fields present inside a manifest. If
    the DisplayMode is undefined, HasStartUrl is kEmpty, and all the other
    fields are false, then that denotes a site that has no manifest. For all
    other use-cases, the existence of a manifest is confirmed.
  </summary>
  <metric name="DisplayMode" enum="WebAppDisplayMode">
    <summary>
      Records the display mode populated inside the manifest as per the manifest
      specifications. If it does not exist, this is measured as Undefined.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasBackgroundColor" enum="NullableBoolean">
    <summary>
      Records whether the manifest has the background_color field populated.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasIconsAny" enum="NullableBoolean">
    <summary>
      Records whether the manifest has icons of purpose ANY.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasIconsMaskable" enum="NullableBoolean">
    <summary>
      Records whether the manifest has maskable icons.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasName" enum="NullableBoolean">
    <summary>
      Records whether the manifest has the name field populated.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasScreenshots" enum="NullableBoolean">
    <summary>
      Records whether the manifest has valid screenshots specified.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasStartUrl" enum="ManifestUrlValidity">
    <summary>
      Records whether the manifest has a valid URL in the start_url field.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasThemeColor" enum="NullableBoolean">
    <summary>
      Records whether the manifest has the theme_color field populated.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Site.Quality">
  <owner>dibyapal@chromium.org</owner>
  <owner>pwa-team@google.com</owner>
  <summary>
    Records various signals about a site that boost its chances of being
    installed as a web app, like valid fetch handlers (boosting offline
    capabilities), service worker data usage and whether the site has favicons.
  </summary>
  <metric name="CacheStorageSize">
    <summary>
      Measures the service worker cache storage size as determined by the Quota
      system for a site in bytes.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasFavicons" enum="Boolean">
    <summary>
      Records whether the site has non-default favicons or not. Non-default
      favicons are those which are either explicitly set in the client side, or
      are icons obtained from the manifest. The default favicon set by chrome,
      that follows document_url/favicon.ico is not counted as part of this
      metric.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="HasFetchHandler" enum="Boolean">
    <summary>
      Records if the service worker exists and has a valid fetch handler.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ServiceWorkerScriptSize">
    <summary>
      Measured the size of the service worker script in bytes. If the service
      worker does not exist, then a script size of 0 is measured.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SiteFamiliarityHeuristicResult">
  <owner>pkotwicz@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when a toplevel page navigates. This records which
    user-page-familiarity-heuristics would trigger for a given site, if any.
  </summary>
  <metric name="AnyHeuristicsMatch" enum="Boolean">
    <summary>
      Whether any familiarity heuristics would trigger on the site.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="OnHighConfidenceAllowlist" enum="Boolean">
    <summary>
      Whether the site is on the safe browsing high confidence allowlist.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SiteEngagementScore">
    <summary>
      Site engagement score in the range [0, 100], rounded down to a multiple of
      10 to limit granularity.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SiteFamiliarityHistoryHeuristic"
      enum="SiteFamiliarityHistoryHeuristicName">
    <summary>
      The most stringent navigation-history related familiarity heuristic that
      would trigger on the site. If no navigation-history heuristic matches then
      the value NO_HEURISTIC_MATCH is recorded.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SmartCharging">
  <owner>thanhdng@chromium.org</owner>
  <owner>jiameng@chromium.org</owner>
  <summary>
    Records user activities that are related to charging such as battery
    percentage, time, device type, etc.
  </summary>
  <metric name="BatteryPercentage">
    <summary>
      Percentage of the battery.
    </summary>
  </metric>
  <metric name="BatteryPercentageBeforeLastCharge">
    <summary>
      The percentage of the battery at the beginning of the last charge.
    </summary>
  </metric>
  <metric name="BatteryPercentageOfLastCharge">
    <summary>
      The percentage of the battery that the last charge reached.
    </summary>
  </metric>
  <metric name="DayOfMonth">
    <summary>
      Event's day of the month (e.g. 1-31) in local time zone.
    </summary>
  </metric>
  <metric name="DayOfWeek" enum="DayOfWeek">
    <summary>
      Event's day of the week in local time zone. Sunday is 0.
    </summary>
  </metric>
  <metric name="DeviceMode">
    <summary>
      Mode of the device (e.g. closed lid, tablet).
    </summary>
  </metric>
  <metric name="DeviceType">
    <summary>
      Type of the device (e.g. laptop, tablet).
    </summary>
  </metric>
  <metric name="DurationOfLastCharge">
    <summary>
      Duratioin of the last time the device was charged in minutes.
    </summary>
  </metric>
  <metric name="DurationRecentAudioPlaying">
    <summary>
      Duration of audio playing in the last 30 minutes (bucketized and in
      minutes).
    </summary>
  </metric>
  <metric name="DurationRecentVideoPlaying">
    <summary>
      Duration of video playing in the last 30 minutes (bucketized and in
      minutes).
    </summary>
  </metric>
  <metric name="EventId">
    <summary>
      A unique number that represent order of an event.
    </summary>
  </metric>
  <metric name="HaltFromLastCharge" enum="Boolean">
    <summary>
      Whether there's any shutdown/suspend actions between the last charge and
      current event.
    </summary>
  </metric>
  <metric name="IsCharging" enum="Boolean">
    <summary>
      Whether the device is being charged or not.
    </summary>
  </metric>
  <metric name="Month" enum="Month">
    <summary>
      Event's month (e.g. Jan-Dec) in local time zone. January is 1.
    </summary>
  </metric>
  <metric name="NumRecentKeyEvents">
    <summary>
      Number of key events in past 30 minutes.
    </summary>
  </metric>
  <metric name="NumRecentMouseEvents">
    <summary>
      Number of mouse events in past 30 minutes.
    </summary>
  </metric>
  <metric name="NumRecentStylusEvents">
    <summary>
      Number of stylus events in past 30 minutes.
    </summary>
  </metric>
  <metric name="NumRecentTouchEvents">
    <summary>
      Number of touch events in past 30 minutes.
    </summary>
  </metric>
  <metric name="Reason" enum="SmartChargingReason">
    <summary>
      Reason for the logging of an event.
    </summary>
  </metric>
  <metric name="ScreenBrightnessPercent">
    <summary>
      Brightness of the screen in percent.
    </summary>
  </metric>
  <metric name="TimeOfTheDay">
    <summary>
      Time of the event in minutes since midnight in the local time zone.
    </summary>
  </metric>
  <metric name="TimeSinceLastCharge">
    <summary>
      Time since the last time user unplugged the charger in minutes.
    </summary>
  </metric>
  <metric name="TimezoneDifferenceFromLastCharge">
    <summary>
      Timezone difference from the last charge. It is equal to current_timezone
      - timezone_from_last_charge. The valid range of time zone value will be
      -12 (UTC -12:00) to +14 (UTC +14:00).
    </summary>
  </metric>
  <metric name="Voltage">
    <summary>
      Charge voltage in mV.
    </summary>
  </metric>
</event>

<event name="SMSReceiver">
  <owner>goto@chromium.org</owner>
  <owner>reillyg@chromium.org</owner>
  <owner>ayui@chromium.org</owner>
  <owner>yigu@chromium.org</owner>
  <summary>
    Records performance metrics for SMSReceiver API.
  </summary>
  <metric name="IsCrossOriginFrame" enum="Boolean">
    <summary>
      Flag indicating whether the report comes from a cross-origin frame or not.
    </summary>
  </metric>
  <metric name="Outcome" enum="WebOTPServiceOutcome">
    <summary>
      Records the result of a call to the SmsReceiver API.
    </summary>
  </metric>
  <metric name="SmsParsingStatus" enum="SmsParsingStatus">
    <summary>
      Records the status of parsing an incoming SMS when using the WebOTP API.
      It records one sample per incoming SMS.
    </summary>
  </metric>
  <metric name="TimeSmsReceiveMs">
    <summary>
      Records the duration from when the API is called to when an SMS has been
      successfully received.
    </summary>
  </metric>
  <metric name="TimeSuccessMs">
    <summary>
      Records the duration from when the API is called to when the user presses
      &quot;Allow&quot; to pass the incoming SMS to the site and proceed with
      the SMS verification flow.
    </summary>
  </metric>
  <metric name="TimeUserCancelMs">
    <summary>
      Records the duration from when the API is called to when the user presses
      &quot;Deny&quot; to terminate the SMS verification flow.
    </summary>
  </metric>
</event>

<event name="SoftNavigation" singular="True">
  <owner>mmocny@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Records soft navigation metrics including LCP, CLS, INP. Soft navigation is
    DOM changes that are perceived to be navigation, but there is no page load.
    Soft navigation metrics like LCP are equivalent to their counterpart of the
    PageLoad event.
  </summary>
  <metric name="InteractiveTiming.INPOffset">
    <summary>
      One-based offset in the list of all user interactions of the interaction
      which was the INP (https://web.dev/inp).
    </summary>
  </metric>
  <metric name="InteractiveTiming.INPTime">
    <summary>
      The time (in milliseconds from navigation start) of the interaction which
      was the INP (https://web.dev/inp).
    </summary>
  </metric>
  <metric name="InteractiveTiming.NumInteractions">
    <summary>
      The number of distinct user interactions from the time when the soft
      navigation happens to the time when the next soft navigation happens or
      the page load end. See definition of user interaction:
      https://web.dev/better-responsiveness-metric/#group-events-into-interactions
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric
      name="InteractiveTiming.UserInteractionLatency.HighPercentile2.MaxEventDuration">
    <summary>
      An approximation of a high percentile of user interaction latency from the
      time when the soft navigation happens to the time when the next soft
      navigation happens or the page load end, in ms. For this metric, we
      measure the latency of user interactions by
      Responsiveness.UserInteraction.MaxEventDuration.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric
      name="LayoutInstability.MaxCumulativeShiftScore.SessionWindow.Gap1000ms.Max5000ms">
    <summary>
      Measures the maximum cumulative layout shift (bit.ly/cls-explainer) that
      has occurred from the time when the soft navigation happens to the time
      when the next soft navigation happens or the page load ends in a session
      window. The gap between two consecutive shifts in a window is not bigger
      than 1000ms and the maximum window size is 5000ms. This metric's integral
      value is 100x the fractional cumulative layout shift score described in
      the explainer.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NavigationId">
    <summary>
      Deprecated as of 2026/02/17. Records the navigation id of a soft
      navigation. It is used to differentiate soft navigations.
    </summary>
  </metric>
  <metric name="NavigationType" enum="NavigationTypeForNavigationApi">
    <summary>
      Type of the soft navigation. Corresponds to the first URL change.
    </summary>
  </metric>
  <metric name="PageLoadType">
    <summary>
      Indicates whether the soft navigation occurred within a PageLoad event
      (value 1), a PrerenderPageLoad event (value 2), or a HistoryNavigation
      event (value 3). See page_load_metrics::PageLoadType.
    </summary>
  </metric>
  <metric name="PaintTiming.FirstContentfulPaint">
    <summary>
      Measures the FirstContentfulPaint in milliseconds from the start time of
      the soft navigation to the presentation time.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaint">
    <summary>
      Measures the LargestContentfulPaint in milliseconds from the start time of
      the soft navigation to the presentation time.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintBPP"
      enum="BitsPerPixelExponential">
    <summary>
      Measures the ratio of image file size (in bits) to displayed pixels for
      the LCP candidate. Bucketed into roughly exponential intervals to account
      for the wide range of encountered values (less than 1:100000 to greater
      than 10000:1). This metric is recorded whenever the LCP candidate is an
      image, and omitted when it is text.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageDiscoveryTime">
    <summary>
      Measures the time in milliseconds from soft navigation's start time to the
      time when the image LCP element is requested. This metric is not recorded
      when the LCP element is text or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageLoadEnd">
    <summary>
      Measures the time in milliseconds from soft navigation's start time to the
      time when the image LCP element finishes loading. For animated images,
      this is when the image resource finishes loading completely, not the first
      frame time. See web.dev/optimize-lcp for more details. This metric is not
      recorded when the LCP element is text or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintImageLoadStart">
    <summary>
      Measures the time in milliseconds from soft navigation's start time to the
      time when the image LCP element starts loading. See web.dev/optimize-lcp
      for more details. This metric is not recorded when the LCP element is text
      or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintRequestPriority"
      enum="NetRequestPriority">
    <summary>
      Resource loading priority used for the LCP candidate. This metric is
      recorded whenever the LCP candidate is an image, and omitted when it is
      text or video.
    </summary>
  </metric>
  <metric name="PaintTiming.LargestContentfulPaintType">
    <summary>
      Indicates that type of the LargestContentfulPaint candidate. This value is
      a packed set of flags, defined in
      third_party/blink/public/common/performance/largest_contentful_paint_type.h
    </summary>
  </metric>
  <metric name="StartTime">
    <summary>
      Records the start time of a soft navigation. The start time is a time
      delta in milliseconds relative to the last hard navigation time. It is
      used to analyze the frequency of soft navigations.
    </summary>
  </metric>
</event>

<event name="SplitView.Created">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when a new split view is created.
  </summary>
  <metric name="SplitEventId">
    <summary>
      An ID corresponding to the event that will enable joining both tabs in the
      split together.
    </summary>
  </metric>
  <metric name="SplitViewLayout" enum="SplitViewLayout">
    <summary>
      The orientation of the split which can be horizontal or vertical.
    </summary>
  </metric>
</event>

<event name="SplitView.Updated">
  <owner>agale@chromium.org</owner>
  <owner>top-chrome-desktop-ui@google.com</owner>
  <summary>
    Recorded when a split view is updated which could mean a navigation happened
    within a split view or another tab is swapped into a split.
  </summary>
  <metric name="SplitEventId">
    <summary>
      An ID corresponding to the event that will enable joining both tabs in the
      split together.
    </summary>
  </metric>
  <metric name="SplitViewLayout" enum="SplitViewLayout">
    <summary>
      The orientation of the split which can be horizontal or vertical.
    </summary>
  </metric>
</event>

<event name="SubApp.CountPerParent">
  <owner>vkrot@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    Recorded when chrome starts.
  </summary>
  <metric name="SubAppsCount">
    <summary>
      Sub apps count per parent app, more then 0.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SubApp.InstallResult">
  <owner>vkrot@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    Recorded when subApp install either succeeds or fails per subApps.add call.
  </summary>
  <metric name="Result" enum="SubAppInstallServiceResult">
    <summary>
      Result enum of install operation of a single sub app.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SubApp.Update.ApplyPendingManifestUpdateResult">
  <owner>vkrot@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    Records the result of web app manifest updating a security sensitive field
    (name and icons) for a sub app.
  </summary>
  <metric name="Result" enum="WebAppApplyPendingManifestUpdateResult">
    <summary>
      Result enum of apply pending update operation of a single sub app.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SubApp.Update.ManifestSilentUpdateCheckResult">
  <owner>vkrot@google.com</owner>
  <owner>iwa-team@google.com</owner>
  <summary>
    Records the result of web app manifest silently updating during page
    navigations for a sub app.
  </summary>
  <metric name="Result" enum="WebAppManifestSilentUpdateCheckResult">
    <summary>
      Result enum of manifest silent update operation of a single sub app.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="SubresourceFilter" singular="True">
  <owner>csharrison@chromium.org</owner>
  <summary>
    Recorded for page loads where subresource filtering policy was evaluated.
  </summary>
  <metric name="ActivationDecision">
    <summary>
      Enum that records the policy decision to activate subresource filtering
      for a page load. 0 = Unknown, 1 = Activated, 2 = Disabled, 3 = Deprecated
      value, 4 = URL whitelisted, 5 = Activation conditions not met. 'Activated'
      indicates that subresource filtering was activated. All other reasons
      indicate that subresource filtering was not activated.
    </summary>
  </metric>
  <metric name="DryRun">
    <summary>
      Records '1' if subresource filtering was activated in dry run mode. In dry
      run mode, subresource filtering policy is evaluated against resources
      loaded on the page, but subresource filtering is not actually applied.
    </summary>
  </metric>
  <metric name="EnforcementRedirectPosition">
    <summary>
      An enum denoting where in the redirect chain there was a URL that matched
      one of the subresource_filter activation lists, and wasn't marked as
      warning. See subresource_filter::RedirectPosition for values.
    </summary>
  </metric>
</event>

<event name="SubresourceLoad.ZstdContentEncoding">
  <owner>nidhijaju@chromium.org</owner>
  <owner>blink-network-stack@google.com</owner>
  <summary>
    Event recorded when a response is received that is content-encoded with zstd
    and is a subresource load.
  </summary>
  <metric name="UsedZstd" enum="Boolean">
    <summary>
      Set to 1 if the subresource served zstd-compressed content.
    </summary>
  </metric>
</event>

<event name="SubresourceRedirect.PublicSrcVideoCompression">
  <owner>rajendrant@chromium.org</owner>
  <owner>mcrouse@chromium.org</owner>
  <summary>
    Records coverage information for src videos. Recorded once for every src
    video that is fetched from network.
  </summary>
  <metric name="FullContentLength">
    <summary>
      The full content length of the video retrieved from the first range
      request for the resource. This full content length represents the total
      bytes when the entire video is played. The bytes are rounded down to the
      exponential bucket with factor of 1.3.
    </summary>
  </metric>
  <metric name="SubresourceRedirectResult"
      enum="SubresourceRedirectRedirectResult">
    <summary>
      Enumerates the different results possible for subresource redirection,
      such as redirectable or different reasons of ineligibility.
    </summary>
  </metric>
</event>

<event name="SuspiciousNotificationInteraction">
  <owner>skrakowi@chromium.org</owner>
  <owner>chrome-counter-abuse-alerts@google.com</owner>
  <summary>
    Recorded when the user takes an action on a suspicious notification whose
    contents were replaced by a warning.
  </summary>
  <metric name="SuspiciousInteractionType"
      enum="SuspiciousNotificationWarningInteractions">
    <summary>
      The type of action that the user has taken after receiving a notification
      content detection warning.
    </summary>
  </metric>
  <metric name="SuspiciousScore">
    <summary>
      The 'suspicious' score given to notification contents that came from the
      URL. Ranges from 0 to 100.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Tab.Screenshot">
  <owner>sayman@chromium.org</owner>
  <summary>
    User took one or more screenshots of a page.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred; only records true values.
    </summary>
  </metric>
</event>

<event name="Tab.StateChange">
  <owner>madhavpruthi@google.com</owner>
  <owner>ckitagawa@chromium.org</owner>
  <owner>clank-tab-dev@chromium.org</owner>
  <summary>
    A tab's state has changed. Only recorded for loaded tabs with WebContents.
  </summary>
  <metric name="IsPinned" enum="Boolean">
    <summary>
      Whether the tab is currently pinned. This is stored only for tabs which
      are pinned, i.e. this metric will always be true.
    </summary>
  </metric>
</event>

<event name="TabManager.Background.FirstAlertFired">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Collects the duration in MS from when the tab is backgrounded to when a
    JavaScript alert is fired. Only recorded when the tab is in the background.
  </summary>
  <metric name="IsMainFrame">
    <summary>
      Indicates whether the alert is fired from main frame.
    </summary>
  </metric>
  <metric name="TimeFromBackgrounded">
    <summary>
      Duration in MS from when the tab is backgrounded to when alert is fired.
    </summary>
  </metric>
</event>

<event name="TabManager.Background.FirstAudioStarts">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Collects the duration in MS from when the tab is backgrounded to when audio
    starts to play. Only recorded when the tab is in the background.
  </summary>
  <metric name="IsMainFrame">
    <summary>
      Indicates whether the audio stream belongs to the main frame.
    </summary>
  </metric>
  <metric name="TimeFromBackgrounded">
    <summary>
      Duration in MS from when the tab is backgrounded to when audio starts to
      play.
    </summary>
  </metric>
</event>

<event name="TabManager.Background.FirstFaviconUpdated">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Collects the duration in MS from when the tab is backgrounded to when the
    favicon is updated. Only recorded when the tab is in the background.
  </summary>
  <metric name="TimeFromBackgrounded">
    <summary>
      Duration in MS from when the tab is backgrounded to when the favicon is
      updated.
    </summary>
  </metric>
</event>

<event name="TabManager.Background.FirstNonPersistentNotificationCreated">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary/>
  <metric name="IsMainFrame">
    <summary>
      Indicates whether the notification creation is from the main frame.
    </summary>
  </metric>
  <metric name="TimeFromBackgrounded">
    <summary>
      Duration in MS from when the tab is backgrounded to when a non-persistent
      notification is created.
    </summary>
  </metric>
</event>

<event name="TabManager.Background.FirstTitleUpdated">
  <owner>chrisha@chromium.org</owner>
  <owner>lpy@chromium.org</owner>
  <summary>
    Collects the duration in MS from when the tab is backgrounded to when the
    title is updated. Only recorded when the tab is in the background.
  </summary>
  <metric name="TimeFromBackgrounded">
    <summary>
      Duration in MS from when the tab is backgrounded to when the title is
      updated.
    </summary>
  </metric>
</event>

<event name="TabManager.Background.ForegroundedOrClosed">
  <owner>chrisha@chromium.org</owner>
  <summary>
    Collects the duration in MS from when the tab is backgrounded to when it is
    brought to foreground or closed.
  </summary>
  <metric name="IsDiscarded">
    <summary>
      Boolean value indicating whether or not the tab is discarded since it was
      backgrounded.
    </summary>
  </metric>
  <metric name="IsForegrounded">
    <summary>
      Boolean value indicating whether or not it's triggered because the tab is
      brought to foreground again.
    </summary>
  </metric>
  <metric name="LabelId">
    <summary>
      An int64 random number generated when TabManager.TabMetric is logged. The
      same number is also logged here, so that feature label can be paired.
    </summary>
  </metric>
  <metric name="TimeFromBackgrounded">
    <summary>
      Duration in MS from when the tab is backgrounded to when it is brought to
      foreground or closed.
    </summary>
  </metric>
</event>

<event name="TabManager.Experimental.SessionRestore.TabSwitchLoadStopped"
    singular="True">
  <owner>zhenw@chromium.org</owner>
  <summary>
    Collects data when a tab is switched to from another tab and then finishes
    loading in the foreground during session restore The event is only recorded
    when a tab is switched to from another tab within the same tabstrip. As a
    result, the initial foreground tab is not included in this event since it
    was not switched to from another tab. The event is not recorded when the
    session overlaps with background tab opening.
  </summary>
  <metric name="SequenceId">
    <summary>
      The ID of this event's sequence in current session restore session.
    </summary>
  </metric>
  <metric name="SessionRestoreSessionId">
    <summary>
      The ID of this session restore session.
    </summary>
  </metric>
  <metric name="SessionRestoreTabCount">
    <summary>
      Number of tabs that are restored.
    </summary>
  </metric>
  <metric name="SystemTabCount">
    <summary>
      Number of all tabs of the system, which includes all browser windows.
    </summary>
  </metric>
  <metric name="TabSwitchLoadTime">
    <summary>
      Tab switch load time in MS. It is defined as the time between when the
      user switches to a background tab, and the time when that tab finishes
      loading in the foreground. If the user switches away before the tab
      finishes loading, a metric will not be recorded unless the user switches
      back, in which case the tab switch load time is measured from that point
      in time.
    </summary>
  </metric>
</event>

<event
    name="TabManager.SessionRestore.ForegroundTab.ExpectedTaskQueueingDurationInfo">
  <owner>zhenw@chromium.org</owner>
  <summary>
    Collects the expected queueing duration of tasks and metadata for the
    foreground tab during session restore. The event is not recorded when the
    session overlaps with background tab opening. The event is not recorded when
    there is only one restored tab, in which case, there is no background
    restored tab and we are not interested at that. In this way, we cap the
    volume while keeping all interesting data.
  </summary>
  <metric name="ExpectedTaskQueueingDuration">
    <summary>
      Duration in MS for expected task queueing duration. The metric reflects
      the responsiveness of a tab. A lower value means the tab will respond to
      inputs faster. This metric is equal to
      RendererScheduler.ExpectedTaskQueueingDuration. It is emitted once for all
      tasks in each 1000-ms window.
    </summary>
  </metric>
  <metric name="SequenceId">
    <summary>
      The ID of this event's sequence in current session restore session.
    </summary>
  </metric>
  <metric name="SessionRestoreSessionId">
    <summary>
      The ID of this session restore session.
    </summary>
  </metric>
  <metric name="SessionRestoreTabCount">
    <summary>
      Number of tabs that are restored.
    </summary>
  </metric>
  <metric name="SystemTabCount">
    <summary>
      Number of all tabs of the system, which includes all browser windows.
    </summary>
  </metric>
</event>

<event name="TabManager.TabLifetime" singular="True">
  <owner>chrisha@chromium.org</owner>
  <summary>
    Collected when a tab is closed, at most once per source.
  </summary>
  <metric name="TimeSinceNavigation">
    <summary>
      The time when the tab was closed, expressed as the amount of time in MS
      that has elapsed since the main frame navigation providing the content of
      the tab.
    </summary>
  </metric>
</event>

<event name="TabManager.WindowMetrics">
  <owner>michaelpg@chromium.org</owner>
  <summary>
    Collects information about a browser or app window to associate with the
    TabManager.TabMetrics entries for tabs in that window.
  </summary>
  <metric name="IsActive">
    <summary>
      Whether the window is the active (frontmost) window.
    </summary>
  </metric>
  <metric name="ShowState">
    <summary>
      Enumeration of the window show state, such as fullscreen or minimized.
      Values are enumerated in metrics::WindowMetricsEvent::ShowState.
    </summary>
  </metric>
  <metric name="TabCount">
    <summary>
      Number of tabs in the tab strip. Rounded down to the nearest exponential
      bucket (with a bucket spacing factor of 1.5). Will be 1 for windows with
      only one top-level WebContents, such as app windows.
    </summary>
  </metric>
  <metric name="Type">
    <summary>
      Enumeration for the type of the window. Values are enumerated in
      metrics::WindowMetricsEvent::Type.
    </summary>
  </metric>
  <metric name="WindowId">
    <summary>
      Session ID of the browser or app window this entry represents, unique for
      the browsing session.
    </summary>
  </metric>
</event>

<event name="TabRevisitTracker.TabStateChange">
  <owner>anthonyvd@chromium.org</owner>
  <owner>chrome-catan@google.com</owner>
  <summary>
    Recorded when a tab changes state to/from &quot;active&quot;,
    &quot;background&quot;, and &quot;closed&quot;.
  </summary>
  <metric name="NewState" enum="TabRevisitTracker.TabState">
    <summary>
      The state the tab is in after the transition.
    </summary>
  </metric>
  <metric name="NumTabsOnSameUrl">
    <summary>
      The count of tabs with the same main frame URL as this one in the current
      browser session. Used to identify instances of duplicate tabs. Bucketed in
      20 buckets (0 to 20) + an overflow bucket.
    </summary>
  </metric>
  <metric name="NumTotalRevisits">
    <summary>
      The count of times this tab was revisited since it was created. Bucketed
      in 20 buckets (0 to 20) + an overflow bucket.
    </summary>
  </metric>
  <metric name="PreviousState" enum="TabRevisitTracker.TabState">
    <summary>
      The state the tab was in before the transition.
    </summary>
  </metric>
  <metric name="SameTabGroupAsActiveTab" enum="Boolean">
    <summary>
      Whether the tab is in the same tab group as the current active tab.
    </summary>
  </metric>
  <metric name="SameWindowAsActiveTab" enum="Boolean">
    <summary>
      Whether the tab is in the same browser window as the current active tab.
    </summary>
  </metric>
  <metric name="TimeInPreviousState">
    <summary>
      The time spent by the tab in `PreviousState`, before transitioning to
      `NewState`, in seconds.
    </summary>
  </metric>
  <metric name="TotalTimeActive">
    <summary>
      The total time the tab has spent as the active tab since it was created,
      in seconds.
    </summary>
  </metric>
</event>

<event name="Tabs.SadTab">
  <owner>olivierrobin@chromium.org</owner>
  <owner>rohitrao@chromium.org</owner>
  <summary>
    Recorded when a Sad Tab is displayed or interacted with. This allows
    correlating specific URLs and page contexts with renderer crashes that lead
    to Sad Tabs and user feedback.
  </summary>
  <metric name="EventType" enum="SadTabEvent">
    <summary>
      The type of the SadTabEvent that occurred (e.g. Displayed, Button clicked,
      Learn more clicked).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="IsFeedbackMode" enum="Boolean">
    <summary>
      True if the Sad Tab is in feedback mode (typically due to a repeated
      failure). False if it is in reload mode.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="ThirdPartyCookies.CookieControlsActivated">
  <owner>sauski@google.com</owner>
  <owner>kmg@google.com</owner>
  <summary>
    Recorded each time User Bypass is activated to bypass 3PC blocking and
    re-enable 3PC for the page. Only applicable if the user is blocking 3PC by
    default.
  </summary>
  <metric name="FedCmInitiated" enum="Boolean">
    <summary>
      Whether the page attempted to call the FedCM API on the current page load,
      prior to the user re-enabling 3PC.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="PageRefreshCount">
    <summary>
      The number of times the user refreshed the current page (without
      navigating elsewhere) before re-enabling 3PC. An integer clamped to the
      range 0 to 10.
    </summary>
  </metric>
  <metric name="RepeatedActivation" enum="Boolean">
    <summary>
      Whether the user has previously re-enabled 3PC on this page via the
      in-context controls.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SiteEngagementLevel" enum="SiteEngagementLevel">
    <summary>
      The site engagement level of the page when the user re-enabled 3PC.
    </summary>
  </metric>
  <metric name="StorageAccessAPIRequested" enum="Boolean">
    <summary>
      Whether the page had requested access to storage via the Storage Access
      API on the current page load, prior to the user re-enabling 3PC
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ThirdPartySiteDataAccessType"
      enum="ThirdPartySiteDataAccessType">
    <summary>
      The state of site data access (e.g. blocked, allowed, etc) for the the
      current page load prior to the user re-enabling 3PC.
    </summary>
  </metric>
</event>

<event name="TopToolbar.Share">
  <owner>nyquist@chromium.org</owner>
  <owner>ssid@chromium.org</owner>
  <summary>
    User pressed the 'Share' in the top toolbar, which shares the current URL.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred; only records true values.
    </summary>
  </metric>
</event>

<event name="TouchToFill.Shown">
  <owner>kazinova@google.com</owner>
  <owner>friedrichh@chromium.org</owner>
  <owner>kolos@chromium.org</owner>
  <summary>
    Recorded when a user takes an action on the Touch To Fill sheet.
  </summary>
  <metric name="UserAction" enum="TouchToFill.UserAction">
    <summary>
      The action a user took when interacting with the Touch To Fill sheet.
    </summary>
  </metric>
</event>

<event name="TouchToFill.SubmissionReadiness">
  <owner>kolos@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Recorded when the Touch To Fill sheet is shown to the user.
  </summary>
  <metric name="SubmissionReadiness" enum="TouchToFill.SubmissionReadiness">
    <summary>
      A given form's state (e.g. there are empty fields in the form, or there
      are only two fields and they both are filled by Chrome) that indicates
      whether the form is ready for submission. Recorded when a Touch To Fill
      sheet is shown for that form.
    </summary>
  </metric>
</event>

<event name="TouchToFill.TimeToSuccessfulLogin">
  <owner>kolos@chromium.org</owner>
  <owner>friedrichh@chromium.org</owner>
  <summary>
    Recorded when a successful login is detected after filling by the Touch To
    Fill.
  </summary>
  <metric name="TimeToSuccessfulLogin">
    <summary>
      The time in milliseconds between filling by the Touch To Fill and a
      successful submission (To ensure filling and submitting correspond to each
      other, the usernames should coincide and the timestamps should be within
      one minute. A successful login after a failed submission or manual typing
      is not reported). Used to compare the times when automated submission is
      enabled and disabled. Thus, we measure the time saved for a user. Recorded
      when the password manager detects that the login was successful.
    </summary>
  </metric>
</event>

<event name="Translate">
  <owner>hamelphi@chromium.org</owner>
  <summary>
    Metrics related to a Translate event. These metrics are described in
    TranslateEventProto.
  </summary>
  <metric name="AcceptCount"/>
  <metric name="Country"/>
  <metric name="DeclineCount"/>
  <metric name="EventType"/>
  <metric name="IgnoreCount"/>
  <metric name="RankerResponse"/>
  <metric name="RankerVersion"/>
  <metric name="SourceLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"/>
  <metric name="TargetLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"/>
</event>

<event name="TranslatePageLoad">
  <owner>curranmax@chromium.org</owner>
  <owner>megjablon@chromium.org</owner>
  <owner>chrome-language@google.com</owner>
  <summary>
    Summary of the user's interaction with Translate from the beginning of the
    page load to when the event is recorded. This event is recorded when a page
    load is completed and every time that Chrome is backgrounded during the
    course of the page load. This means we can record multiple events for a
    single page load, but it guarantees that we will still record data in
    instances where the user backgrounds then kills Chrome.
  </summary>
  <metric name="FinalSourceLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The source language at the time the event is recorded. In most cases this
      will match the initial source language, but the user can change the source
      language manually if they want. Note that the semantic_type attribute is
      included in order to remain consistent with the previous Translate UKM
      proto.
    </summary>
  </metric>
  <metric name="FinalState" enum="TranslateState">
    <summary>
      At the time this event is recorded, the state of Translate. This includes
      whether the page is translated or not and if no UI is shown, just the
      omnibox icon is shown, or the full translate UI is shown.
    </summary>
  </metric>
  <metric name="FinalTargetLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The target language at the time the event is recorded. In most cases this
      will match the initial target language, but the user can change the target
      language manually if they want. Note that the semantic_type attribute is
      included in order to remain consistent with the previous Translate UKM
      proto.
    </summary>
  </metric>
  <metric name="FirstTranslateError" enum="TranslateError">
    <summary>
      The first error to occur within Translate for this page load.
    </summary>
  </metric>
  <metric name="FirstUIInteraction" enum="TranslateUIInteraction">
    <summary>
      The user's first interaction with the Translate UI.
    </summary>
  </metric>
  <metric name="HTMLContentLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The HTML language content attribute specified by the document. Note that
      the semantic_type attribute is included in order to remain consistent with
      the previous Translate UKM proto.
    </summary>
  </metric>
  <metric name="HTMLDocumentLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The HTML language attribute specified by the document. Note that the
      semantic_type attribute is included in order to remain consistent with the
      previous Translate UKM proto.
    </summary>
  </metric>
  <metric name="InitialSourceLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The initial source language that Translate determines for the page. Note
      that the semantic_type attribute is included in order to remain consistent
      with the previous Translate UKM proto.
    </summary>
  </metric>
  <metric name="InitialSourceLanguageInContentLanguages" enum="Boolean">
    <summary>
      Whether or not the initial source language is in the user's never
      translate language list. By default the UI language, languages the user
      has translated to, and languages added to the content languages are on the
      never tranlsate list. However, users can add or remove languages manually
      as well.
    </summary>
  </metric>
  <metric name="InitialState" enum="TranslateState">
    <summary>
      At the beginning of the page load, the state of Translate. This includes
      whether the page is translated or not and if no UI is shown, just the
      omnibox icon is shown, or the full translate UI is shown.
    </summary>
  </metric>
  <metric name="InitialTargetLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The initial target language that Translate thinks it should translate to.
      Note that the semantic_type attribute is included in order to remain
      consistent with the previous Translate UKM proto.
    </summary>
  </metric>
  <metric name="MaxTimeToTranslate">
    <summary>
      Across all translations during this page load, the maximum amount of time
      (in milliseconds) it took to translate the page.
    </summary>
  </metric>
  <metric name="ModelDetectedLanguage" semantic_type="ST_DEMOGRAPHIC_INFO"
      enum="LocaleCodeBCP47">
    <summary>
      The language that was estimated by the language model based on the page's
      content. Note that the semantic_type attribute is included in order to
      remain consistent with the previous Translate UKM proto.
    </summary>
  </metric>
  <metric name="ModelDetectionReliabilityScore">
    <summary>
      The score, or confidence, of the language detection model's prediction
      about the language of the page content. The score is between 0 and 100,
      higher means more confident.
    </summary>
  </metric>
  <metric name="NumReversions">
    <summary>
      The number of times a translation was reverted.
    </summary>
  </metric>
  <metric name="NumTargetLanguageChanges">
    <summary>
      The number of times that the target language was changed by the user over
      the course of this page load.
    </summary>
  </metric>
  <metric name="NumTranslateErrors">
    <summary>
      The number of errors to occur within Translate for this page load.
    </summary>
  </metric>
  <metric name="NumTranslations">
    <summary>
      The number of times the page was translated.
    </summary>
  </metric>
  <metric name="NumUIInteractions">
    <summary>
      The number of times that the user interacts with the Translate UI.
    </summary>
  </metric>
  <metric name="RankerDecision" enum="TranslateRankerDecision">
    <summary>
      Decision of the Ranker whether to show the UI or not.
    </summary>
  </metric>
  <metric name="RankerVersion">
    <summary>
      Version of Ranker used for this page load.
    </summary>
  </metric>
  <metric name="SequenceNumber">
    <summary>
      In case multiple events are logged for one page load, we track the
      sequence in the order each event is logged.
    </summary>
  </metric>
  <metric name="TotalTimeNotTranslated">
    <summary>
      The amount of time (in seconds) this page was in the foreground and not
      translated.
    </summary>
  </metric>
  <metric name="TotalTimeTranslated">
    <summary>
      The amount of time (in seconds) this page was in the foreground and
      translated.
    </summary>
  </metric>
  <metric name="TriggerDecision" enum="TranslateTriggerDecision">
    <summary>
      The highest priority trigger that determined the initial state of
      Translate for this page load.
    </summary>
  </metric>
  <metric name="WasContentEmpty" enum="Boolean">
    <summary>
      Whether the page content used to detect the page language was empty or
      not.
    </summary>
  </metric>
</event>

<event name="TrustedWebActivity.Open" singular="True">
  <owner>peconn@chromium.org</owner>
  <summary>
    Collected when a page is opened in a Trusted Web Activity.
  </summary>
  <metric name="HasOccurred" enum="Boolean">
    <summary>
      A boolean signaling that the event has occurred (typically only records
      true values).
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="TrustedWebActivity.Startup">
  <owner>ishitatsuyuki@google.com</owner>
  <owner>uekawa@chromium.org</owner>
  <owner>cros-virt-devices-guests@google.com</owner>
  <summary>
    Page load metrics for the first page load in a Trusted Web Activity (TWA).

    The startup is considered Cold if the browser process was not running and
    had to be started, and Warm if the process was already running in the
    background. Timings are relative to the Activity initialization timestamp
    passed from android-browser-helper.
  </summary>
  <metric name="AndroidBrowserHelper.Version">
    <summary>
      The version code of android-browser-helper used by the TWA wrapper
      associated with the origin.
    </summary>
  </metric>
  <metric name="TimeToFirstCommitNavigation2.Cold">
    <summary>
      The timestamp of the first navigation commit, relative to the Activity
      initialization timestamp passed from android-browser-helper. Split by
      startups where the browser process was not in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToFirstCommitNavigation2.Warm">
    <summary>
      The timestamp of the first navigation commit, relative to the Activity
      initialization timestamp passed from android-browser-helper. Split by
      startups where the browser process was already running in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToFirstContentfulPaint.Cold">
    <summary>
      The timestamp of the first contentful paint, relative to the Activity
      initialization timestamp passed from android-browser-helper. Split by
      startups where the browser process was not in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToFirstContentfulPaint.Warm">
    <summary>
      The timestamp of the first contentful paint, relative to the Activity
      initialization timestamp passed from android-browser-helper. Split by
      startups where the browser process was already running in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToLargestContentfulPaint2.Cold">
    <summary>
      The timestamp of the largest contentful paint, relative to the Activity
      initialization timestamp passed from android-browser-helper. Split by
      startups where the browser process was not in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToLargestContentfulPaint2.Warm">
    <summary>
      The timestamp of the largest contentful paint, relative to the Activity
      initialization timestamp passed from android-browser-helper. Split by
      startups where the browser process was already running in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToMarkFullyLoaded.Cold">
    <summary>
      Timestamp of performance.mark('mark_fully_loaded'), relative to the
      Activity initialization timestamp passed from android-browser-helper.
      Recorded only if the web page supports the respective performance marker.
      Split by startups where the browser process was not in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToMarkFullyLoaded.Warm">
    <summary>
      Timestamp of performance.mark('mark_fully_loaded'), relative to the
      Activity initialization timestamp passed from android-browser-helper.
      Recorded only if the web page supports the respective performance marker.
      Split by startups where the browser process was already running in the
      background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToMarkFullyVisible.Cold">
    <summary>
      Timestamp of performance.mark('mark_fully_visible'), relative to the
      Activity initialization timestamp passed from android-browser-helper.
      Recorded only if the web page supports the respective performance marker.
      Split by startups where the browser process was not in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToMarkFullyVisible.Warm">
    <summary>
      Timestamp of performance.mark('mark_fully_visible'), relative to the
      Activity initialization timestamp passed from android-browser-helper.
      Recorded only if the web page supports the respective performance marker.
      Split by startups where the browser process was already running in the
      background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToMarkInteractive.Cold">
    <summary>
      Timestamp of performance.mark('mark_interactive'), relative to the
      Activity initialization timestamp passed from android-browser-helper.
      Recorded only if the web page supports the respective performance marker.
      Split by startups where the browser process was not in the background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="TimeToMarkInteractive.Warm">
    <summary>
      Timestamp of performance.mark('mark_interactive'), relative to the
      Activity initialization timestamp passed from android-browser-helper.
      Recorded only if the web page supports the respective performance marker.
      Split by startups where the browser process was already running in the
      background.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Unload" singular="True">
  <owner>shaseley@chromium.org</owner>
  <owner>speed-metrics-dev@chromium.org</owner>
  <summary>
    Metrics associated with a unloading in preparation for a navigation.
  </summary>
  <metric name="BeforeUnloadDuration">
    <summary>
      Measures the time in milliseconds of running the beforeunload handlers for
      a page. If the beforeunloads are dispatched from the browser, this reports
      the longest running one since these handlers will be run in parallel when
      the page has frames in different processes. If the navigation is renderer
      initiated, it will be the duration of running beforeunload handlers in the
      navigating frame and its local descendants in the renderer plus any
      latency caused by dispatching beforeunloads to remote frames from the
      browser.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="BeforeUnloadQueueingDuration">
    <summary>
      Measures the time in milliseconds from when the browser sends the request
      to run beforeunload to the renderer to when the renderer begins
      dispatching the handlers. For browser-initiated navigations, we report the
      queueing duration of the beforeunloads that took the longest since they
      are dispatched in parallel to remote and local frames. For renderer-
      initiated navigations this metric will only be filled in if we dispatched
      beforeunloads from the browser to remote frames which we had to wait on.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="BeforeUnloadToCommit.CrossProcess">
    <summary>
      Measures the time in milliseconds from when the browser sends the request
      to dispatch before unload handlers (for browser-intitated navigations) or
      from when the renderer started running before unload handlers (for
      renderer-initiated navigations) to when the commit navigation was sent to
      the renderer process. For cross-process navigations this represents the
      total amount of time the navigation is blocked since it was initiated.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="BeforeUnloadToCommit.SameProcess">
    <summary>
      Measures the time in milliseconds from when the browser sends the request
      to dispatch before unload handlers (for browser-intitated navigations) or
      from when the renderer started running before unload handlers (for
      renderer-initiated navigations) to when the navigation was committed. For
      same-process navigations this represents the total amount of time the
      navigation is blocked since it was initiated.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UnloadDuration">
    <summary>
      Measures the time in milliseconds to run the unload handlers in the old
      document where the navigation was committed. Only records for same-process
      navigations since there are no unload handlers to be run in the new
      process during a cross-process navigation.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="UnloadQueueingDuration">
    <summary>
      Measures the time in milliseconds from when the browser sends the commit
      navigation request to the renderer to when the renderer dispatches unload
      events. Only records for same-process navigations since unload handlers
      are run in a different process for cross-process navigations.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="UserActivity">
  <owner>jiameng@chromium.org</owner>
  <summary>
    Collects user activity events after staying idle for a short period of time.
  </summary>
  <metric name="BatteryPercent">
    <summary>
      Percentage of battery, bucketed to 5 percents, i.e. [0, 5%) is mapped to
      0, [5%, 10%) is mapped to 5 etc.
    </summary>
  </metric>
  <metric name="DeviceManagement">
    <summary>
      An enum representing whether the device is managed, defined in
      |ash::power::ml::UserActivityEvent::Features::ManagementType|.
    </summary>
  </metric>
  <metric name="DeviceMode">
    <summary>
      An enum representing the mode of the device, defined in
      |ash::power::ml::UserActivityEvent::Features::DeviceMode|
    </summary>
  </metric>
  <metric name="DeviceType">
    <summary>
      An enum representing the type of the device, defined in
      |ash::power::ml::UserActivityEvent::Features::DeviceType|
    </summary>
  </metric>
  <metric name="EventLogDuration">
    <summary>
      Time taken in seconds from when we start logging the features to the
      moment when the event type is known and we finish logging the complete
      event.
    </summary>
  </metric>
  <metric name="EventReason">
    <summary>
      An enum representing the reason of the event, defined in
      |ash::power::ml::UserActivityEvent::Event::Reason|.
    </summary>
  </metric>
  <metric name="EventType">
    <summary>
      An enum representing the type of the event, defined in
      |ash::power::ml::UserActivityEvent::Event::Type|.
    </summary>
  </metric>
  <metric name="KeyEventsInLastHour">
    <summary>
      The number of key events reported as user activity in the last hour. This
      is bucketized so that it is recorded precisely when it is in [0, 99],
      rounded to nearest 100 when it is in [100, 999] and rounded to nearest
      1000 when it is in [1000, 9999]. It is capped at 10000.
    </summary>
  </metric>
  <metric name="LastActivityDay">
    <summary>
      An enum representing the last activity day of the week, defined in
      |ash::power::ml::UserActivityEvent::Features::DayOfWeek|.
    </summary>
  </metric>
  <metric name="LastActivityTime">
    <summary>
      Last activity time as hours since midnight in the local time zone.
    </summary>
  </metric>
  <metric name="LastUserActivityTime">
    <summary>
      Last user activity time as hours since midnight in the local time zone.
    </summary>
  </metric>
  <metric name="ModelApplied">
    <summary>
      A boolean value whether model prediction is applied in the screen-dim
      decision. False means powerd dims the screen regardless of the model
      prediction.
    </summary>
  </metric>
  <metric name="ModelDecisionThreshold">
    <summary>
      A threhold in the range of [0, 100]. Higher threshold makes screen-dim
      less likely.
    </summary>
  </metric>
  <metric name="ModelInactivityScore">
    <summary>
      Probability that user will remain inactive as predicted by the model. It
      is in the range of [0, 100]. If score is less than the decision threshold,
      dim will be deferred.
    </summary>
  </metric>
  <metric name="ModelResponse">
    <summary>
      Whether the model recommends the screen dim should be deferred (NO_DIM) or
      allowed (DIM), or encountered an error (MODEL_ERROR).
    </summary>
  </metric>
  <metric name="MouseEventsInLastHour">
    <summary>
      The number of mouse events reported as user activity in the last hour.
      This is bucketized so that it is recorded precisely when it is in [0, 99],
      rounded to nearest 100 when it is in [100, 999] and rounded to nearest
      1000 when it is in [1000, 9999]. It is capped at 10000.
    </summary>
  </metric>
  <metric name="OnBattery">
    <summary>
      Boolean value to represent whether the device is currently on battery
      power.
    </summary>
  </metric>
  <metric name="PreviousNegativeActionsCount">
    <summary>
      Number of times user reactivated, not including the current event.
    </summary>
  </metric>
  <metric name="PreviousPositiveActionsCount">
    <summary>
      Number of times user has remained idle, not including the current event.
    </summary>
  </metric>
  <metric name="RecentTimeActive">
    <summary>
      Duration of activity in seconds up to last activity.
    </summary>
  </metric>
  <metric name="RecentVideoPlayingTime">
    <summary>
      Recent video playing time in seconds.
    </summary>
  </metric>
  <metric name="ScreenDimDelay">
    <summary>
      Delay after which the screen will be dimmed in seconds.
    </summary>
  </metric>
  <metric name="ScreenDimmedInitially">
    <summary>
      Whether screen was dimmed at the start of the event.
    </summary>
  </metric>
  <metric name="ScreenDimOccurred">
    <summary>
      Whether screen dim occurred due to inactivity timeout.
    </summary>
  </metric>
  <metric name="ScreenDimToOffDelay">
    <summary>
      Delay after which the screen will be turned off in seconds, as measured
      from screen is dimmed. If dim is disabled, it is the delay from the start
      of inactivity.
    </summary>
  </metric>
  <metric name="ScreenLockedInitially">
    <summary>
      Whether screen was locked at the start of the event.
    </summary>
  </metric>
  <metric name="ScreenLockOccurred">
    <summary>
      Whether screen lock occurred.
    </summary>
  </metric>
  <metric name="ScreenOffInitially">
    <summary>
      Whether screen was off at the start of the event.
    </summary>
  </metric>
  <metric name="ScreenOffOccurred">
    <summary>
      Whether screen off occurred due to inactivity timeout.
    </summary>
  </metric>
  <metric name="SequenceId">
    <summary>
      The ID of this event in the current session.
    </summary>
  </metric>
  <metric name="TimeSinceLastKey">
    <summary>
      Time from last key event in seconds.
    </summary>
  </metric>
  <metric name="TimeSinceLastMouse">
    <summary>
      Time from last mouse event in seconds.
    </summary>
  </metric>
  <metric name="TimeSinceLastTouch">
    <summary>
      Time from last touch event in seconds.
    </summary>
  </metric>
  <metric name="TimeSinceLastVideoEnded">
    <summary>
      Time from the end of the last video playing in seconds.
    </summary>
  </metric>
  <metric name="TouchEventsInLastHour">
    <summary>
      The number of touch events reported as user activity in the last hour.
      This is bucketized so that it is recorded precisely when it is in [0, 99],
      rounded to nearest 100 when it is in [100, 999] and rounded to nearest
      1000 when it is in [1000, 9999]. It is capped at 10000.
    </summary>
  </metric>
</event>

<event name="UserActivityId">
  <owner>jiameng@chromium.org</owner>
  <summary>
    Records an activity that happened while a page was open.
  </summary>
  <metric name="ActivityId">
    <summary>
      The ID of the activity that happened while a page was open.
    </summary>
  </metric>
  <metric name="ContentType">
    <summary>
      Enumeration for the MIME type of the page. Values are enumerated in
      metrics::TabMetricsEvent::ContentType.
    </summary>
  </metric>
  <metric name="HasFormEntry">
    <summary>
      Boolean value indicating whether the page has any user-input text.
    </summary>
  </metric>
  <metric name="IsActive">
    <summary>
      Boolean value representing whether this tab is selected in its containing
      browser.
    </summary>
  </metric>
  <metric name="IsBrowserFocused">
    <summary>
      Boolean value representing whether the containing browser is in focus.
    </summary>
  </metric>
  <metric name="IsBrowserVisible">
    <summary>
      Boolean value representing whether the containing browser is visible.
    </summary>
  </metric>
  <metric name="IsTopmostBrowser">
    <summary>
      Boolean value representing whether the containing browser is the topmost
      one on the screen.
    </summary>
  </metric>
  <metric name="SiteEngagementScore">
    <summary>
      Site engagement score in the range [0, 100], rounded down to a multiple of
      10 to limit granularity.
    </summary>
  </metric>
</event>

<event name="UserPerceivedPageVisit" singular="True">
  <owner>djw@chromium.org</owner>
  <summary>
    Metrics related to a page visit as a user perceives it, regardless of how
    the page was visited. More metrics may be associated with a particular page
    visit, these can be found in specific UKM events with the same UKM source
    ID. Currently the methods of visiting a page that will populate this event
    are: 'normal' page load (more metrics in the PageLoad event), Back-Forward
    Cache Restore (more metrics in the HistoryNavigation event), and AMP
    documents (more metrics in the AmpPageLoad event)
  </summary>
  <metric name="NotCountedForCoreWebVitals" enum="Boolean">
    <summary>
      Determines if this page visit event should be counted towards calculations
      involving Core Web Vitals. If true, this page visit event should not be
      counted. If false or NULL, the page visit event should be considered.
      Currently this is determined by checking the mime-type of the page visit
      event.
    </summary>
  </metric>
  <metric name="PageVisitFinalStatus" enum="PageVisitFinalStatus">
    <summary>
      Determines the final status for this page visit. That is, records whether
      the page was never foregrounded, was foregrounded but did not reach FCP,
      or did reach FCP. The metric is recorded at the end of each page visit.
      App backgrounding on Android to is considered to be the end of page visit
      as well, as the app could be evicted by Android anytime after that
      happens.
    </summary>
  </metric>
  <metric name="UserInitiated" enum="Boolean">
    <summary>
      True if this page visit was initiated by user input. For renderer
      navigations, only true if the code can trace back to the original input
      event - there are cases where this known not to be possible.
    </summary>
  </metric>
</event>

<event name="V8.GC.FullCycle">
  <owner>etiennep@chromium.org</owner>
  <summary>
    Records information on memory and timing of a full GC cycle, reported at the
    end of the cycle.
  </summary>
  <metric name="Duration.MainThread">
    <summary>
      Main thread only duration of the whole garbage collection of the unified
      heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Duration.MainThread.Atomic">
    <summary>
      Main thread duration of the atomic pause of the garbage collection of the
      unified heap. This is rounded down to the nearest exponential bucket (with
      a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Duration.MainThread.Atomic.Cpp">
    <summary>
      Main thread duration of the atomic pause of the garbage collection of the
      managed C++ heap. This is rounded down to the nearest exponential bucket
      (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Duration.MainThread.Cpp">
    <summary>
      Main thread only duration of a whole garbage collection of the managed C++
      heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Duration.SinceLastMarkCompact">
    <summary>
      Time between the start of the full garbage collection and the end of
      previous full cycle. This is rounded down to the nearest exponential
      bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Duration.Total">
    <summary>
      Overall duration of a whole garbage collection of the unified heap. This
      is rounded down to the nearest exponential bucket (with a bucket ratio of
      1.3).
    </summary>
  </metric>
  <metric name="Duration.Total.Cpp">
    <summary>
      Overall duration of a whole garbage collection of the managed C++ heap.
      This is rounded down to the nearest exponential bucket (with a bucket
      ratio of 1.3).
    </summary>
  </metric>
  <metric name="Global.ConsumedBytes.Baseline">
    <summary>
      Amount of global consumed memory right after the previous full garbage
      collection cycle, used as baseline for limit computation. This is rounded
      down to the nearest exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Global.ConsumedBytes.Current">
    <summary>
      Amount of global consumed memory right before the current full garbage
      collection cycle. This is rounded down to the nearest exponential bucket
      (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Global.ConsumedBytes.DeltaCurrent">
    <summary>
      Delta between the current and baseline amount of global consumed memory
      for the current full garbage collection cycle. This is rounded down to the
      nearest exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Global.ConsumedBytes.DeltaLimit">
    <summary>
      Delta between the limit and baseline amount of global consumed memory for
      the current full garbage collection cycle. This is rounded down to the
      nearest exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Global.ConsumedBytes.Limit">
    <summary>
      Allocation limit on golbal consumed memory used before the current full
      garbage collection cycle. This is rounded down to the nearest exponential
      bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="GrowingMode" enum="HeapGrowingMode">
    <summary>
      Heap Growing Mode at the start of the current cycle, that affects heap
      limits computation.
    </summary>
  </metric>
  <metric name="IsInputHandling" enum="Boolean">
    <summary>
      Indicates whether the cycle started while input handling state was true.
    </summary>
  </metric>
  <metric name="IsLoading" enum="Boolean">
    <summary>
      Indicates whether the cylce started while loading state was true.
    </summary>
  </metric>
  <metric name="Memory.BytesFreed">
    <summary>
      Amount of allocated memory freed by the garbage collection of the managed
      C++ heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Memory.BytesFreed.Cpp">
    <summary>
      Amount of allocated memory freed by the garbage collection of the managed
      C++ heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Objects.BytesAfter">
    <summary>
      Amount of used memory after the garbage collection of the unified heap.
      This is rounded down to the nearest exponential bucket (with a bucket
      ratio of 1.3).
    </summary>
  </metric>
  <metric name="Objects.BytesAfter.Cpp">
    <summary>
      Amount of used memory after the garbage collection of the managed C++
      heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Objects.BytesBefore">
    <summary>
      Amount of used memory before the full garbage collection of the unified
      heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Objects.BytesBefore.Cpp">
    <summary>
      Amount of used memory before the full garbage collection of the managed
      C++ heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Objects.BytesFreed">
    <summary>
      Amount of used memory freed by the garbage collection of the unified heap.
      This is rounded down to the nearest exponential bucket (with a bucket
      ratio of 1.3).
    </summary>
  </metric>
  <metric name="Objects.BytesFreed.Cpp">
    <summary>
      Amount of used memory freed by the garbage collection of the managed C++
      heap. This is rounded down to the nearest exponential bucket (with a
      bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="OldGeneration.ConsumedBytes.Baseline">
    <summary>
      Amount of old generation consumed memory right after the previous full
      garbage collection cycle, used as baseline for limit computation. This is
      rounded down to the nearest exponential bucket (with a bucket ratio of
      1.3).
    </summary>
  </metric>
  <metric name="OldGeneration.ConsumedBytes.Current">
    <summary>
      Amount of old generation consumed memory right before the current full
      garbage collection cycle. This is rounded down to the nearest exponential
      bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="OldGeneration.ConsumedBytes.DeltaCurrent">
    <summary>
      Delta between the current and baseline amount of old generation consumed
      memory for the current full garbage collection cycle. This is rounded down
      to the nearest exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="OldGeneration.ConsumedBytes.DeltaLimit">
    <summary>
      Delta between the limit and baseline amount of old generation consumed
      memory for the current full garbage collection cycle. This is rounded down
      to the nearest exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="OldGeneration.ConsumedBytes.Limit">
    <summary>
      Allocation limit on old generation consumed memory used before the current
      full garbage collection cycle. This is rounded down to the nearest
      exponential bucket (with a bucket ratio of 1.3).
    </summary>
  </metric>
  <metric name="Priority" enum="GarbageCollectionPriority">
    <summary>
      The priority the current full garbage collection cycle was running at.
    </summary>
  </metric>
  <metric name="Reason" enum="GarbageCollectionReason">
    <summary>
      Reason the current full garbage collection cycle was started.
    </summary>
  </metric>
  <metric name="Reason.IncrementalMarking" enum="GarbageCollectionReason">
    <summary>
      Reason incremental marking was started before the current full garbage
      collection cycle if any.
    </summary>
  </metric>
  <metric name="ReduceMemory" enum="Boolean">
    <summary>
      Indictaes whether ReduceMemoryFootprint flag was set.
    </summary>
  </metric>
</event>

<event name="V8.Wasm.ModuleCompiled">
  <owner>ecmziegler@chromium.org</owner>
  <summary>
    Records information on baseline compilation of WebAssembly modules and its
    resource consumption.
  </summary>
  <metric name="Async" enum="Boolean">
    <summary>
      The compilation was running asynchronously.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Cached" enum="Boolean">
    <summary>
      The compilation was re-using already cached native module code instead of
      JIT compiling it.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CodeSize">
    <summary>
      The size of the native module code in bytes after baseline compilation
      finished.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Deserialized" enum="Boolean">
    <summary>
      The compilation was deserializing the native module code from the disk
      cache instead of JIT compiling it.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Lazy" enum="Boolean">
    <summary>
      The lazy compilation flag was enabled and therefore not all functions
      might have been compiled.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LiftoffBailoutCount">
    <summary>
      The number of functions that Liftoff could not compile and that therefore
      needed to be compiled by TurboFan.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Streamed" enum="Boolean">
    <summary>
      The wire bytes were streamed while compiling.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Success" enum="Boolean">
    <summary>
      The module was successfully compiled.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WallClockDuration">
    <summary>
      The total time the compilation took in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="V8.Wasm.ModuleDecoded">
  <owner>ecmziegler@chromium.org</owner>
  <summary>
    Records information on WebAssembly modules included in websites.
  </summary>
  <metric name="FunctionCount">
    <summary>
      Number of declared functions in this module.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ModuleSize">
    <summary>
      The size of the wire bytes of the module.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Streamed" enum="Boolean">
    <summary>
      The wire bytes were streamed while decoding.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Success" enum="Boolean">
    <summary>
      The module was successfully decoded.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WallClockDuration">
    <summary>
      The total time the decoding took in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="V8.Wasm.ModuleInstantiated">
  <owner>ecmziegler@chromium.org</owner>
  <summary>
    Records information on instantiation of WebAssembly modules and its resource
    consumption.
  </summary>
  <metric name="ImportedFunctionCount">
    <summary>
      The number of functions imported by the module.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Success" enum="Boolean">
    <summary>
      The module was successfully instantiated.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WallClockDuration">
    <summary>
      The total time the instantiation took in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="V8.Wasm.ModuleTieredUp">
  <owner>ecmziegler@chromium.org</owner>
  <summary>
    Records information on top-tier compilation of WebAssembly modules and its
    resource consumption.
  </summary>
  <metric name="CodeSize">
    <summary>
      The size of the native module code in bytes after top-tier compilation
      finished.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Lazy" enum="Boolean">
    <summary>
      The lazy compilation flag was enabled and therefore not all functions
      might have been compiled.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="WallClockDuration">
    <summary>
      The total time the compilation took in microseconds.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="V8CompileHints.Version5"
    skip_proto_reason="Too many metrics causing scalability issue b/275678348">
  <owner>marja@chromium.org</owner>
  <owner>v8-loading@google.com</owner>
  <summary>
    Data about which JavaScript functions are compiled. The collected data is
    obfuscated to not reveal script URLs. The data is split into separate
    int64s.
  </summary>
  <metric name="Data0"/>
  <metric name="Data1"/>
  <metric name="Data10"/>
  <metric name="Data100"/>
  <metric name="Data1000"/>
  <metric name="Data1001"/>
  <metric name="Data1002"/>
  <metric name="Data1003"/>
  <metric name="Data1004"/>
  <metric name="Data1005"/>
  <metric name="Data1006"/>
  <metric name="Data1007"/>
  <metric name="Data1008"/>
  <metric name="Data1009"/>
  <metric name="Data101"/>
  <metric name="Data1010"/>
  <metric name="Data1011"/>
  <metric name="Data1012"/>
  <metric name="Data1013"/>
  <metric name="Data1014"/>
  <metric name="Data1015"/>
  <metric name="Data1016"/>
  <metric name="Data1017"/>
  <metric name="Data1018"/>
  <metric name="Data1019"/>
  <metric name="Data102"/>
  <metric name="Data1020"/>
  <metric name="Data1021"/>
  <metric name="Data1022"/>
  <metric name="Data1023"/>
  <metric name="Data103"/>
  <metric name="Data104"/>
  <metric name="Data105"/>
  <metric name="Data106"/>
  <metric name="Data107"/>
  <metric name="Data108"/>
  <metric name="Data109"/>
  <metric name="Data11"/>
  <metric name="Data110"/>
  <metric name="Data111"/>
  <metric name="Data112"/>
  <metric name="Data113"/>
  <metric name="Data114"/>
  <metric name="Data115"/>
  <metric name="Data116"/>
  <metric name="Data117"/>
  <metric name="Data118"/>
  <metric name="Data119"/>
  <metric name="Data12"/>
  <metric name="Data120"/>
  <metric name="Data121"/>
  <metric name="Data122"/>
  <metric name="Data123"/>
  <metric name="Data124"/>
  <metric name="Data125"/>
  <metric name="Data126"/>
  <metric name="Data127"/>
  <metric name="Data128"/>
  <metric name="Data129"/>
  <metric name="Data13"/>
  <metric name="Data130"/>
  <metric name="Data131"/>
  <metric name="Data132"/>
  <metric name="Data133"/>
  <metric name="Data134"/>
  <metric name="Data135"/>
  <metric name="Data136"/>
  <metric name="Data137"/>
  <metric name="Data138"/>
  <metric name="Data139"/>
  <metric name="Data14"/>
  <metric name="Data140"/>
  <metric name="Data141"/>
  <metric name="Data142"/>
  <metric name="Data143"/>
  <metric name="Data144"/>
  <metric name="Data145"/>
  <metric name="Data146"/>
  <metric name="Data147"/>
  <metric name="Data148"/>
  <metric name="Data149"/>
  <metric name="Data15"/>
  <metric name="Data150"/>
  <metric name="Data151"/>
  <metric name="Data152"/>
  <metric name="Data153"/>
  <metric name="Data154"/>
  <metric name="Data155"/>
  <metric name="Data156"/>
  <metric name="Data157"/>
  <metric name="Data158"/>
  <metric name="Data159"/>
  <metric name="Data16"/>
  <metric name="Data160"/>
  <metric name="Data161"/>
  <metric name="Data162"/>
  <metric name="Data163"/>
  <metric name="Data164"/>
  <metric name="Data165"/>
  <metric name="Data166"/>
  <metric name="Data167"/>
  <metric name="Data168"/>
  <metric name="Data169"/>
  <metric name="Data17"/>
  <metric name="Data170"/>
  <metric name="Data171"/>
  <metric name="Data172"/>
  <metric name="Data173"/>
  <metric name="Data174"/>
  <metric name="Data175"/>
  <metric name="Data176"/>
  <metric name="Data177"/>
  <metric name="Data178"/>
  <metric name="Data179"/>
  <metric name="Data18"/>
  <metric name="Data180"/>
  <metric name="Data181"/>
  <metric name="Data182"/>
  <metric name="Data183"/>
  <metric name="Data184"/>
  <metric name="Data185"/>
  <metric name="Data186"/>
  <metric name="Data187"/>
  <metric name="Data188"/>
  <metric name="Data189"/>
  <metric name="Data19"/>
  <metric name="Data190"/>
  <metric name="Data191"/>
  <metric name="Data192"/>
  <metric name="Data193"/>
  <metric name="Data194"/>
  <metric name="Data195"/>
  <metric name="Data196"/>
  <metric name="Data197"/>
  <metric name="Data198"/>
  <metric name="Data199"/>
  <metric name="Data2"/>
  <metric name="Data20"/>
  <metric name="Data200"/>
  <metric name="Data201"/>
  <metric name="Data202"/>
  <metric name="Data203"/>
  <metric name="Data204"/>
  <metric name="Data205"/>
  <metric name="Data206"/>
  <metric name="Data207"/>
  <metric name="Data208"/>
  <metric name="Data209"/>
  <metric name="Data21"/>
  <metric name="Data210"/>
  <metric name="Data211"/>
  <metric name="Data212"/>
  <metric name="Data213"/>
  <metric name="Data214"/>
  <metric name="Data215"/>
  <metric name="Data216"/>
  <metric name="Data217"/>
  <metric name="Data218"/>
  <metric name="Data219"/>
  <metric name="Data22"/>
  <metric name="Data220"/>
  <metric name="Data221"/>
  <metric name="Data222"/>
  <metric name="Data223"/>
  <metric name="Data224"/>
  <metric name="Data225"/>
  <metric name="Data226"/>
  <metric name="Data227"/>
  <metric name="Data228"/>
  <metric name="Data229"/>
  <metric name="Data23"/>
  <metric name="Data230"/>
  <metric name="Data231"/>
  <metric name="Data232"/>
  <metric name="Data233"/>
  <metric name="Data234"/>
  <metric name="Data235"/>
  <metric name="Data236"/>
  <metric name="Data237"/>
  <metric name="Data238"/>
  <metric name="Data239"/>
  <metric name="Data24"/>
  <metric name="Data240"/>
  <metric name="Data241"/>
  <metric name="Data242"/>
  <metric name="Data243"/>
  <metric name="Data244"/>
  <metric name="Data245"/>
  <metric name="Data246"/>
  <metric name="Data247"/>
  <metric name="Data248"/>
  <metric name="Data249"/>
  <metric name="Data25"/>
  <metric name="Data250"/>
  <metric name="Data251"/>
  <metric name="Data252"/>
  <metric name="Data253"/>
  <metric name="Data254"/>
  <metric name="Data255"/>
  <metric name="Data256"/>
  <metric name="Data257"/>
  <metric name="Data258"/>
  <metric name="Data259"/>
  <metric name="Data26"/>
  <metric name="Data260"/>
  <metric name="Data261"/>
  <metric name="Data262"/>
  <metric name="Data263"/>
  <metric name="Data264"/>
  <metric name="Data265"/>
  <metric name="Data266"/>
  <metric name="Data267"/>
  <metric name="Data268"/>
  <metric name="Data269"/>
  <metric name="Data27"/>
  <metric name="Data270"/>
  <metric name="Data271"/>
  <metric name="Data272"/>
  <metric name="Data273"/>
  <metric name="Data274"/>
  <metric name="Data275"/>
  <metric name="Data276"/>
  <metric name="Data277"/>
  <metric name="Data278"/>
  <metric name="Data279"/>
  <metric name="Data28"/>
  <metric name="Data280"/>
  <metric name="Data281"/>
  <metric name="Data282"/>
  <metric name="Data283"/>
  <metric name="Data284"/>
  <metric name="Data285"/>
  <metric name="Data286"/>
  <metric name="Data287"/>
  <metric name="Data288"/>
  <metric name="Data289"/>
  <metric name="Data29"/>
  <metric name="Data290"/>
  <metric name="Data291"/>
  <metric name="Data292"/>
  <metric name="Data293"/>
  <metric name="Data294"/>
  <metric name="Data295"/>
  <metric name="Data296"/>
  <metric name="Data297"/>
  <metric name="Data298"/>
  <metric name="Data299"/>
  <metric name="Data3"/>
  <metric name="Data30"/>
  <metric name="Data300"/>
  <metric name="Data301"/>
  <metric name="Data302"/>
  <metric name="Data303"/>
  <metric name="Data304"/>
  <metric name="Data305"/>
  <metric name="Data306"/>
  <metric name="Data307"/>
  <metric name="Data308"/>
  <metric name="Data309"/>
  <metric name="Data31"/>
  <metric name="Data310"/>
  <metric name="Data311"/>
  <metric name="Data312"/>
  <metric name="Data313"/>
  <metric name="Data314"/>
  <metric name="Data315"/>
  <metric name="Data316"/>
  <metric name="Data317"/>
  <metric name="Data318"/>
  <metric name="Data319"/>
  <metric name="Data32"/>
  <metric name="Data320"/>
  <metric name="Data321"/>
  <metric name="Data322"/>
  <metric name="Data323"/>
  <metric name="Data324"/>
  <metric name="Data325"/>
  <metric name="Data326"/>
  <metric name="Data327"/>
  <metric name="Data328"/>
  <metric name="Data329"/>
  <metric name="Data33"/>
  <metric name="Data330"/>
  <metric name="Data331"/>
  <metric name="Data332"/>
  <metric name="Data333"/>
  <metric name="Data334"/>
  <metric name="Data335"/>
  <metric name="Data336"/>
  <metric name="Data337"/>
  <metric name="Data338"/>
  <metric name="Data339"/>
  <metric name="Data34"/>
  <metric name="Data340"/>
  <metric name="Data341"/>
  <metric name="Data342"/>
  <metric name="Data343"/>
  <metric name="Data344"/>
  <metric name="Data345"/>
  <metric name="Data346"/>
  <metric name="Data347"/>
  <metric name="Data348"/>
  <metric name="Data349"/>
  <metric name="Data35"/>
  <metric name="Data350"/>
  <metric name="Data351"/>
  <metric name="Data352"/>
  <metric name="Data353"/>
  <metric name="Data354"/>
  <metric name="Data355"/>
  <metric name="Data356"/>
  <metric name="Data357"/>
  <metric name="Data358"/>
  <metric name="Data359"/>
  <metric name="Data36"/>
  <metric name="Data360"/>
  <metric name="Data361"/>
  <metric name="Data362"/>
  <metric name="Data363"/>
  <metric name="Data364"/>
  <metric name="Data365"/>
  <metric name="Data366"/>
  <metric name="Data367"/>
  <metric name="Data368"/>
  <metric name="Data369"/>
  <metric name="Data37"/>
  <metric name="Data370"/>
  <metric name="Data371"/>
  <metric name="Data372"/>
  <metric name="Data373"/>
  <metric name="Data374"/>
  <metric name="Data375"/>
  <metric name="Data376"/>
  <metric name="Data377"/>
  <metric name="Data378"/>
  <metric name="Data379"/>
  <metric name="Data38"/>
  <metric name="Data380"/>
  <metric name="Data381"/>
  <metric name="Data382"/>
  <metric name="Data383"/>
  <metric name="Data384"/>
  <metric name="Data385"/>
  <metric name="Data386"/>
  <metric name="Data387"/>
  <metric name="Data388"/>
  <metric name="Data389"/>
  <metric name="Data39"/>
  <metric name="Data390"/>
  <metric name="Data391"/>
  <metric name="Data392"/>
  <metric name="Data393"/>
  <metric name="Data394"/>
  <metric name="Data395"/>
  <metric name="Data396"/>
  <metric name="Data397"/>
  <metric name="Data398"/>
  <metric name="Data399"/>
  <metric name="Data4"/>
  <metric name="Data40"/>
  <metric name="Data400"/>
  <metric name="Data401"/>
  <metric name="Data402"/>
  <metric name="Data403"/>
  <metric name="Data404"/>
  <metric name="Data405"/>
  <metric name="Data406"/>
  <metric name="Data407"/>
  <metric name="Data408"/>
  <metric name="Data409"/>
  <metric name="Data41"/>
  <metric name="Data410"/>
  <metric name="Data411"/>
  <metric name="Data412"/>
  <metric name="Data413"/>
  <metric name="Data414"/>
  <metric name="Data415"/>
  <metric name="Data416"/>
  <metric name="Data417"/>
  <metric name="Data418"/>
  <metric name="Data419"/>
  <metric name="Data42"/>
  <metric name="Data420"/>
  <metric name="Data421"/>
  <metric name="Data422"/>
  <metric name="Data423"/>
  <metric name="Data424"/>
  <metric name="Data425"/>
  <metric name="Data426"/>
  <metric name="Data427"/>
  <metric name="Data428"/>
  <metric name="Data429"/>
  <metric name="Data43"/>
  <metric name="Data430"/>
  <metric name="Data431"/>
  <metric name="Data432"/>
  <metric name="Data433"/>
  <metric name="Data434"/>
  <metric name="Data435"/>
  <metric name="Data436"/>
  <metric name="Data437"/>
  <metric name="Data438"/>
  <metric name="Data439"/>
  <metric name="Data44"/>
  <metric name="Data440"/>
  <metric name="Data441"/>
  <metric name="Data442"/>
  <metric name="Data443"/>
  <metric name="Data444"/>
  <metric name="Data445"/>
  <metric name="Data446"/>
  <metric name="Data447"/>
  <metric name="Data448"/>
  <metric name="Data449"/>
  <metric name="Data45"/>
  <metric name="Data450"/>
  <metric name="Data451"/>
  <metric name="Data452"/>
  <metric name="Data453"/>
  <metric name="Data454"/>
  <metric name="Data455"/>
  <metric name="Data456"/>
  <metric name="Data457"/>
  <metric name="Data458"/>
  <metric name="Data459"/>
  <metric name="Data46"/>
  <metric name="Data460"/>
  <metric name="Data461"/>
  <metric name="Data462"/>
  <metric name="Data463"/>
  <metric name="Data464"/>
  <metric name="Data465"/>
  <metric name="Data466"/>
  <metric name="Data467"/>
  <metric name="Data468"/>
  <metric name="Data469"/>
  <metric name="Data47"/>
  <metric name="Data470"/>
  <metric name="Data471"/>
  <metric name="Data472"/>
  <metric name="Data473"/>
  <metric name="Data474"/>
  <metric name="Data475"/>
  <metric name="Data476"/>
  <metric name="Data477"/>
  <metric name="Data478"/>
  <metric name="Data479"/>
  <metric name="Data48"/>
  <metric name="Data480"/>
  <metric name="Data481"/>
  <metric name="Data482"/>
  <metric name="Data483"/>
  <metric name="Data484"/>
  <metric name="Data485"/>
  <metric name="Data486"/>
  <metric name="Data487"/>
  <metric name="Data488"/>
  <metric name="Data489"/>
  <metric name="Data49"/>
  <metric name="Data490"/>
  <metric name="Data491"/>
  <metric name="Data492"/>
  <metric name="Data493"/>
  <metric name="Data494"/>
  <metric name="Data495"/>
  <metric name="Data496"/>
  <metric name="Data497"/>
  <metric name="Data498"/>
  <metric name="Data499"/>
  <metric name="Data5"/>
  <metric name="Data50"/>
  <metric name="Data500"/>
  <metric name="Data501"/>
  <metric name="Data502"/>
  <metric name="Data503"/>
  <metric name="Data504"/>
  <metric name="Data505"/>
  <metric name="Data506"/>
  <metric name="Data507"/>
  <metric name="Data508"/>
  <metric name="Data509"/>
  <metric name="Data51"/>
  <metric name="Data510"/>
  <metric name="Data511"/>
  <metric name="Data512"/>
  <metric name="Data513"/>
  <metric name="Data514"/>
  <metric name="Data515"/>
  <metric name="Data516"/>
  <metric name="Data517"/>
  <metric name="Data518"/>
  <metric name="Data519"/>
  <metric name="Data52"/>
  <metric name="Data520"/>
  <metric name="Data521"/>
  <metric name="Data522"/>
  <metric name="Data523"/>
  <metric name="Data524"/>
  <metric name="Data525"/>
  <metric name="Data526"/>
  <metric name="Data527"/>
  <metric name="Data528"/>
  <metric name="Data529"/>
  <metric name="Data53"/>
  <metric name="Data530"/>
  <metric name="Data531"/>
  <metric name="Data532"/>
  <metric name="Data533"/>
  <metric name="Data534"/>
  <metric name="Data535"/>
  <metric name="Data536"/>
  <metric name="Data537"/>
  <metric name="Data538"/>
  <metric name="Data539"/>
  <metric name="Data54"/>
  <metric name="Data540"/>
  <metric name="Data541"/>
  <metric name="Data542"/>
  <metric name="Data543"/>
  <metric name="Data544"/>
  <metric name="Data545"/>
  <metric name="Data546"/>
  <metric name="Data547"/>
  <metric name="Data548"/>
  <metric name="Data549"/>
  <metric name="Data55"/>
  <metric name="Data550"/>
  <metric name="Data551"/>
  <metric name="Data552"/>
  <metric name="Data553"/>
  <metric name="Data554"/>
  <metric name="Data555"/>
  <metric name="Data556"/>
  <metric name="Data557"/>
  <metric name="Data558"/>
  <metric name="Data559"/>
  <metric name="Data56"/>
  <metric name="Data560"/>
  <metric name="Data561"/>
  <metric name="Data562"/>
  <metric name="Data563"/>
  <metric name="Data564"/>
  <metric name="Data565"/>
  <metric name="Data566"/>
  <metric name="Data567"/>
  <metric name="Data568"/>
  <metric name="Data569"/>
  <metric name="Data57"/>
  <metric name="Data570"/>
  <metric name="Data571"/>
  <metric name="Data572"/>
  <metric name="Data573"/>
  <metric name="Data574"/>
  <metric name="Data575"/>
  <metric name="Data576"/>
  <metric name="Data577"/>
  <metric name="Data578"/>
  <metric name="Data579"/>
  <metric name="Data58"/>
  <metric name="Data580"/>
  <metric name="Data581"/>
  <metric name="Data582"/>
  <metric name="Data583"/>
  <metric name="Data584"/>
  <metric name="Data585"/>
  <metric name="Data586"/>
  <metric name="Data587"/>
  <metric name="Data588"/>
  <metric name="Data589"/>
  <metric name="Data59"/>
  <metric name="Data590"/>
  <metric name="Data591"/>
  <metric name="Data592"/>
  <metric name="Data593"/>
  <metric name="Data594"/>
  <metric name="Data595"/>
  <metric name="Data596"/>
  <metric name="Data597"/>
  <metric name="Data598"/>
  <metric name="Data599"/>
  <metric name="Data6"/>
  <metric name="Data60"/>
  <metric name="Data600"/>
  <metric name="Data601"/>
  <metric name="Data602"/>
  <metric name="Data603"/>
  <metric name="Data604"/>
  <metric name="Data605"/>
  <metric name="Data606"/>
  <metric name="Data607"/>
  <metric name="Data608"/>
  <metric name="Data609"/>
  <metric name="Data61"/>
  <metric name="Data610"/>
  <metric name="Data611"/>
  <metric name="Data612"/>
  <metric name="Data613"/>
  <metric name="Data614"/>
  <metric name="Data615"/>
  <metric name="Data616"/>
  <metric name="Data617"/>
  <metric name="Data618"/>
  <metric name="Data619"/>
  <metric name="Data62"/>
  <metric name="Data620"/>
  <metric name="Data621"/>
  <metric name="Data622"/>
  <metric name="Data623"/>
  <metric name="Data624"/>
  <metric name="Data625"/>
  <metric name="Data626"/>
  <metric name="Data627"/>
  <metric name="Data628"/>
  <metric name="Data629"/>
  <metric name="Data63"/>
  <metric name="Data630"/>
  <metric name="Data631"/>
  <metric name="Data632"/>
  <metric name="Data633"/>
  <metric name="Data634"/>
  <metric name="Data635"/>
  <metric name="Data636"/>
  <metric name="Data637"/>
  <metric name="Data638"/>
  <metric name="Data639"/>
  <metric name="Data64"/>
  <metric name="Data640"/>
  <metric name="Data641"/>
  <metric name="Data642"/>
  <metric name="Data643"/>
  <metric name="Data644"/>
  <metric name="Data645"/>
  <metric name="Data646"/>
  <metric name="Data647"/>
  <metric name="Data648"/>
  <metric name="Data649"/>
  <metric name="Data65"/>
  <metric name="Data650"/>
  <metric name="Data651"/>
  <metric name="Data652"/>
  <metric name="Data653"/>
  <metric name="Data654"/>
  <metric name="Data655"/>
  <metric name="Data656"/>
  <metric name="Data657"/>
  <metric name="Data658"/>
  <metric name="Data659"/>
  <metric name="Data66"/>
  <metric name="Data660"/>
  <metric name="Data661"/>
  <metric name="Data662"/>
  <metric name="Data663"/>
  <metric name="Data664"/>
  <metric name="Data665"/>
  <metric name="Data666"/>
  <metric name="Data667"/>
  <metric name="Data668"/>
  <metric name="Data669"/>
  <metric name="Data67"/>
  <metric name="Data670"/>
  <metric name="Data671"/>
  <metric name="Data672"/>
  <metric name="Data673"/>
  <metric name="Data674"/>
  <metric name="Data675"/>
  <metric name="Data676"/>
  <metric name="Data677"/>
  <metric name="Data678"/>
  <metric name="Data679"/>
  <metric name="Data68"/>
  <metric name="Data680"/>
  <metric name="Data681"/>
  <metric name="Data682"/>
  <metric name="Data683"/>
  <metric name="Data684"/>
  <metric name="Data685"/>
  <metric name="Data686"/>
  <metric name="Data687"/>
  <metric name="Data688"/>
  <metric name="Data689"/>
  <metric name="Data69"/>
  <metric name="Data690"/>
  <metric name="Data691"/>
  <metric name="Data692"/>
  <metric name="Data693"/>
  <metric name="Data694"/>
  <metric name="Data695"/>
  <metric name="Data696"/>
  <metric name="Data697"/>
  <metric name="Data698"/>
  <metric name="Data699"/>
  <metric name="Data7"/>
  <metric name="Data70"/>
  <metric name="Data700"/>
  <metric name="Data701"/>
  <metric name="Data702"/>
  <metric name="Data703"/>
  <metric name="Data704"/>
  <metric name="Data705"/>
  <metric name="Data706"/>
  <metric name="Data707"/>
  <metric name="Data708"/>
  <metric name="Data709"/>
  <metric name="Data71"/>
  <metric name="Data710"/>
  <metric name="Data711"/>
  <metric name="Data712"/>
  <metric name="Data713"/>
  <metric name="Data714"/>
  <metric name="Data715"/>
  <metric name="Data716"/>
  <metric name="Data717"/>
  <metric name="Data718"/>
  <metric name="Data719"/>
  <metric name="Data72"/>
  <metric name="Data720"/>
  <metric name="Data721"/>
  <metric name="Data722"/>
  <metric name="Data723"/>
  <metric name="Data724"/>
  <metric name="Data725"/>
  <metric name="Data726"/>
  <metric name="Data727"/>
  <metric name="Data728"/>
  <metric name="Data729"/>
  <metric name="Data73"/>
  <metric name="Data730"/>
  <metric name="Data731"/>
  <metric name="Data732"/>
  <metric name="Data733"/>
  <metric name="Data734"/>
  <metric name="Data735"/>
  <metric name="Data736"/>
  <metric name="Data737"/>
  <metric name="Data738"/>
  <metric name="Data739"/>
  <metric name="Data74"/>
  <metric name="Data740"/>
  <metric name="Data741"/>
  <metric name="Data742"/>
  <metric name="Data743"/>
  <metric name="Data744"/>
  <metric name="Data745"/>
  <metric name="Data746"/>
  <metric name="Data747"/>
  <metric name="Data748"/>
  <metric name="Data749"/>
  <metric name="Data75"/>
  <metric name="Data750"/>
  <metric name="Data751"/>
  <metric name="Data752"/>
  <metric name="Data753"/>
  <metric name="Data754"/>
  <metric name="Data755"/>
  <metric name="Data756"/>
  <metric name="Data757"/>
  <metric name="Data758"/>
  <metric name="Data759"/>
  <metric name="Data76"/>
  <metric name="Data760"/>
  <metric name="Data761"/>
  <metric name="Data762"/>
  <metric name="Data763"/>
  <metric name="Data764"/>
  <metric name="Data765"/>
  <metric name="Data766"/>
  <metric name="Data767"/>
  <metric name="Data768"/>
  <metric name="Data769"/>
  <metric name="Data77"/>
  <metric name="Data770"/>
  <metric name="Data771"/>
  <metric name="Data772"/>
  <metric name="Data773"/>
  <metric name="Data774"/>
  <metric name="Data775"/>
  <metric name="Data776"/>
  <metric name="Data777"/>
  <metric name="Data778"/>
  <metric name="Data779"/>
  <metric name="Data78"/>
  <metric name="Data780"/>
  <metric name="Data781"/>
  <metric name="Data782"/>
  <metric name="Data783"/>
  <metric name="Data784"/>
  <metric name="Data785"/>
  <metric name="Data786"/>
  <metric name="Data787"/>
  <metric name="Data788"/>
  <metric name="Data789"/>
  <metric name="Data79"/>
  <metric name="Data790"/>
  <metric name="Data791"/>
  <metric name="Data792"/>
  <metric name="Data793"/>
  <metric name="Data794"/>
  <metric name="Data795"/>
  <metric name="Data796"/>
  <metric name="Data797"/>
  <metric name="Data798"/>
  <metric name="Data799"/>
  <metric name="Data8"/>
  <metric name="Data80"/>
  <metric name="Data800"/>
  <metric name="Data801"/>
  <metric name="Data802"/>
  <metric name="Data803"/>
  <metric name="Data804"/>
  <metric name="Data805"/>
  <metric name="Data806"/>
  <metric name="Data807"/>
  <metric name="Data808"/>
  <metric name="Data809"/>
  <metric name="Data81"/>
  <metric name="Data810"/>
  <metric name="Data811"/>
  <metric name="Data812"/>
  <metric name="Data813"/>
  <metric name="Data814"/>
  <metric name="Data815"/>
  <metric name="Data816"/>
  <metric name="Data817"/>
  <metric name="Data818"/>
  <metric name="Data819"/>
  <metric name="Data82"/>
  <metric name="Data820"/>
  <metric name="Data821"/>
  <metric name="Data822"/>
  <metric name="Data823"/>
  <metric name="Data824"/>
  <metric name="Data825"/>
  <metric name="Data826"/>
  <metric name="Data827"/>
  <metric name="Data828"/>
  <metric name="Data829"/>
  <metric name="Data83"/>
  <metric name="Data830"/>
  <metric name="Data831"/>
  <metric name="Data832"/>
  <metric name="Data833"/>
  <metric name="Data834"/>
  <metric name="Data835"/>
  <metric name="Data836"/>
  <metric name="Data837"/>
  <metric name="Data838"/>
  <metric name="Data839"/>
  <metric name="Data84"/>
  <metric name="Data840"/>
  <metric name="Data841"/>
  <metric name="Data842"/>
  <metric name="Data843"/>
  <metric name="Data844"/>
  <metric name="Data845"/>
  <metric name="Data846"/>
  <metric name="Data847"/>
  <metric name="Data848"/>
  <metric name="Data849"/>
  <metric name="Data85"/>
  <metric name="Data850"/>
  <metric name="Data851"/>
  <metric name="Data852"/>
  <metric name="Data853"/>
  <metric name="Data854"/>
  <metric name="Data855"/>
  <metric name="Data856"/>
  <metric name="Data857"/>
  <metric name="Data858"/>
  <metric name="Data859"/>
  <metric name="Data86"/>
  <metric name="Data860"/>
  <metric name="Data861"/>
  <metric name="Data862"/>
  <metric name="Data863"/>
  <metric name="Data864"/>
  <metric name="Data865"/>
  <metric name="Data866"/>
  <metric name="Data867"/>
  <metric name="Data868"/>
  <metric name="Data869"/>
  <metric name="Data87"/>
  <metric name="Data870"/>
  <metric name="Data871"/>
  <metric name="Data872"/>
  <metric name="Data873"/>
  <metric name="Data874"/>
  <metric name="Data875"/>
  <metric name="Data876"/>
  <metric name="Data877"/>
  <metric name="Data878"/>
  <metric name="Data879"/>
  <metric name="Data88"/>
  <metric name="Data880"/>
  <metric name="Data881"/>
  <metric name="Data882"/>
  <metric name="Data883"/>
  <metric name="Data884"/>
  <metric name="Data885"/>
  <metric name="Data886"/>
  <metric name="Data887"/>
  <metric name="Data888"/>
  <metric name="Data889"/>
  <metric name="Data89"/>
  <metric name="Data890"/>
  <metric name="Data891"/>
  <metric name="Data892"/>
  <metric name="Data893"/>
  <metric name="Data894"/>
  <metric name="Data895"/>
  <metric name="Data896"/>
  <metric name="Data897"/>
  <metric name="Data898"/>
  <metric name="Data899"/>
  <metric name="Data9"/>
  <metric name="Data90"/>
  <metric name="Data900"/>
  <metric name="Data901"/>
  <metric name="Data902"/>
  <metric name="Data903"/>
  <metric name="Data904"/>
  <metric name="Data905"/>
  <metric name="Data906"/>
  <metric name="Data907"/>
  <metric name="Data908"/>
  <metric name="Data909"/>
  <metric name="Data91"/>
  <metric name="Data910"/>
  <metric name="Data911"/>
  <metric name="Data912"/>
  <metric name="Data913"/>
  <metric name="Data914"/>
  <metric name="Data915"/>
  <metric name="Data916"/>
  <metric name="Data917"/>
  <metric name="Data918"/>
  <metric name="Data919"/>
  <metric name="Data92"/>
  <metric name="Data920"/>
  <metric name="Data921"/>
  <metric name="Data922"/>
  <metric name="Data923"/>
  <metric name="Data924"/>
  <metric name="Data925"/>
  <metric name="Data926"/>
  <metric name="Data927"/>
  <metric name="Data928"/>
  <metric name="Data929"/>
  <metric name="Data93"/>
  <metric name="Data930"/>
  <metric name="Data931"/>
  <metric name="Data932"/>
  <metric name="Data933"/>
  <metric name="Data934"/>
  <metric name="Data935"/>
  <metric name="Data936"/>
  <metric name="Data937"/>
  <metric name="Data938"/>
  <metric name="Data939"/>
  <metric name="Data94"/>
  <metric name="Data940"/>
  <metric name="Data941"/>
  <metric name="Data942"/>
  <metric name="Data943"/>
  <metric name="Data944"/>
  <metric name="Data945"/>
  <metric name="Data946"/>
  <metric name="Data947"/>
  <metric name="Data948"/>
  <metric name="Data949"/>
  <metric name="Data95"/>
  <metric name="Data950"/>
  <metric name="Data951"/>
  <metric name="Data952"/>
  <metric name="Data953"/>
  <metric name="Data954"/>
  <metric name="Data955"/>
  <metric name="Data956"/>
  <metric name="Data957"/>
  <metric name="Data958"/>
  <metric name="Data959"/>
  <metric name="Data96"/>
  <metric name="Data960"/>
  <metric name="Data961"/>
  <metric name="Data962"/>
  <metric name="Data963"/>
  <metric name="Data964"/>
  <metric name="Data965"/>
  <metric name="Data966"/>
  <metric name="Data967"/>
  <metric name="Data968"/>
  <metric name="Data969"/>
  <metric name="Data97"/>
  <metric name="Data970"/>
  <metric name="Data971"/>
  <metric name="Data972"/>
  <metric name="Data973"/>
  <metric name="Data974"/>
  <metric name="Data975"/>
  <metric name="Data976"/>
  <metric name="Data977"/>
  <metric name="Data978"/>
  <metric name="Data979"/>
  <metric name="Data98"/>
  <metric name="Data980"/>
  <metric name="Data981"/>
  <metric name="Data982"/>
  <metric name="Data983"/>
  <metric name="Data984"/>
  <metric name="Data985"/>
  <metric name="Data986"/>
  <metric name="Data987"/>
  <metric name="Data988"/>
  <metric name="Data989"/>
  <metric name="Data99"/>
  <metric name="Data990"/>
  <metric name="Data991"/>
  <metric name="Data992"/>
  <metric name="Data993"/>
  <metric name="Data994"/>
  <metric name="Data995"/>
  <metric name="Data996"/>
  <metric name="Data997"/>
  <metric name="Data998"/>
  <metric name="Data999"/>
</event>

<event name="VideoConferencingEvent" singular="True">
  <owner>sanjeetnd@google.com</owner>
  <owner>charleszhao@google.com</owner>
  <summary>
    Records videoconferencing usage on web apps. Only records for apps which
    have captured camera, microphone, or screen at least once while open.
  </summary>
  <metric name="CameraCaptureDuration">
    <summary>
      The total time duration (bucketed) the VC app spent capturing camera.
      Duration in units of ms.
    </summary>
  </metric>
  <metric name="DidCaptureCamera" enum="Boolean">
    <summary>
      App captured camera.
    </summary>
  </metric>
  <metric name="DidCaptureMicrophone" enum="Boolean">
    <summary>
      App captured microphone.
    </summary>
  </metric>
  <metric name="DidCaptureScreen" enum="Boolean">
    <summary>
      App captured screen.
    </summary>
  </metric>
  <metric name="MicrophoneCaptureDuration">
    <summary>
      The total time duration (bucketed) the VC app spent capturing microphone.
      Duration in units of ms.
    </summary>
  </metric>
  <metric name="ScreenCaptureDuration">
    <summary>
      The total time duration (bucketed) the VC app spent capturing the screen.
      Duration in units of ms.
    </summary>
  </metric>
  <metric name="TotalDuration">
    <summary>
      Duration (bucketed) for which the VC app was open. Duration in units of
      ms.
    </summary>
  </metric>
</event>

<event name="VirtualKeyboard.Open">
  <owner>shend@chromium.org</owner>
  <summary>
    Collects the used input types with the Virtual Keyboard.
  </summary>
  <metric name="TextInputType">
    <summary>
      Type of a input field which the user is trying to use the Virtual Keyboard
      on.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.form_factor"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Wallet.BoardingPassDetect" singular="True">
  <owner>hanfeng@google.com</owner>
  <summary>
    Records boarding pass barcode detection results.
  </summary>
  <metric name="Detected" enum="Boolean">
    <summary>
      Whether a boarding pass barocode is detected.
    </summary>
  </metric>
</event>

<event name="WebAPK.Install" singular="True">
  <owner>yfriedman@chromium.org</owner>
  <owner>hartmanng@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    WebAPK usage metrics recorded on Install.
  </summary>
  <metric name="DisplayMode" enum="WebAppDisplayMode">
    <summary>
      Records the display mode of the added WebAPK.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Distributor" enum="WebApkDistributor">
    <summary>
      Distribution source of the WebAPK (browser, device policy, etc).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Install" enum="Boolean">
    <summary>
      Recorded when this WebAPK is installed.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InstallSource" enum="WebappInstallSource">
    <summary>
      From where the user initiates the install: app menu, install API, etc.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebAPK.SessionEnd" singular="True">
  <owner>yfriedman@chromium.org</owner>
  <owner>hartmanng@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    WebAPK usage metrics recorded when the WebAPK is backgrounded.
  </summary>
  <metric name="AppVersion">
    <summary>
      WebAPK app version that the user has installed.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Distributor" enum="WebApkDistributor">
    <summary>
      Distribution source of the WebAPK (browser, device policy, etc).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SessionDuration">
    <summary>
      How long the user spent inside the WebAPK, in milliseconds. This will use
      exponential bucketing (ie, count in 10s of milliseconds at first, then
      100s, then seconds, 10s of seconds, minutes, 10 minutes, hours, 10 hours,
      days, weeks, years.)
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebAPK.Uninstall" singular="True">
  <owner>yfriedman@chromium.org</owner>
  <owner>hartmanng@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    WebAPK usage metrics recorded on Uninstall.
  </summary>
  <metric name="AppVersion">
    <summary>
      WebAPK app version that the user has installed.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Distributor" enum="WebApkDistributor">
    <summary>
      Distribution source of the WebAPK (browser, device policy, etc).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InstalledDuration">
    <summary>
      How long between Install and Uninstall of a particular WebAPK, in seconds.
      This will use exponential bucketing (ie, count in seconds at first, then
      10s of seconds, minutes, 10 minutes, hours, 10 hours, days, weeks, years.)
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LifetimeLaunches" enum="WebApkLifetimeLaunchCount">
    <summary>
      Records how many times the WebAPK was launched between install and
      uninstall (in coarse buckets).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Uninstall" enum="Boolean">
    <summary>
      Recorded when this WebAPK is uninstalled.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebAPK.Visit" singular="True">
  <owner>yfriedman@chromium.org</owner>
  <owner>hartmanng@chromium.org</owner>
  <owner>pkotwicz@chromium.org</owner>
  <summary>
    WebAPK usage metrics recorded during a user's interaction with the site.
  </summary>
  <metric name="AppVersion">
    <summary>
      WebAPK app version that the user has installed.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Distributor" enum="WebApkDistributor">
    <summary>
      Distribution source of the WebAPK (browser, device policy, etc).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Launch" enum="Boolean">
    <summary>
      Recorded every time this WebAPK is launched.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="LaunchSource" enum="LaunchFromHomeScreenSource">
    <summary>
      Launch source of the WebAPK.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="Webapp.AddToHomeScreen">
  <owner>eirage@chromium.org&gt;</owner>
  <owner>hartmanng@chromium.org</owner>
  <owner>mwi-team-core@google.com</owner>
  <summary>
    A2HS usage metrics recorded when users started the add to home screen flow
    on Android.
  </summary>
  <metric name="DisplayMode" enum="WebAppDisplayMode">
    <summary>
      Records the display mode of the added Webapp.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="SameAsManifestStartUrl" enum="Boolean">
    <summary>
      Record whether `start_url` for the Shortcuts is the same as the current
      page url.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ShortcutReason" enum="InstallableStatusCode">
    <summary>
      Record an StatusCode for why this site is not WebAPK compatible.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebApp.DailyInteraction">
  <owner>dmurph@chromium.org</owner>
  <owner>pwa-team@google.com</owner>
  <summary>
    Features of a web app recorded at most once per day if a user interacted
    with the web app. Recorded for installed and/or promotable (installable) web
    apps unless noted otherwise on the metric. Keyed by start_url of the app.
    Note: Changed in Feb 2023 to only record when App sync is enabled.
  </summary>
  <metric name="BackgroundDuration">
    <summary>
      Records the total duration (seconds, bucketed) that the app was open in
      the background in the last calendar day. Summed during the day and emitted
      if the date changes. Recorded only for installed web apps that are
      currently open in a web app window, and all preinstalled web apps. In m128
      a bug is fixed where on resuming from sleep background time did not resume
      counting.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="CapturesLinks" enum="Boolean">
    <summary>
      Whether the user has enabled link capturing to open in-scope links in the
      app window. Recorded only for installed web apps that are currently open
      in a web app window, and all preinstalled web apps.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DisplayMode" enum="WebAppDisplayMode">
    <summary>
      Effective display mode of the web app (may be set by a manifest and
      manifest may be overridden by the user).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ForegroundDuration">
    <summary>
      Records the total duration (seconds, bucketed) that the app was open in
      the foreground in the last calendar day. Summed during the day and emitted
      if the date changes. Recorded only for installed web apps that are
      currently open in a web app window, and all preinstalled web apps. As of
      m128, this time is cut short if Chrome determines that it is not active
      anymore (see the DesktopSessionDurationTracker). This is to keep the
      cumulative sum of this value comparable with Session.TotalDuration.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Installed" enum="Boolean">
    <summary>
      Whether the web app is installed.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="InstallSource" enum="WebappInstallSource">
    <summary>
      Install source of the web app (omnibox, menu item, policy, etc).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="NumSessions">
    <summary>
      Records the total number of times the app was focused in the foreground in
      the last calendar day. Recorded only for installed web apps that are
      currently open in a web app window, and all preinstalled web apps.
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Promotable" enum="Boolean">
    <summary>
      Whether the web app is currently considered 'promotable' (passes Chrome
      checks to be considered an installable web app).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Used" enum="Boolean">
    <summary>
      Records that the web app was used. Always true (or the event would not
      have been emitted for this WebApp).
    </summary>
    <aggregation>
      <history>
        <index fields="profile.country"/>
        <index fields="profile.form_factor"/>
        <index fields="profile.system_ram"/>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebApp.WebInstall">
  <owner>dmurph@chromium.org</owner>
  <owner>pwa-team@google.com</owner>
  <summary>
    Recorded when a site attempts to install another site that isn't the current
    document. There are two possible entry points to the install - The Web
    Install API (navigator.install) and the install element. For any given
    install, either the first *or* second metric pairs will be recorded.
  </summary>
  <metric name="ElementResultByInstalledApp" enum="WebInstallServiceResult">
    <summary>
      Records the result of one activation of the install element for the URL of
      the target site that we attempted to install. As of M153, keyed on the
      origin of the caller-supplied manifest URL (earlier milestones used the
      install URL). Only recorded when the manifest URL is HTTPS.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ElementResultByRequestingPage" enum="WebInstallServiceResult">
    <summary>
      Records the result of one activation of the install element for the URL of
      the requesting page that the element was activated from.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ResultByInstalledApp" enum="WebInstallServiceResult">
    <summary>
      Records the result of the Web Install API for the URL of the target site
      that we attempted to install as a web app via the API. As of M153, keyed
      on the origin of the caller-supplied manifest URL (earlier milestones used
      the install URL). Only recorded when the manifest URL is HTTPS.
    </summary>
  </metric>
  <metric name="ResultByRequestingPage" enum="WebInstallServiceResult">
    <summary>
      Records the result of the Web Install API for the URL of the requesting
      page that invoked the API.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebAuthn.ConditionalUiGetCall">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Information about a WebAuthn Get Assertion API call with conditional
    mediation enabled.
  </summary>
  <metric name="TimeSinceDomContentLoaded">
    <summary>
      The amount of time (ms) that has elapsed between a page's DOMContentLoaded
      event and the API call being handled. This is only recorded for the first
      conditional request on the page.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="WebAuthn.RegisterCompletion">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Information about the completion of a request to register a new Web
    Authentication credential. This was added for desktop platforms in M128 and
    for Android in M131.
  </summary>
  <metric name="RegisterCompletionResult"
      enum="WebAuthenticationMakeCredentialOutcome">
    <summary>
      The outcome of the request, indicating whether it was successful, and the
      cause of failure if not successful.
    </summary>
  </metric>
  <metric name="RequestMode" enum="WebAuthenticationRequestMode">
    <summary>
      The mode of WebAuthn register request that has been completed.
    </summary>
  </metric>
</event>

<event name="WebAuthn.SignCompletion">
  <owner>kenrb@chromium.org</owner>
  <owner>chrome-webauthn@google.com</owner>
  <summary>
    Information about the completion of a request for a signed assertion by a
    Web Authentication credential. This was added for desktop platforms in M128
    and for Android in M131.
  </summary>
  <metric name="RequestMode" enum="WebAuthenticationRequestMode">
    <summary>
      The mode of WebAuthn assertion request that has been completed.
    </summary>
  </metric>
  <metric name="SignCompletionResult"
      enum="WebAuthenticationGetAssertionOutcome">
    <summary>
      The outcome of the request, indicating whether it was successful, and the
      cause of failure if not successful.
    </summary>
  </metric>
</event>

<event name="WebOTPImpact">
  <owner>yigu@chromium.org</owner>
  <owner>goto@chromium.org</owner>
  <owner>web-identity-eng@google.com</owner>
  <summary>
    Records in the browser process when a document is destroyed.
  </summary>
  <metric name="PhoneCollection" enum="PhoneCollectionState">
    <summary>
      Records whether a document collected phone number, and/or used WebOTP,
      and/or used OneTimeCode (OTC) during its lifecycle.
    </summary>
  </metric>
</event>

<event name="WebRTC.AddressHarvesting">
  <owner>solenberg@chromium.org</owner>
  <owner>webrtc-dev@chromium.org</owner>
  <summary>
    Collects usage patterns that may indicate attempts to gather users' IP
    addresses. A heuristic in the webrtc library tries to detect usages that may
    indicate attempts to gather users' IP addresses rather than setting up
    communication via WebRTC, and reports possible attempts.
  </summary>
  <metric name="UsagePattern">
    <summary>
      The usage pattern detected (an int encoding bit values). The bits are
      defined in third_party/webrtc/pc/peerconnection.h, in the
      &quot;PeerConnection::UsageEvent&quot; enum.
    </summary>
  </metric>
</event>

<event name="WebRTC.ComplexSdp">
  <owner>hbos@chromium.org</owner>
  <owner>guidou@chromium.org</owner>
  <summary>
    Logged when an application uses complex SDP in a WebRTC PeerConnection or
    experiences an error attempting to parse SDP. Such cases will result in
    errors if the application assumes the wrong default SDP format. This is an
    important concern during the transition of the default SDP format from Plan
    B to Unified Plan.
  </summary>
  <metric name="Category">
    <summary>
      A value that represents how complex/unparsable SDP is used. The categories
      are defined in blink::ComplexSdpCategory.
    </summary>
  </metric>
</event>

<event name="WebSpeech.Usage">
  <owner>evliu@chromium.org</owner>
  <owner>chrome-media-ux@google.com</owner>
  <summary>
    Recorded when a page navigation invokes either SpeechRecognition or
    SpeechSynthesis. Used to measure website adoption distribution and speech
    recognition backend selection.
  </summary>
  <metric name="RequestedSpeechQuality" enum="WebSpeechRecognitionQuality">
    <summary>
      The explicit speech recognition quality level requested by the site
      (Command=0, Dictation=1, Conversation=2).
    </summary>
  </metric>
  <metric name="SpeechRecognitionBackend" enum="WebSpeechRecognitionBackend">
    <summary>
      The speech recognition backend selected/used for the session (Cloud=0,
      SODA=1, SmallExpertModel=2, GeminiNano=3).
    </summary>
  </metric>
  <metric name="SpeechRecognitionUsed" enum="BooleanHit">
    <summary>
      Logged as 1 if SpeechRecognition was initiated during the navigation.
    </summary>
  </metric>
  <metric name="SpeechSynthesisUsed" enum="BooleanHit">
    <summary>
      Logged as 1 if SpeechSynthesis speak() was invoked during the navigation.
    </summary>
  </metric>
</event>

<event name="WindowProxyUsage">
  <owner>arichiv@google.com</owner>
  <owner>katabolism-finch@google.com</owner>
  <summary>
    This metric is recorded when WindowProxy usage occurs (e.g., a frame
    accesses its opener, parent(s), child(ren), or a window it opened).
  </summary>
  <metric name="AccessType" enum="WindowProxyAccessType">
    <summary>
      Records the method being used on the window proxy.
    </summary>
  </metric>
  <metric name="IsSamePage" enum="Boolean">
    <summary>
      Boolean value that indicates if the frame accessing the window proxy and
      the frame referenced by the window proxy are in the same page.
    </summary>
  </metric>
  <metric name="LocalFrameContext" enum="WindowProxyFrameContext">
    <summary>
      Records the context of the frame tree accessing the window proxy.
    </summary>
  </metric>
  <metric name="LocalPageContext" enum="WindowProxyPageContext">
    <summary>
      Records the context of the page accessing the window proxy.
    </summary>
  </metric>
  <metric name="LocalUserActivationState" enum="WindowProxyUserActivationState">
    <summary>
      Records the user activation state of the frame accessing the window proxy.
    </summary>
  </metric>
  <metric name="RemoteFrameContext" enum="WindowProxyFrameContext">
    <summary>
      Records the context of the frame tree referenced by the window proxy.
    </summary>
  </metric>
  <metric name="RemotePageContext" enum="WindowProxyPageContext">
    <summary>
      Records the context of the page referenced by the window proxy.
    </summary>
  </metric>
  <metric name="RemoteUserActivationState"
      enum="WindowProxyUserActivationState">
    <summary>
      Records the user activation state of the frame referenced by the window
      proxy.
    </summary>
  </metric>
  <metric name="StorageKeyComparison" enum="WindowProxyStorageKeyComparison">
    <summary>
      Records the similarities and differences between the storage key of the
      frame accessing the window proxy and the frame referenced by the window
      proxy.
    </summary>
  </metric>
</event>

<event name="XR.WebXR" singular="True">
  <owner>billorr@chromium.org</owner>
  <owner>xr-dev@chromium.org</owner>
  <summary>
    Records information about WebXR methods that were used in a single
    navigation. The event will be recorded as the WebXR functions are called -
    since the event is singular, the data that will eventualy be sent will
    contain a union of metrics that were set in an event.
  </summary>
  <metric name="DidGetXRInputSources" enum="Boolean">
    <summary>
      Boolean value that indicates that the WebXR input API was used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DidRequestAvailableDevices" enum="Boolean">
    <summary>
      Boolean value that indicates that the API to enumerate devices was called.
      This API is only exposed through WebVR.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DidRequestPose" enum="Boolean">
    <summary>
      Boolean value that indicates that poses were requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DidRequestPresentation" enum="Boolean">
    <summary>
      Boolean value that indicates that presentation was requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="DidUseNavigatorXR" enum="Boolean">
    <summary>
      Boolean value that indicates that the WebXR Device API was used.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ReturnedDevice" enum="Boolean">
    <summary>
      Boolean value that indicates that a device was returned by the API to
      enumerate devices. This API is only exposed through WebVR.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="ReturnedPresentationCapableDevice" enum="Boolean">
    <summary>
      Boolean value that indicates that a device was returned by the API to
      enumerate devices, and that the device supports presentation.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="XR.WebXR.Session">
  <owner>alcooper@chromium.org</owner>
  <owner>xr-dev@chromium.org</owner>
  <summary>
    When session ends, records data for a WebXR / WebVR session.
  </summary>
  <metric name="Duration">
    <summary>
      The approximate amount of time (in seconds) that elapsed from session
      creation to session end. Times are reported accurately when low, for
      example, under a minute, and get rounded to minutes and then hours as they
      get larger. This is done by SessionTracker::GetRoundedDurationInSeconds.
      For inline sessions, this might get pretty large.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <quantiles type="std-percentiles"/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="FeatureRequest.BoundedFloor" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'bounded-floor' feature request.
    </summary>
  </metric>
  <metric name="FeatureRequest.Local" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'local' feature request.
    </summary>
  </metric>
  <metric name="FeatureRequest.LocalFloor" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'local-floor' feature request.
    </summary>
  </metric>
  <metric name="FeatureRequest.Unbounded" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'unbounded' feature request.
    </summary>
  </metric>
  <metric name="FeatureRequest.Viewer" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'viewer' feature request.
    </summary>
  </metric>
  <metric name="FeatureUse.BoundedFloor" enum="Boolean">
    <summary>
      Whether the 'bounded-floor' feature was used during this session,
      regardless of whether it was used successfully.
    </summary>
  </metric>
  <metric name="FeatureUse.Local" enum="Boolean">
    <summary>
      Whether the 'local' feature was used during this session, regardless of
      whether it was used successfully.
    </summary>
  </metric>
  <metric name="FeatureUse.LocalFloor" enum="Boolean">
    <summary>
      Whether the 'local-floor' feature was used during this session, regardless
      of whether it was used successfully.
    </summary>
  </metric>
  <metric name="FeatureUse.Unbounded" enum="Boolean">
    <summary>
      Whether the 'unbounded' feature was used during this session, regardless
      of whether it was used successfully.
    </summary>
  </metric>
  <metric name="FeatureUse.Viewer" enum="Boolean">
    <summary>
      Whether the 'viewer' feature was used during this session, regardless of
      whether it was used successfully.
    </summary>
  </metric>
  <metric name="Mode" enum="XRSessionMode">
    <summary>
      An enum value specifying WebXR session's mode. See `device::SessionMode`
      for enum type declaration. 0: Unknown, catch all. 1: Inline session. 2:
      Immersive VR session. 3: Immersive AR session.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

<event name="XR.WebXR.SessionRequest">
  <owner>xr-dev@chromium.org</owner>
  <owner>cassew@google.com</owner>
  <summary>
    Recorded when promise returned by `requestSession` gets resolved / rejected.
  </summary>
  <metric name="Feature.BoundedFloor" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'bounded-floor' feature request.
    </summary>
  </metric>
  <metric name="Feature.Local" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'local' feature request.
    </summary>
  </metric>
  <metric name="Feature.LocalFloor" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'local-floor' feature request.
    </summary>
  </metric>
  <metric name="Feature.Unbounded" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'unbounded' feature request.
    </summary>
  </metric>
  <metric name="Feature.Viewer" enum="XRFeatureRequestStatus">
    <summary>
      State of the 'viewer' feature request.
    </summary>
  </metric>
  <metric name="Mode" enum="XRSessionMode">
    <summary>
      An enum value that indicates that the `requestSession` API was called to
      request session with this mode. See `device::SessionMode` for enum type
      declaration. 0: Unknown, catch all. 1: Inline session was requested. 2:
      Immersive VR session was requested. 3: Immersive AR session was requested.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
  <metric name="Status" enum="XRSessionRequestStatus">
    <summary>
      An enum value that describes the result of the call to `requestSession`
      method. See `` for enum type declaration. 0: Success. 1: Other failure.
    </summary>
    <aggregation>
      <history>
        <statistics>
          <enumeration/>
        </statistics>
      </history>
    </aggregation>
  </metric>
</event>

</ukm-configuration>
